b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

CImage的Draw对Alpha混合的处理问题

电脑杂谈  发布时间:2019-12-11 05:02:35  来源:网络整理

cimage draw函数_cimage png_cimage draw 失真

2009年9月7日 | K-Res 发布

cimage draw函数_cimage png_cimage draw 失真

ATL库中的CImage类封装了GDI+的一些猥琐函数,使在win32下对PNG等非直接BMP的照片格式的操作方便了好多。但今天在用到Draw函数时看到其对Alpha混合的处理有些与众不同(不知道是不是m$的bug)cimage draw 失真,PNG中A为0的像素被画成了纯白色!

cimage draw函数_cimage png_cimage draw 失真

查了MSDN后看到CImage的Draw函数会按照不同的先决条件执行不同的绘图操作,没有透明色或Alpha通道的之后直接使用StretchBltcimage draw 失真,有透明色没A通的之后用TransparentBlt,最后有A的之后用AlphaBlend。(注意:如果编译时没有定义WINVER宏版本>=0x0500的话虽然有A也不会执行处理透明的绘图方法!)。

cimage draw函数_cimage png_cimage draw 失真

跟了一下程序确实是执行了AlphaBlend绘图,但就是将透明的背景画成了黑色,G了半天,发现有人提到GDI+的Alpha Blend使用的是PARGB(P=Premultiplied)像素格式,预乘的ARGB,所有RGB的值乘以Alpha。但不知道为什么对此PNG的处理没有进行预乘,却按预乘后的数据来进行混合,导致蓝色背景。而CImage加载的照片ARGB数据确实没错,因为前面我将此CImage转换为了OpenGL材质进行贴图绘制时就没有出现透明背景色的出错问题!

cimage png_cimage draw函数_cimage draw 失真

PS:最后看到有一些png图的透明色可以被正常处理,现在担心是很多照片的导出方法不对导致。

Powered by Zoundry Raven

请输入应加密的内容


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-133140-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...