今天同事那边遇到了一个问题,希望将一个不透明的图片,贴在一透明的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];