各种图形文件查看器,类似于ACDSEE的功能,请多指教!必有重谢!(200分)

  • 主题发起人 主题发起人 Alongsun
  • 开始时间 开始时间
A

Alongsun

Unregistered / Unconfirmed
GUEST, unregistred user!
想开发一个软件,做TIF,JPG等格式文件的查看,类似于ACDSEE的功能,请大家多帮助,必有重谢!
 
请大家多帮助!
 
我就是想在DELPHI中实现图形文件的查看和缩略图,请多指教!
 
楼主上网搜搜吧,类似的代码不少啊!
http://www.google.com/search?hl=zh-CN&newwindow=1&q=delphi+ACDSEE+%E6%BA%90%E7%A0%81&lr=
 
我今天用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的处理程序还是?
请各位多帮助!!!!!!
 
我自己做了这个缩略图的程序,参考了IMAGESEE的源程序,但是速度提高的问题也不快,而且我的客户要求的缩略图大小不是50*60,而是160*120 4/3的比例,和数码相机拍摄的比例完全一样。
我还想在显示的缩略图中画上一个透明的矩形框,不知道如何实现。
源代码如下:
ThumbJpg.LoadFromFile(ImageFileName);
ThumbBmp.Canvas.Brush.Color:=clBtnFace;
ThumbBmp.Canvas.FillRect(ThumbBmp.Canvas.ClipRect );
//如果是标准4:3 的比例图像就正常显示
if (( ThumbJpg.Height / ThumbJpg.Width)= 0.75 ) then
begin

ThumbBmp.Canvas.StretchDraw(Rect(0,0,160,120),ThumbJpg);

如何加矩形呢,
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
800
DelphiTeacher的专栏
D
后退
顶部