Главная страница
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.006 c
15-1306699762
LDV
2011-05-30 00:09
2011.09.18
распознавание текста


15-1306654677
ddd329
2011-05-29 11:37
2011.09.18
Трехзвенка в C#


2-1306835974
.dzmitry
2011-05-31 13:59
2011.09.18
use MODI Library


3-1262952948
Xmen
2010-01-08 15:15
2011.09.18
Ошибка ORA-12571


15-1306268993
Юрий
2011-05-25 00:29
2011.09.18
С днем рождения ! 25 мая 2011 среда