先看看代码 :unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, StdCtrls, ComCtrls, Jpeg, ExtCtrls;type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
ImageList1: TImageList;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
FileList: TStringList;implementation{$R *.dfm}
procedure ChangeDir(dir: string);
var
SearchRec : TSearchRec;
Attr : integer;
Found : integer;
ExtFileName:string;
temstr:string;
begin
FileList.Clear;
temstr:=dir+'\*.*';
Attr := faAnyFile;
Found := FindFirst(temstr, Attr, SearchRec);
while Found = 0 do
begin
ExtFileName:=LowerCase(ExtractFileExt(SearchRec.Name));
if (ExtFileName='.bmp') or (ExtFileName='.jpg') or ((ExtFileName='.jpeg')) then
FileList.Add(dir+'\'+SearchRec.Name) ;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;procedure JpgToBmp(const JpgFileName:string;AJpg:TJpegImage;Abmp:Tbitmap);
begin
try
AJpg.LoadFromFile(JpgFileName);
Abmp.Assign(AJpg);
finally
end;
end;procedure DrawPanel(canvas:TCanvas; Left,Top,Width,Height: integer; PanelType:integer);
var
Right,Bottom:integer;
LeftTopColor,RightBottomColor:TColor;
begin
if PanelType=1 then begin
LeftTopColor:=clwhite;
RightBottomColor:=clgray;
end
else begin
LeftTopColor:=clgray;
RightBottomColor:=clwhite;
end; Right:=Left+width;
Bottom:=Top+Height; Canvas.Pen.Width:=1;
Canvas.Pen.Color:=LeftTopColor; Canvas.MoveTo(Right,Top);
Canvas.lineTo(Left,Top);
Canvas.LineTo(Left,bottom); Canvas.Pen.Color:=RightBottomColor;
Canvas.lineTo(Right,Bottom);
Canvas.lineTo(Right,Top);
end;procedure AddThumbFromFile(FullFileName: string; ImageList: TImageList ) ;
var
OriginalBmp,ThumbBmp:TBitmap;
OrignalJpg : TJpegImage ;
ThumbBmpHeight,
ThumbBmpTop,
ThumbBmpWidth,
ThumbBmpLeft: integer;
begin
OrignalJpg := TJpegImage.Create ;
OriginalBmp:= TBitmap.Create ;
ThumbBmp:= Tbitmap.Create; JpgToBmp(FullFileName,OrignalJpg,OriginalBmp); if OriginalBmp.Height>=OriginalBmp.Width then
begin
ThumbBmpWidth:= 120*OriginalBmp.Width div OriginalBmp.Height;
ThumbBmpLeft:= (120-ThumbBmpWidth) div 2 -1; ThumbBmp.Canvas.Brush.Color :=clBtnFace;
ThumbBmp.Canvas.FillRect(ThumbBmp.Canvas.ClipRect); DrawPanel(ThumbBmp.Canvas,0,0,150-1,150-1,1);
DrawPanel(ThumbBmp.Canvas,9,9,120-1,120-1,2);
ThumbBmp.Canvas.StretchDraw(Rect(ThumbBmpLeft+9,9,ThumbBmpLeft+ThumbBmpWidth+9,119),
OriginalBmp);
ImageList.Add(ThumbBmp,nil); //这里出错 invaid image size 怎么回事??
end; OrignalJpg.Free;
OriginalBmp.Free;
ThumbBmp.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I : integer ;
begin
FileList := TStringList.Create ;
ImageList1.Height := 150 ;
ImageList1.Width := 150 ;
ChangeDir('c:\1\');
ListView1.Items.BeginUpdate;
for I:=0 to FileList.Count-1 do begin
AddThumbFromFile(FileList[I],ImageList1);
with ListView1.Items.Add do begin
ImageIndex:=imagelist1.Count-1;
caption:=ExtractFileName(FileList[I]);
end;
end;
ListView1.Items.EndUpdate;
FileList.Free ;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, StdCtrls, ComCtrls, Jpeg, ExtCtrls;type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
ImageList1: TImageList;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
FileList: TStringList;implementation{$R *.dfm}
procedure ChangeDir(dir: string);
var
SearchRec : TSearchRec;
Attr : integer;
Found : integer;
ExtFileName:string;
temstr:string;
begin
FileList.Clear;
temstr:=dir+'\*.*';
Attr := faAnyFile;
Found := FindFirst(temstr, Attr, SearchRec);
while Found = 0 do
begin
ExtFileName:=LowerCase(ExtractFileExt(SearchRec.Name));
if (ExtFileName='.bmp') or (ExtFileName='.jpg') or ((ExtFileName='.jpeg')) then
FileList.Add(dir+'\'+SearchRec.Name) ;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;procedure JpgToBmp(const JpgFileName:string;AJpg:TJpegImage;Abmp:Tbitmap);
begin
try
AJpg.LoadFromFile(JpgFileName);
Abmp.Assign(AJpg);
finally
end;
end;procedure DrawPanel(canvas:TCanvas; Left,Top,Width,Height: integer; PanelType:integer);
var
Right,Bottom:integer;
LeftTopColor,RightBottomColor:TColor;
begin
if PanelType=1 then begin
LeftTopColor:=clwhite;
RightBottomColor:=clgray;
end
else begin
LeftTopColor:=clgray;
RightBottomColor:=clwhite;
end; Right:=Left+width;
Bottom:=Top+Height; Canvas.Pen.Width:=1;
Canvas.Pen.Color:=LeftTopColor; Canvas.MoveTo(Right,Top);
Canvas.lineTo(Left,Top);
Canvas.LineTo(Left,bottom); Canvas.Pen.Color:=RightBottomColor;
Canvas.lineTo(Right,Bottom);
Canvas.lineTo(Right,Top);
end;procedure AddThumbFromFile(FullFileName: string; ImageList: TImageList ) ;
var
OriginalBmp,ThumbBmp:TBitmap;
OrignalJpg : TJpegImage ;
ThumbBmpHeight,
ThumbBmpTop,
ThumbBmpWidth,
ThumbBmpLeft: integer;
begin
OrignalJpg := TJpegImage.Create ;
OriginalBmp:= TBitmap.Create ;
ThumbBmp:= Tbitmap.Create; JpgToBmp(FullFileName,OrignalJpg,OriginalBmp); if OriginalBmp.Height>=OriginalBmp.Width then
begin
ThumbBmpWidth:= 120*OriginalBmp.Width div OriginalBmp.Height;
ThumbBmpLeft:= (120-ThumbBmpWidth) div 2 -1; ThumbBmp.Canvas.Brush.Color :=clBtnFace;
ThumbBmp.Canvas.FillRect(ThumbBmp.Canvas.ClipRect); DrawPanel(ThumbBmp.Canvas,0,0,150-1,150-1,1);
DrawPanel(ThumbBmp.Canvas,9,9,120-1,120-1,2);
ThumbBmp.Canvas.StretchDraw(Rect(ThumbBmpLeft+9,9,ThumbBmpLeft+ThumbBmpWidth+9,119),
OriginalBmp);
ImageList.Add(ThumbBmp,nil); //这里出错 invaid image size 怎么回事??
end; OrignalJpg.Free;
OriginalBmp.Free;
ThumbBmp.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I : integer ;
begin
FileList := TStringList.Create ;
ImageList1.Height := 150 ;
ImageList1.Width := 150 ;
ChangeDir('c:\1\');
ListView1.Items.BeginUpdate;
for I:=0 to FileList.Count-1 do begin
AddThumbFromFile(FileList[I],ImageList1);
with ListView1.Items.Add do begin
ImageIndex:=imagelist1.Count-1;
caption:=ExtractFileName(FileList[I]);
end;
end;
ListView1.Items.EndUpdate;
FileList.Free ;
end;end.
解决方案 »
- delphi 如何判断游戏或电影的全屏状态
- 新手问题,如何用代码筛选Access的记录到ListBox?
- FastReport2.5中交叉报表能设置居中吗?3.15中,如何实现与2.5一样,在frPreview中预览,并显示工具条
- 简单问题 Access数据库中单精度小数 为什么数据库控件DBgrid显示会那么多小数位数?
- MM,有个难题急需解决是关于数据库中一条记录打印预览的问题请各位帮忙
- 请教限制的问题!还望大家多多指教,谢谢!
- 关于exe+bpl模式开发程序的几点疑惑,希望大家看下。
- Delphi XE4真的可以写iOS程序吗?
- 关于dbgrid的行号的问题?在线等待!可以加分!
- 在做报表时,预览左右显示不全,但又没有左右滚动条,如何显示滚动条?谢谢!
- 高手请教!!!关于string的问题。
- 关于table存储的问题,高手也要进呀。
c:\1 下有两个 jpg 文件读这两个文件 显示缩略图在 listview里面 现在运行到 imagelist.add(ThumdBmp,nil); 的时候报错 invaide image size
你可以试一下啊 谢谢了 真见鬼。
b2.Canvas.StretchDraw(RECT(0, 0, 90, 60), bitmapbuffer); //
....
b2.Height:= ImgList_Album.Height;
....
b2.Canvas.StretchDraw(RECT(0, 0, 90, 60), bitmapbuffer); //
....