ขณะนี้ฉันกำลังแก้ไขโค้ด 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);
ข้อมูลความโปร่งใสมีอยู่แล้วในภาพ แต่ฉันไม่รู้ว่าจะนำไปใช้อย่างไรเมื่อวาดภาพ เราจะบรรลุเป้าหมายนี้ได้อย่างไร?