利用CImage合并两张图片后保存
来源:互联网 发布:淘宝怎么给商品打折 编辑:程序博客网 时间:2024/06/05 04:21
今天同事那边遇到了一个问题,希望将一个不透明的图片,贴在一透明的PNG上。
想着应该比较简单,直接贴过去就可以了。在实践过程中,发现图片贴过去后,PNG的Alpha通道会丢失。
经过实验,发现是CImage的Attach与Detach接口造成。
CImage类提供了GetDC的接口,使用自带的GetDC接口解决了丢失的问题。但是贴过去后,不透明的图片区域变成了完全透明。
经过排查发现是两张图片的位深不同造成的。因此,在两者位深不同时需要进行一个简单的转换。
还是值得记一个这个问题
下面贴一下代码
CImage bk, fr, temp; bk.Load(L"D:/bk.png"); fr.Load(L"D:/fr.png"); int bppFr = fr.GetBPP(); int bppBk = bk.GetBPP(); if (bppFr != 32) { temp.Create(fr.GetWidth(), fr.GetHeight(), 32, CImage::createAlphaChannel); for (auto x = 0; x < fr.GetWidth(); ++x) { for (auto y = 0; y < fr.GetHeight(); ++y) { byte* pSour = (byte*)fr.GetPixelAddress(x, y); byte* pDest = (byte*)temp.GetPixelAddress(x, y); pDest[0] = pSour[0]; pDest[1] = pSour[1]; pDest[2] = pSour[2]; pDest[3] = 0xFF; } } } RECT rcDest = { 0, 0, fr.GetWidth(), fr.GetWidth() }; if (!temp.IsNull()) { temp.Draw(bk.GetDC(), rcDest); } else { fr.Draw(bk.GetDC(), rcDest); } bk.Save(L"d:/dest.png", ImageFormatPNG);
阅读全文
0 0
- 利用CImage合并两张图片后保存
- 合并两张图片
- OpenCV 合并两张图片
- ios合并两张图片(叠加两张图片 重合两张图片)
- 合并两张图片(水印效果)
- C# 合并两张图片的方法
- android 两张图片合并作背景图
- android-合并两张图片bitmap
- OpenCV两张图片的合并
- java实现把两张图片合并
- android-合并两张图片bitmap
- [转]OpenCV两张图片的合并
- PHP合并两张图片的实现
- java实现把两张图片合并
- android中将两张图片合并为一张图片
- android中将两张图片合并为一张图片 .
- android中将两张图片合并为一张图片
- 合并两张图片,支持不透明度和透明色
- Netty之堆外内存
- 牛客 题库 3
- 约瑟夫环递归写法
- 算法总结二
- php数组使用技巧及操作总结
- 利用CImage合并两张图片后保存
- 图像分割
- Unity编辑器-Scene面板里的万向锁现象
- java 锁全面解析(二)
- B
- 12个非常不错的免费HTML后台管理模板
- springboot学习笔记5(JPA 实现分页、排序、返回map集合)
- [DFS]NYOJ 927 The partial sum problem
- hihocoder 1567 偶树的切分(树的深搜)