MFC中CImage加载png图片出现黑色背景的解决办法!
2013-07-18 22:47
483 查看
最近在写一个图片控件,要能加载除了bmp以外的格式的图片,要求最好能加载png,能响应鼠标左键按下、弹起、滑过(鼠标经过)等等消息。
我让控件继承CWnd,然后再在XTP的浮动面板中作为子窗口测试以下加载图片的效果。结果发现,不管我是否对图片做了透明通道的处理,背景色都是黑色,这个问题困扰我好几天,网上各种找资料也没有解决。终于今天找到了问题在哪里了:stdafx.h中各种关于版本的宏,定义的版本太低了,需要0x0500及以上才可以支持透明特性。改成0x0500及以上就可以了(虽然支持透明特性,但是还是要做预乘,否则会有白边)。
其实这个知识点也有人提到,我看了看自己做实验的那个stdafx.h里面定义的版本没问题,以为自己出问题的那个工程的stdafx.h也没问题(因为这个工程不是我创建的,后来才知道是XTP向导生成的工程)。后来发现他们定义的版本居然不一样,都是向导生成的,不过一个是MFC自带的向导(VS05),一个是XTP工程的向导,后者定义的版本会比较低。
呼呼,今日先传个预乘的代码,待接口全部整理好了再全部上传:
我让控件继承CWnd,然后再在XTP的浮动面板中作为子窗口测试以下加载图片的效果。结果发现,不管我是否对图片做了透明通道的处理,背景色都是黑色,这个问题困扰我好几天,网上各种找资料也没有解决。终于今天找到了问题在哪里了:stdafx.h中各种关于版本的宏,定义的版本太低了,需要0x0500及以上才可以支持透明特性。改成0x0500及以上就可以了(虽然支持透明特性,但是还是要做预乘,否则会有白边)。
其实这个知识点也有人提到,我看了看自己做实验的那个stdafx.h里面定义的版本没问题,以为自己出问题的那个工程的stdafx.h也没问题(因为这个工程不是我创建的,后来才知道是XTP向导生成的工程)。后来发现他们定义的版本居然不一样,都是向导生成的,不过一个是MFC自带的向导(VS05),一个是XTP工程的向导,后者定义的版本会比较低。
呼呼,今日先传个预乘的代码,待接口全部整理好了再全部上传:
void CPicCtrl::DealAlphaChannel(CImage& image) { if (image.GetBPP() == 32) { for (int i=0; i<image.GetWidth(); i++) { for (int j=0; j<image.GetHeight(); j++) { unsigned char* pucColor = reinterpret_cast<unsigned char*>(image.GetPixelAddress(i , j)); pucColor[0] = pucColor[0] * pucColor[3] / 255; pucColor[1] = pucColor[1] * pucColor[3] / 255; pucColor[2] = pucColor[2] * pucColor[3] / 255; } } } }
相关文章推荐
- thinkPHP3.2上传透明背景,png图片出现白底解决办法
- 解决ie7以下浏览器PNG图片背景不透明且链接失效的办法
- 背景图片加载不出问题的解决办法
- ie6下png图片背景不透明的解决办法使用js实现
- iOS开发 关于tableView加载图片时出现卡顿时的解决办法
- Qt 解决png图片转jpg图片透明背景变成黑色的问题
- 解决listview设置背景图片以后,拖动出现黑色的问题。
- 使用Glide加载、缓存图片、Gif、解决背景出现浅绿色、GlideModules冲突
- IE6下PNG格式的图片背景不透明的解决办法
- 将Bitmap用Base64转码成字符串,再解码回来出现黑色背景的问题原因及解决办法。
- Android加载SD卡图片出现too large to be uploaded into a texture (4128x2322, max=4096x4096)的解决办法
- vc++加载透明png图片方法——GDI+和CImage两种 ,vs2005 vs2008 PNG背景
- 解决Qt中QLabel控件加载动态图出现黑色背景的问题
- 有关ie6下PNG图片背景不透明的一个js的解决办法
- 解决使用Glide加载图片背景出现浅绿色
- 使用Glide加载、缓存图片、解决背景出现浅绿色
- Jquery EasyUI dataGrid加载图片时,序号出现错行的解决办法
- richedit 输入法输入表情出现黑色背景的解决办法
- QWebView中出现加载网页乱码、图片加载不出来的问题解决以级QMainWindow背景图片设置问题
- 解决listview设置背景图片以后,拖动出现黑色的问题。