请教如何将bitmap上的前景图拷贝到另一个画布中,而背景色不复制(10分)

  • 主题发起人 主题发起人 萍水相逢9
  • 开始时间 开始时间

萍水相逢9

Unregistered / Unconfirmed
GUEST, unregistred user!
请教如何将bitmap上的前景图拷贝到另一个画布中,而背景色不复制。对不起各位大虾,分不够了
 
procedure TForm1.FormPaint(Sender: TObject);
begin
Image1.Picture.Bitmap.Transparent := true;
self.Canvas.Draw(2, 2, Image1.Picture.Bitmap);

end;
 
多谢,不过还有一些问题。我的目的是要创建一个bitmap,然后在上面画了一条线,再将这条线拷贝到另一个已有图形的bitmap上,要求该线覆盖原图,而其余部分保留原来的图形。
 
单纯是线段的话,只需要改变一下CopyMode的属性就可以了。
Canvas.CopyMode:=cmSrcAnd;
Canvas.CopyRect(...);
默认的CopyMode属性是cmSrcCopy;
最简单的方法了,但是底色必须是白色。不过线条的颜色可能会有一定改变,建议使用黑色的线条。
要高级一点的话,进行两次贴图,一次用cmSrcAnd,一次用cmSrcPaint。
注意:两次贴图中,第一次要贴屏蔽图即类似于Photoshop中的Mask功能,白色为底色,黑色为要贴的部分。第二次要贴的是原本图像,黑色底色。屏蔽图中的白色部分,在原本图像中必须是黑色,这样就可以贴图片了,颜色也不会有改变。我已经试验过了,可以用的。
 
Image1.Picture.Bitmap.Transparent := true;
这句实际上是把Pixels[0,0]的颜色值作为透明色滤掉了
除非你有特别的需要,建议使用第一种方法,只要把BMP的背景色设成不常用的就可以了
不过经典的做法确实如ZhouSL所说用两次贴图,抠出前景图来
但两种方法的原理是一样的
 
Canvas.Brush.Style := bsClear;
 
目前,若对bitmap中的图形是256色的图形操作没问题,但若加入的不是pf8bit,则仍在叠加时产生颜色的变化。
请楼上各位大虾指点,如何将一张单色、或16色、或真彩色的bmp图形转换成256色bmp.多谢各位了!!
 
多人接受答案了。
 

Similar threads

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