bitmap设置了TransparentColor后,为何性能大大下降?(50分)

  • 主题发起人 主题发起人 linuxee
  • 开始时间 开始时间
L

linuxee

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个位图数组:Map: array[0..5] of TBitmap;
并在formcreate中初始化
procedure TFormMain.FormCreate(Sender: TObject);
begin
。。。。。。。。
for n := 0 to 5 do
begin
Map[n] := TBitmap.Create;
ImageList1.GetBitmap(n, map[n]);
Map[n].PixelFormat := pf8bit;
// Map[n].Transparent:=true; [red]//这两行导致cpu使用率多了20%[/red]
// Map[n].TransparentColor:=clwhite;
end;
。。。
end;
并在一个timer事件中调用draw函数
draw函数中循环调用Draw(x, y, Map[index]);
设置Transparent的目的是消除位图的白色背景
在不设Transparent的情况下,cpu使用率为14%
设了Transparent后,就变成40%左右了!!
不知是何原因??
多谢指点!

 
那位大侠帮帮忙阿?谢谢啦
 
简单,未设置Transparent时画Bitmap不必考虑目标上的原始图像,只要将Bitmap矩阵中的所有像素直接填到目标的相应位置上即可。
而设置Transparent与TransparentColor后,画Bitmap时必须事先保存目标上相应矩阵中的原始图像,然后一个点一个点比较Bitmap上某个点的颜色是否是TransparentColor, 如果是则将该点转成目标图像上相应点的颜色,最后再将经过转换的bitmap画到目标上(当然具体实现时并不是用个循环判断每个点而是直接用Windows提供的API生成mask再反复画了3次而完成的),这样做不占cpu才怪呢。
 
恩,那有什么解决办法吗?
如果去除背景色这么耗资源的话,怎么用delphi做复杂一点的图像处理阿
 
后退
顶部