首页 > 代码库 > VC++使用CImage PNG转BMP图片透明背景处理
VC++使用CImage PNG转BMP图片透明背景处理
PNG格式的图片是支持透明通道的,BMP格式的图片是没有透明通道的,所以当PNG格式的图片转换为BMP格式时,对于PNG图片的透明背景就需要进行特别的处理。
VC++中的HBITMAP是支持透明色的,如果HBITMAP是PNG格式图片的句柄,使用CImage:Save或其它方式保存到文件时,透明背景会变成黑色。
解决这个问题可以用GDI+、LIBPNG等,最简单的方式是使用CImage,直接将图像数据中的透明部分替换为白色或其他颜色。
优点:处理方法简单,效率高,只需CImage;
缺点:在图片拐角处产生略微锯齿;
贴出我写的函数,大家可以结合自己的需要决定是否使用:
HBITMAP TransparentImage(HBITMAP hBitmap){ CImage Image; Image.Attach(hBitmap); int nPitch = Image.GetPitch( ) , nBPP = Image.GetBPP( ); LPBYTE lpBits = reinterpret_cast< LPBYTE>( Image.GetBits( ) ); for( int yPos = 0 ; yPos < Image.GetHeight( ) ; yPos ++ ) { LPBYTE lpBytes = lpBits + ( yPos * nPitch ); PDWORD lpLines = reinterpret_cast< PDWORD >( lpBytes ); for( int xPos = 0 ; xPos < Image.GetWidth( ) ; xPos ++ ) { if( nBPP == 32 && lpLines[ xPos ] >> 24 != 0x000000FF) { lpLines[ xPos ] |= 0xFFFFFFFF ; } } } return Image.Detach();}
lpLines[ xPos ] |= 0xFFFFFFFF为要替换成的颜色,设置为自定义颜色值即可。
记录,为更好的自己!
VC++使用CImage PNG转BMP图片透明背景处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。