大家帮看看,这二句有什么不同,那一个处理的速度快点?(50分)

  • 主题发起人 主题发起人 3cs
  • 开始时间 开始时间
3

3cs

Unregistered / Unconfirmed
GUEST, unregistred user!
var
Map:TBitmap;

Image1.picture.bitmap.assign(map);//这是1

Image1.Canvas.Draw(0,0,map);//这是2

这二句有什么不同?
那一句处理的速度快些,为什么?
 
个人感觉直接画最快了
 
to 茄子:
你的意思是
Image.Canvas.Draw(0,0,bmp);
最快?为什么?
 
绝对是 Assign 快,看看 TBitMap 的 Assign 实现:
procedure TBitmap.Assign(Source: TPersistent);
var
DIB: TDIBSection;
begin
if (Source = nil) or (Source is TBitmap) then
begin
FreeContext;
EnterCriticalSection(BitmapImageLock);
try
if Source <> nil then
begin
TBitmap(Source).FImage.Reference;
FImage.Release;
FImage := TBitmap(Source).FImage;
FTransparent := TBitmap(Source).FTransparent;
FTransparentColor := TBitmap(Source).FTransparentColor;
FTransparentMode := TBitmap(Source).FTransparentMode;
end
else
begin
FillChar(DIB, Sizeof(DIB), 0);
NewImage(0, 0, DIB, False);
end;
finally
LeaveCriticalSection(BitmapImageLock);
end;
PaletteModified := Palette <> 0;
Changed(Self);
end
else inherited Assign(Source);
end;
类似 delphi 的 string,竟然只是 Reference 增加对位图的引用计数而已,如果只读用 assign 最优,如果要修改还是建议 draw 更直接,因为存在“写复制”啊。
 
实际使用中用assign似乎会增加内存
好像是分配了一个新的对象。
还是用draw好些
 
assign永远是最慢的
 
有点明白了,不过不是太明白,哈哈
to:LSUPER
能不能对Draw的特性也作个论述!谢谢了
 
多人接受答案了。
 
后退
顶部