我今天用LISTVIEW做为图形显示。但是问题出在速度太慢
我 有200张JPG的图片,是用数码相机拍摄的,每个是:1280*960 605KB大小的彩色图
它在显示时速度慢,我后来分析问题,发现是:
jpg转BMP时的速度非常慢,而其它显示及文件查找时都很快。
源代友是这样写的:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ImgList,ShellApi, ShellCtrls, CommCtrl,jpeg;
{
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, ShellCtrls, ExtCtrls, Menus, jpeg,
ImgList,commctrl, ToolWin,StrUtils, HTTPApp, HTTPProd,shellapi,FileCtrl,
MPlayer;
}
type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
ImageList1: TImageList;
TreeV: TShellTreeView;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
OrginalBmp,ThumbBmp:Tbitmap;
PreViewBmp:Tbitmap;
ThumbJpg:TjpegImage;
PreViewJpg:TJpegImage;
public
{ Public declarations }
end;
var
Form1: TForm1;
filelist : TStringList;
filename : TStringList;
implementation
procedure TForm1.Button1Click(Sender: TObject);
var
num:integer;
ExtFileName:String;
SearchRecorder : TSearchRec;
attr :integer;
found :integer;
temstr:string;
Dir:String;
begin
//showmessage(treev.Path);
filelist:=tstringlist.Create;
filelist.Clear;
filename:=TStringList.Create;
filename.Clear;
memo1.Clear;
ThumbBmp:=Tbitmap.Create;
ThumbJpg:=TjpegImage.Create;
OrginalBmp:=Tbitmap.Create;
ThumbBmp.Height:=120;
ThumbBmp.Width:=160;
//Imagelist1.Create(self);
Imagelist1.Clear;
ImageList1.Width:=160; //缩略图
ImageList1.Height:=120;
listview1.LargeImages:=Imagelist1;
listview1.ViewStyle:=vsIcon;
temstr:=treev.Path +'/*.*';
// memo1.lines.Add(temstr);
attr:=faAnyFile;
found:=findfirst(temstr,attr,searchrecorder);
// memo1.lines.Add(inttostr(found));
//下面是取得文件列表功能。
dir:=treev.Path;
while found = 0 do
begin
ExtFileName:=LowerCase(ExtractFileExt(SearchRecorder.Name));
if (ExtFileName='.bmp') or (ExtFileName='.jpg') or (ExtFileName='jpeg') then
begin
if not ( dir[length(dir)]='/' ) then
begin
filelist.Add(dir+'/'+SearchRecorder.Name);
filename.Add(searchRecorder.name)
end
else
begin
filelist.Add(dir+SearchRecorder.name);
filename.Add(searchRecorder.name)
end;
end;
found:=findnext(searchRecorder);
end;
findclose(searchrecorder);
{ memo1.Clear;//这个代码可以显示你做的文件列表对不对,打印在MEMO1中了。
for num:=0 to filelist.count-1 do
begin
memo1.lines.add(filelist.strings[num]);
end;
memo1.lines.Add('HI,this is the filelist !');
}//设置每个ITEM的距离,
ListView_SetIconSpacing(ListView1.Handle ,161,150);
for num:=0 to filelist.Count-1 do
begin
// memo1.Lines.Add(fileList.Strings[num]);//显示文件全路径及文件名
// memo1.lines.Add(filename.Strings[num]);
ExtfileName:=LowerCase(ExtractFileExt(filename.strings[num]));
if (ExtfileName='.jpg') or (ExtFileName='.jpeg') then
begin
ThumbJpg.LoadFromFile(filelist.Strings[num]);
OrginalBmp.Assign(ThumbJpg); //。。这个地方太慢了转换要花很多时间。
end else
begin
if (ExtfileName='.bmp') then
OrginalBmp.LoadFromFile(filelist.Strings[num]);
end;
thumbbmp.Canvas.StretchDraw(rect(0,0,160,120),OrginalBmp);
ImageList1.Add(thumbbmp,nil);
// memo1.lines.Add(inttostr(imagelist1.Count ));
listview1.Items.Add.ImageIndex:=num;
listview1.Items[num].Caption :=filename.strings[num];
// listview1.items.Add.Caption:=filename.Strings[num];
listview1.update;
end;
现在问题就出在那句转换的地方,请各位高手指点。或者是有没有IMAGELIST控制是直接可以用JPG的。请各位帮助,我有分可以多给。?或者是有什么好的主意:如重新写JPG转BMP的处理程序还是?
请各位多帮助!!!!!!