zoukankan      html  css  js  c++  java
  • 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为要替换成的颜色,设置为自定义颜色值即可。


    记录,为更好的自己!

  • 相关阅读:
    【SQL】DBCC(zz)
    Temporary Tables and Table Variables
    SQL特殊字符处理zz
    更改 Office 解决方案的安装路径
    SQL优化
    zzSQL Server性能优化
    SQL Server2005 表分区三步曲(zz)
    zz精妙SQL
    Deal with an annoying Message in Excel
    SQL技巧总结
  • 原文地址:https://www.cnblogs.com/ym123/p/4180610.html
Copyright © 2011-2022 走看看