現在、古い GDI コードを編集して GDI+ を使用していますが、背景が透明な BMP ファイルを描画するときに問題が発生しました。古いGDIコードは、背景を透明にするために明らかな余分なコードを使用していなかったので、GDI +を使用してこれを実現する方法を考えています。
私の現在のコードは次のようになります
HINSTANCE hinstance = GetModuleHandle(NULL);
bmp = Gdiplus::Bitmap::FromResource(hinstance, MAKEINTRESOURCEW(IDB_BMP));
Gdiplus::Graphics graphics(pDC->m_hDC);
graphics.DrawImage(&bmp, posX, posY);
また、クローン メソッドを使用してリソースから新しいビットマップを作成し、ビットマップを新しく作成したビットマップに描画しようとしましたが、どちらも役に立ちませんでした。どちらの場合も、PixelFormat32bppPARGB を使用しました。
次に、アルファブレンディングを使用しようとしましたが、この方法では背景だけでなく画像全体が透明になります。
Gdiplus::ColorMatrix clrMatrix = {
1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.5f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 1.0f
};
Gdiplus::ImageAttributes imgAttr;
imgAttr.SetColorMatrix(&clrMatrix);
graphics.DrawImage(&bmp, destRect, 0, 0, width(), height(), Gdiplus::UnitPixel, &imgAttr);
透明度情報は既に画像に含まれていますが、画像を描画するときにそれを適用する方法がわかりません。どうすればこれを達成できますか?