Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2011.09.18;
Скачать: [xml.tar.bz2];

Вниз

Где найти компонент отображающий Thumbnail ?   Найти похожие ветки 

 
leonidus ©   (2007-08-14 17:34) [0]

Нужен быстрый компонент способный отобразить превьюшки фоток, подскажите где такой найти?


 
Efir ©   (2007-08-14 18:10) [1]

А GDI+?


 
leonidus ©   (2007-08-14 22:42) [2]

Ну мне нужен именно компонент


 
leonidus ©   (2007-08-15 01:58) [3]

Делаю связку ImageList и ListView. В ImageList загружаю готовые превьюшки:

var
i:integer;
btm:tbitmap;
begin
for i:=1 to 10 do
 begin
  btm:=tbitmap.Create;
  btm.LoadFromFile("D:\Pics\"+inttostr(i)+".bmp");
  ImageList1.Add(btm,nil);

  ListView1.Items.Add.Caption:=inttostr(i);
  ListView1.Items.Add.ImageIndex:=i-1;

  btm.Free;
 end;

и они соотв. появляются в ListView, но не получается настроить ViewStyle для того чтобы результат был именно такой как хочется увидеть, то картинки вообще не отображаются, то вместо 10 вижу 20 картинок, черти что. Как же здесь быть?


 
s7r ©   (2007-08-15 11:16) [4]

Вот код процедуры которая добавляет в ImageThumbs (TImageList) миниатюру файла указанного путем FilePath, и связывает ее с элементом ListView. Работает действительно быстро из за Img.GetThumbnailImage. Для работы необходимо подключить к проекту GDIPAPI, GDIPOBJ.(заголовочные файлы для работы с gdi+).
AddFile(const FilePath, Caption: string);
var
 TempBmp: TBitmap;
 gdiGraphics: TGPGraphics;
 Img, Thumb: TGPImage;
 W, H: double;
begin
 TempBmp:=TBitmap.Create;
 TempBmp.Width:=150;
 TempBmp.Height:=100;

 gdiGraphics:=TGPGraphics.Create();
 Img:=TGPImage.Create();

 Img:=Img.FromFile(FilePath);
 Thumb:=Img.GetThumbnailImage(0, 0, nil, nil);
 if(Img.GetWidth()>Img.GetHeight())then
   begin
     H:=TempBmp.Height;
     W:=(H/Img.GetHeight)*Img.GetWidth();
   end
 else
   begin
     H:=TempBmp.Height;
     W:=(H/Img.GetHeight())*Img.GetWidth();
   end;
 gdiGraphics:=gdiGraphics.FromHDC(TempBmp.Canvas.Handle);
 gdiGraphics.DrawImage(Thumb, trunc(TempBmp.Width/2-W/2), 0, W, H);
 FormMain.ImageThumbs.Add(TempBmp, FilePath);
 ListView.AddItem(Caption, path);
 ListView.Items[ListView.Items.Count-1].ImageIndex:=          FormMain.ImageThumbs.Count-1;
 Img.Free;
 Thumb.Free;
 gdiGraphics.Free;
 TempBmp.Free;
end;


 
s7r ©   (2007-08-15 11:19) [5]

Да и в imagelist нужно установить Height:=100 и Width:=150.


 
leonidus ©   (2007-08-15 15:22) [6]

>S7r большое спасибо за код, но подключить GDIPAPI, GDIPOBJ не удалось, не находит .dcu файлы. Что делать?


 
leonidus ©   (2007-08-15 16:31) [7]

заголовочные файлы подцепил, но компилятор ругается на второй параметр в обеих строчках:

FormMain.ImageThumbs.Add(TempBmp, FilePath);
ListView.AddItem(Caption, path);

помогла замена параметра на nil, но тогда функция на работает. Вызываю ее так:

for i:=1 to 10 do
  AddFile("D:\Pics\"+inttostr(i)+".bmp",inttostr(i));


 
s7r ©   (2007-08-15 21:40) [8]

FormMain.ImageThumbs.Add(TempBmp, FilePath);
ListView.AddItem(Caption, path);

Да в этих строчках действительно второй параметр может быть nil (В первой в данном случае должен) - это я сам ошибся. Но у меня с соответствующей заменой все работает. В listview нужно еще установить ListView.LargeImages:=ImageThumbs;
ListView.SmallImages:=ImageThumbs;


 
leonidus ©   (2007-08-15 22:46) [9]

Да, теперь заработало, спасибо еще раз.
Но вот есть одна проблема. Самый удобный для меня режим это vsList, т.к. хочется сделать предпросмотр как в ACDSee, но в этом режиме между столбцами получаются большие расстояния, равные ширине превьюшки. Можно ли как-то от этого избавиться?


 
leonidus ©   (2007-08-16 19:41) [10]

Методом тыка, пришел к удовлетворительному результату и при стиле равном vsIcon, но и там засада) превьюшки отображаются только в два ряда, даже если окно ListView имеет заведомо большую высоту, т.е. в принципе там могло поместиться и 3 и 4 ряда, но отображается упорно только 2. С чем это может быть связано?


 
s7r ©   (2007-08-19 16:49) [11]

Для установки расстояния между Items в list view нужно послать следующее сообщение:
SendMessage(ShellListView1.Handle, LVM_SETICONSPACING, 0, MAKELONG(X, Y));
где X и Y -соответственно расстояния по горизонтали и вертикали.


> Методом тыка, пришел к удовлетворительному результату и
> при стиле равном vsIcon, но и там засада) превьюшки отображаются
> только в два ряда, даже если окно ListView имеет заведомо
> большую высоту, т.е. в принципе там могло поместиться и
> 3 и 4 ряда, но отображается упорно только 2. С чем это может
> быть связано?


Попробуйте установить в IconOptions Arrangement=iaTop.


 
deivan   (2008-07-21 13:41) [12]

c помощью Мастеров Дефи был создан следующий код:
procedure TForm1.Button3Click(Sender: TObject);
var
 jpeg: TJPEGImage;
 bmp:  TBitmap;
 i: Integer;
begin
 if OpenPictureDialog1.Execute
   then
     begin
     jpeg:=TJPEGImage.Create;
     jpeg.LoadFromFile(OpenPictureDialog1.FileName);
     Image1.Picture.Assign(jpeg);
     TJPEGImage(Image1.Picture.Graphic).Scale :=jsEighth;          
     TJPEGImage(Image1.Picture.Graphic).Performance := jpBestSpeed;
     bmp := TBitmap.Create;
     bmp.width:=120; bmp.height:=90;
     bmp.Canvas.StretchDraw(bmp.Canvas.Cliprect, jpeg );
     with ListView1.Items.Add do begin
       Caption:=OpenPictureDialog1.FileName;
       ImageIndex:=ImageList1.Add(bmp,nil);
     end;
     jpeg.Free;
     bmp.Free;
 end;
end;

открываются файлы жпег и помещаются в листвью, туда же идут превьюшки размером 120х90. Элемент Имаже в коде выше - это картинка на форме, которая курупно показывает только что добавленный в листвью жпег.



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2011.09.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
2-1306677371
Justin
2011-05-29 17:56
2011.09.18
Как определить соотношение ширина/высота?


15-1306320156
clickmaker
2011-05-25 14:42
2011.09.18
Как в ICQ 7.5 отключить открытие по Ctrl+Shift+I


15-1306480585
OW
2011-05-27 11:16
2011.09.18
Старая программка вылетает TProgressBar property out of range


15-1306355396
Юрий
2011-05-26 00:29
2011.09.18
С днем рождения ! 26 мая 2011 четверг


15-1306465531
Leon-Z
2011-05-27 07:05
2011.09.18
Как дать правильное имя?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский