2012-08-30 32 views
2

我开始使用PNG图像。然后我将alpha通道分成灰度级BMP文件并将PNG转换为BMP。 我想加载两个BMP文件,并把它们合并给予HBITMAP用alpha通道:从BMP文件创建带alpha通道的HBITMAP

HBITMAP splash = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_SPLASH)); 
HBITMAP splashMask = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_SPLASH_MASK)); 
HBITMAP splashAlpha = .... 

我发现了一个example直接从PNG创建一个HBITMAP的。它使用IStream和COM来执行导入。我宁愿不包含更多的依赖关系。当然有更好的方法来做到这一点?

回答

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;