利用CImage合并两张图片后保存

本文记录了在使用CImage类合并两张图片时遇到的问题,即合并后PNG的Alpha通道丢失。通过研究发现,问题出在CImage的Attach与Detach接口,以及图片的位深不同。通过使用GetDC接口和调整位深,成功解决了图片透明度丢失的问题。
摘要由CSDN通过智能技术生成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值