2
BitBlt(meteor.main, 0, 0, meteor.img_width, meteor.img_height, meteor.image,  meteor.mask_x, meteor.mask_y, SRCAND);
BitBlt(meteor.main, 0, 0, meteor.img_width, meteor.img_height, meteor.image,  meteor.img_x,  meteor.img_y,  SRCPAINT);
BitBlt(buffer, 0, 0, 800, 600, meteor.main, 0, 0, SRCCOPY);

最初の2つのビットビットが透明性を作ることは知っていますが、3番目のビットビットはそれを取り除きます!私はここで何が間違っているのですか?

4

1 に答える 1

1

SrcCopyソースから宛先まですべてをフラットコピーするだけです。目的地にあったものはすべて、ソースからのすべてが含まれるようになります。

私が通常これを行う方法は

1)BitBlt(dest.hdc, dest.x, dest.y, width, height, srcMask.hdc, srcMask.x, srcMask.y, MergePaint)

これは基本的に、マスクの形で目的地に穴を開けます。

2)BitBlt(dest.hdc, dest.x, dest.y, width, height, src.hdc, src.x, src.y, SrcAnd)

これは基本的に、ソースを宛先の上にオーバーレイします。

ソースにオーバーレイしたい画像よりも多くの画像が含まれている場合は、最初に次のSrcPaintように使用して、ソースの周囲にあるすべての画像を最初に切り取ります(手順2の前)。

1b)BitBlt(src.hdc, src.x, src.y, width, height, srcMask.hdc, srcMask.x, srcMask.y, SrcPaint)

于 2014-05-19T18:13:17.793 に答える