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++项目开发起到一定的帮助作用。