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);

我知道前两个 bitblts 使透明度,但第三个删除它!我在这里做错了什么?

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)

这基本上将源覆盖在目标之上。

如果您的源包含的图像多于您想要覆盖的图像,您可能首先需要先剪掉源周围的所有图像(在第 2 步之前),使用SrcPaint如下所示:

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

于 2014-05-19T18:13:17.793 回答