Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.09.18;
Скачать: CL | DM;

Вниз

Где найти компонент отображающий 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 вся ветка

Текущий архив: 2011.09.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.143 c
15-1306308339
NailMan
2011-05-25 11:25
2011.09.18
Давно что то не летали(акро-видео)


8-1187098476
leonidus
2007-08-14 17:34
2011.09.18
Где найти компонент отображающий Thumbnail ?


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


15-1305036794
Empleado
2011-05-10 18:13
2011.09.18
MS Skype


15-1306528204
Юрий
2011-05-28 00:30
2011.09.18
С днем рождения ! 28 мая 2011 суббота