Windows API用の"Transparent Bitmaps"チュートリアルを読んだ後、ビットレベルでSRCANDでBitblt()関数を理解できません。Bitblt()はSRCANDとどのように機能しますか?
SRCANDを使用して1つの白黒ビットマップを描画するためのコードの一部は、このチュートリアルに基づいています。黒い色がままにしながら、ビット単位でAND、ビットマップ画像の白色が結果に消えてどのように私はについて混乱している何
BITMAP bm;
RECT rcClient;
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps); //hwnd = handle to current window
HDC hdcMem = CreateCompatibleDC(hdc);
GetObject(g_hbmBall, sizeof(bm), &bm); //g_hbmBall = handle to bitmap object
GetClientRect(hwnd, &rcClient);
FillRect(hdc, &rcClient, (HBRUSH)GetStockObject(LTGRAY_BRUSH));
SelectObject(hdcMem, g_hbmBall);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCAND);
は、最後の行です。これは私が視覚的に見たものである(SRCANDためのドキュメントは、それが「ブールAND演算子を使用して送信元と送信先の長方形の色を組み合わせます。」と言う)
全体的に、私は思ったんだけど、ビット単位のレベルでは、ウィンドウ内のデバイスコンテキストへのハンドルと、結果として白い色が消える原因となる黒色/黒色のイメージとの比較が行われます。
私が考えたことは、当初、デバイスコンテキストへのハンドルには0しか含まれていなかったということでした。したがって、どの色がANDとなるかに関わらず、0とANDを実行すると常に0が返されるため、最終的にすべてが黒で黒い四角になります。
透明性のために['AlphaBlend'](https://msdn.microsoft.com/en-us/library/windows/desktop/dd183351(v = vs.85).aspx) – RbMm