我开始使用PNG图像。然后我将alpha通道拆分为灰度BMP文件,并将PNG转换为BMP。 我想加载两个BMP文件并合并它们以给HBITMAP一个alpha通道:
HBITMAP splash = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_SPLASH));
HBITMAP splashMask = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_SPLASH_MASK));
HBITMAP splashAlpha = ....
我发现了example直接从PNG创建HBITMAP。它使用IStream和COM来进行导入。我宁愿不包含更多依赖项。当然有更好的方法来做到这一点?
答案 0 :(得分:1)
如果您正在寻找最少的代码,则应考虑将PNG转换为32位位图并使用AlphaBlend API绘制它们。
BLENDFUNCTION fn;
ZeroMemory(&fn, sizeof(fn));
fn.BlendOp = AC_SRC_OVER;
fn.BlendFlags = 0;
fn.SourceConstantAlpha = 255;
fn.AlphaFormat = AC_SRC_ALPHA;
AlphaBlend(dstDC, dstX, dstY, dstW, dstH, hdcSrc, srcX, srcY, srcW, srcH, fn);
问题是hdcSrc应该引用32位BGRA图像,其中Alpha通道被预乘到BGR通道中,即
B = B * A / 255;
G = G * A / 255;
R = R * A / 255;