soui是一个非常牛逼的界面库,里面对图片透明有着很好的支持,这也是我喜欢soui的一个重要原因。soui中不仅可以设置主窗口半透明,而且还可以设置soui子窗口半透明,两者的设置都非常的简单。只需要在xml中设置下属性就好了。
但我一直好奇,透明技术是如何实现的。看了下soui的源码,在渲染引擎为gdi模式下,透明实现用了UpdateLayeredWindow和AlphaBlend技术,两者都有一个共同的BLENDFUNCTION 参数,这个结构体对透明有着重要的影响。
前几天在msdn上面找到了一个Alpha Blending a Bitmap(Windows)的一段 代码,下面是该原文地址的连接:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd183353%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
在注释里面我发现了这样一句话:msdn意思是说32位位图像素格式是0xaarrggbb格式的。我尝试修改了像素值发现确实是这样。
// in top window area, constant alpha = 50%, but no source alpha
// the color format for each pixel is 0xaarrggbb
// set all pixels to blue and set source alpha to zero
soui中还有一个非常牛逼的地方就是,支持多种图像解码模块,比如stb,wic,apng