3

私はWin32で作業しています。ここ、使用する場合:

BitBlt(hdc, 0, 0, 32, 32, hdcMem, 0, 0, SRCAND); // hdc has mask in it
BitBlt(hdc, 0, 0, 32, 32, hdcMem, 0, 0, SRCPAINT);`// hdc has regular image in it

ビットマップ透明度を作成できます。私の問題は、これがターゲットの場所で hdc が既に空であるという事実に依存していることです。私はそうではないので、コードは既存の画像の一部を消去 (黒くします) します。透明なビットマップを、既に描画されている領域にコピーするにはどうすればよいですか?

マスクと画像の両方を 1000, 1000 に送信しようとしました - hdc に何も描画されていない場所で、BitBlt() で SRCCOPY を使用して結果を hdc から hdc にコピーしました。しかし、1000、1000 で何も引き出されなかったか、正しくコピーされませんでした。

4

1 に答える 1

7

代わりに使用できますTransparentBlt

BOOL TransparentBlt(
  _In_  HDC hdcDest,
  _In_  int xoriginDest,
  _In_  int yoriginDest,
  _In_  int wDest,
  _In_  int hDest,
  _In_  HDC hdcSrc,
  _In_  int xoriginSrc,
  _In_  int yoriginSrc,
  _In_  int wSrc,
  _In_  int hSrc,
  _In_  UINT crTransparent
);

ソース ビットマップの背景色が黒 ( #000000) の場合は、次のように設定するだけcrTransparentRGB(0,0,0)機能します。

于 2012-12-25T11:35:40.790 に答える