CISBitmap派生的VC++位图透明类实例
本文所述为一个由CISBitmap派生的VC++位图透明类,可以方便实现BMP图像的透明处理,主要包含两个文件,使用时主需要将其引入到你的C++工程中即可,具体的类代码如下:
CISBitmap.cpp文件代码如下:
#include<stdafx.h> #include"CISBitmap.h" #ifdef_DEBUG #undefTHIS_FILE staticcharTHIS_FILE[]=__FILE__; #definenewDEBUG_NEW #endif CCISBitmap::CCISBitmap() { m_crBlack=0; m_crWhite=RGB(255,255,255); } CCISBitmap::~CCISBitmap() { } intCCISBitmap::Width() { BITMAPbm; GetBitmap(&bm); returnbm.bmWidth; } intCCISBitmap::Height() { BITMAPbm; GetBitmap(&bm); returnbm.bmHeight; } voidCCISBitmap::DrawTransparent(CDC*pDC,intx,inty,COLORREFcrColour) { COLORREFcrOldBack=pDC->SetBkColor(m_crWhite); COLORREFcrOldText=pDC->SetTextColor(m_crBlack); CDCdcImage,dcTrans; dcImage.CreateCompatibleDC(pDC); dcTrans.CreateCompatibleDC(pDC); CBitmap*pOldBitmapImage=dcImage.SelectObject(this); CBitmapbitmapTrans; intnWidth=Width(); intnHeight=Height(); bitmapTrans.CreateBitmap(nWidth,nHeight,1,1,NULL); CBitmap*pOldBitmapTrans=dcTrans.SelectObject(&bitmapTrans); dcImage.SetBkColor(crColour); dcTrans.BitBlt(0,0,nWidth,nHeight,&dcImage,0,0,SRCCOPY); pDC->BitBlt(x,y,nWidth,nHeight,&dcImage,0,0,SRCINVERT); pDC->BitBlt(x,y,nWidth,nHeight,&dcTrans,0,0,SRCAND); pDC->BitBlt(x,y,nWidth,nHeight,&dcImage,0,0,SRCINVERT); dcImage.SelectObject(pOldBitmapImage); dcTrans.SelectObject(pOldBitmapTrans); pDC->SetBkColor(crOldBack); pDC->SetTextColor(crOldText); }
CISBitmap.h文件代码如下:
//请保存为文件名:CISBitmap.h #if!defined(AFX_CISBITMAP_H__08BA6EB3_DB4C_11D1_8A89_0040052E2D91__INCLUDED_) #defineAFX_CISBITMAP_H__08BA6EB3_DB4C_11D1_8A89_0040052E2D91__INCLUDED_ #if_MSC_VER>=1000 #pragmaonce #endif//_MSC_VER>=1000 classCCISBitmap:publicCBitmap { public: CCISBitmap(); virtual~CCISBitmap(); intHeight(); intWidth(); virtualvoidDrawTransparent(CDC*pDC,intx,inty,COLORREFcrColour); private: COLORREFm_crBlack; COLORREFm_crWhite; }; #endif//!defined(AFX_CISBITMAP_H__08BA6EB3_DB4C_11D1_8A89_0040052E2D91__INCLUDED_)
感兴趣的朋友可以将本文所述代码放到自己的VC++工程文件中测试一下运行效果,相信会对大家的VC++项目开发起到一定的帮助作用。