我正在尝试仅使用GDI函数将包含透明区域的增强型图元转换为32位图。这有可能获得正确的alpha值吗?
以下导致32位位图,每个像素的alpha值设置为0:
首先,我使用CreateCompatibleDC(NULL)
检索到的屏幕DC,使用HBITMAP
创建一个内存DC,使用CreateCompatibleBitmap
创建GetDC(NULL)
。 (后者生成32位位图的句柄。)
然后我使用SelectObject
将创建的位图选择到内存DC中。
最后,我使用PlayEnhMetaFile
将包含透明区域的增强型图元文件绘制到内存DC中。
答案 0 :(得分:1)
我没有使用PlayEnhMetaFile
的经验,但您可以使用带有AlphaBlend
的Alpha通道绘制内存DC
inline BOOL AlphaBlt(HDC hDC, int x, int y, int cx, int cy, HDC hSrcDC, int xSrc, int ySrc, int cxSrc, int cySrc)
{
static BLENDFUNCTION bf = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
return AlphaBlend(hDC, x, y, cx, cy, hSrcDC, xSrc, ySrc, cxSrc, cySrc, bf);
}
希望有所帮助。