锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / 保存透明PNG
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究


保存透明PNG

项目背景

cbitmap保存文件为透明背景格式为.png的图片。 

解决思路

可以先保存文件为带白色背景的的.png的图片,然后利用TransparentPNG()函数,把png图片没像素的RGB值进行处理的方法,来消除白色背景色。

在Onpaint消息相应函数中载入图片并且显示出来,load载入,否则不会显示,在调用上面的透明化处理函数TransparentPNG()来进行图像的处理。图像处理函数是采用遍历像素的处理方法来完成的。

部分代码:

void TransparentPNG(CImage *png) 

for(int i = 0; i <png->GetWidth(); i++)  //遍历像素处理

for(int j = 0; j <png->GetHeight(); j++) 

unsigned char* pucColor = reinterpret_cast<unsigned char*>(png->GetPixelAddress(i , j)); 

pucColor[0] = pucColor[0] *pucColor[3] / 255; 

pucColor[1] = pucColor[1] *pucColor[3] / 255; 

pucColor[2] = pucColor[2] *pucColor[3] / 255; 

}

设置透明背景图片:

使用API函数TransparentBlt,这个函数可以把原DC中的图片绘制到目标DC中,并且同时设置原图形在目标图形上的透明色。例如把透明色设置为彩色图形自带背景色时,使用这个函数后得到最终图形上彩色图形的自身背景色就消除了。部分代码:

CDC* pDC=GetDC();

CBitmap bmp;

bmp.LoadBitmap(IDB_BITMAP1);

BITMAP bmpInfo;

bmp.GetObject(sizeof(BITMAP),&bmpInfo);

CDC ImageDC;

ImageDC.CreateCompatibleDC(pDC);

CBitmap *pOldImageBmp=ImageDC.SelectObject(&bmp);

CBitmap bmpBK;

bmpBK.LoadBitmap(IDB_BITMAP2);

BITMAP bmpBkInfo;

bmpBK.GetObject(sizeof(BITMAP),&bmpBkInfo);

CDC bkDC;

bkDC.CreateCompatibleDC(pDC);

bkDC.SelectObject(&bmpBK);

TransparentBlt(bkDC.m_hDC,100,150,bmpInfo.bmWidth,bmpInfo.bmHeight,ImageDC.m_hDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,RGB(255,0,0)); // 设置红色为透明色

BitBlt(pDC->m_hDC,0,0,bmpBkInfo.bmWidth,bmpBkInfo.bmHeight,bkDC.m_hDC,0,0,SRCCOPY);

//画到屏幕上

上述解决问题的思路是通过设置掩码位图,建立一个掩码位图;用掩码位图覆盖在色彩原图,得到了一个新的图;使用掩码位图和目标背景图相与;使用得到的新图与目标背景图相或可以得到最终的图。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内