如何最快地复制TBitmap ???(50分)

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

apolloone

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将bm0复制到bm1:
bm0:=tbitmap.create;
bm1:=tbitmap.create;
bm0.loadfromfile(ExtractFileDir(Application.ExEName)+'/Demo.Bmp');
???bm1.loadfromfile(ExtractFileDir(Application.ExEName)+'/Demo.Bmp'); //可以但很慢
???bitblt(bm1.canvas.handle,0,0,bm0.Width,bm0.Height,bm0.canvas.handle,0,0,srccopy);//怎么不行呢?
 
bm0:=tbitmap.create;
bm1:=tbitmap.create;
bm0.loadfromfile('c:/1.bmp');
bm1.Assign(bm0);
 
谢谢 menxin
能告诉我:
bitblt(bm1.canvas.handle,0,0,bm0.Width,bm0.Height,bm0.canvas.handle,0,0,srccopy);
//怎么不行吗?
 
刚才测试了一下,我的这么写没有问题
procedure TForm1.Button1Click(Sender: TObject);
var
bm0,bm1: TBitmap;
begin
bm0 :=Image1.Picture.Bitmap;
bitblt(image2.Canvas.Handle,0,0,bm0.Width,bm0.Height,bm0.Canvas.Handle,0,0,SRCCOPY);
end;
 
// ???bitblt(bm1.canvas.handle,0,0,bm0.Width,bm0.Height,bm0.canvas.handle,0,0,srccopy);//怎么不行呢?
你没有指定目标图像的大小,加上这两句即可:
bm1.Width := bm0.Width;
bm1.Height := bm0.Height;

也可以用Canvas的CopyRect方法复制图像。
 
如果复制后两个bmp都没有改变的话,assign最快
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
794
import
I
后退
顶部