5

是否可以通过相互叠加将两个或多个相同大小的不同 bmp 图片合并为一个?与在 Windows XP MS Paint 中相同的方式:将一张图片粘贴到另一张图片中,辅助颜色是透明的。

例子

4

2 回答 2

9

您可以使用Transparentof 的属性TBitmap来实现该效果。由于您的位图有黑色边框,因此自动透明颜色(图像数据的第一个像素)将不起作用,您还需要将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);
  ..
于 2013-09-23T00:12:05.560 回答
4

如果第二个位图是黑白的,您可以将其用作带有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);
于 2013-09-23T00:58:54.257 回答