程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> VC++使用CImage PNG轉BMP圖片透明背景處理,

VC++使用CImage PNG轉BMP圖片透明背景處理,

編輯:C++入門知識

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為要替換成的顏色,設置為自定義顏色值即可。


 

記錄,為更好的自己!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved