5

同じサイズの 2 つ以上の異なる bmp 画像を重ね合わせて 1 つにマージすることはできますか? Windows XP の MS ペイントで行ったのと同じ方法で、ある画像を別の画像に貼り付け、二次色を透明にします。

例

4

2 に答える 2

9

Transparentのプロパティを使用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

2 番目のビットマップが白黒の場合、次のように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 に答える