是否可以通过在彼此上叠加来将大小相同的两个或多个不同的bmp图片合并成一个?就像Windows XP的MS Paint中所做的那样:将一张图片粘贴到另一张图片上,其中第二个颜色是透明的。
您可以使用TBitmap
的Transparent
属性来实现此效果。由于您的位图具有黑色边框,自动透明颜色(图像数据的第一个像素)将不起作用,因此您还需要将TransparentColor
属性设置为“clWhite”。
var
bmp1, bmp2: TBitmap;
begin
bmp1 := TBitmap.Create;
bmp1.LoadFromFile('...\test1.bmp');
bmp2 := TBitmap.Create;
bmp2.LoadFromFile('...\test2.bmp');
// bmp2.PixelFormat := pf24bit; // with 32 bit images I need this, don't know why
bmp2.Transparent := True;
bmp2.TransparentColor := clWhite;
bmp1.Canvas.Draw(0, 0, bmp2); // draw bmp2 over bmp1
// this is how the merged image looks like
Canvas.Draw(0, 0, bmp1);
..
如果第二个位图是黑白的,您可以将其用作掩码,在使用BitBlt(位块传输)进行光栅操作时,按以下方式操作:
Windows.BitBlt(Bmp3.Canvas.Handle, 0, 0, Bmp3.Width, Bmp3.Height,
Bmp1.Canvas.Handle, 0, 0, SRCCOPY);
Windows.BitBlt(Bmp3.Canvas.Handle, 0, 0, Bmp3.Width, Bmp3.Height,
Bmp2.Canvas.Handle, 0, 0, SRCAND);