Форум: "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