CISBitmap派生的VC++位图透明类实例

 更新时间:2014年08月11日 15:00:20   投稿:shichen2014  
这篇文章主要介绍了CISBitmap派生的VC++位图透明类,比较实用的功能,需要的朋友可以参考下

本文所述为一个由CISBitmap派生的VC++位图透明类,可以方便实现BMP图像的透明处理,主要包含两个文件,使用时主需要将其引入到你的C++工程中即可,具体的类代码如下:

CISBitmap.cpp文件代码如下:

#include <stdafx.h>
#include "CISBitmap.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CCISBitmap::CCISBitmap()
{
 m_crBlack = 0;
 m_crWhite = RGB(255,255,255);
}
CCISBitmap::~CCISBitmap()
{
}
int CCISBitmap::Width()
{
 BITMAP bm;
 GetBitmap(&bm);
 return bm.bmWidth;
}
int CCISBitmap::Height()
{
 BITMAP bm;
 GetBitmap(&bm);
 return bm.bmHeight;
}
void CCISBitmap::DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour)
{
 COLORREF crOldBack = pDC->SetBkColor(m_crWhite);
 COLORREF crOldText = pDC->SetTextColor(m_crBlack);
 CDC dcImage, dcTrans;
 dcImage.CreateCompatibleDC(pDC);
 dcTrans.CreateCompatibleDC(pDC);
 CBitmap* pOldBitmapImage = dcImage.SelectObject(this);
 CBitmap bitmapTrans;
 int nWidth = Width();
 int nHeight = 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_)
#define AFX_CISBITMAP_H__08BA6EB3_DB4C_11D1_8A89_0040052E2D91__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CCISBitmap : public CBitmap 
{
public:
 CCISBitmap();
 virtual ~CCISBitmap();
 int Height();
 int Width(); 
 virtual void DrawTransparent(CDC* pDC, int x, int y, COLORREF crColour); 
private:
 COLORREF m_crBlack;
 COLORREF m_crWhite;
};
#endif // !defined(AFX_CISBITMAP_H__08BA6EB3_DB4C_11D1_8A89_0040052E2D91__INCLUDED_)

感兴趣的朋友可以将本文所述代码放到自己的VC++工程文件中测试一下运行效果,相信会对大家的VC++项目开发起到一定的帮助作用。

相关文章

  • C# 使用反射来实现对象的深度复制方法

    C# 使用反射来实现对象的深度复制方法

    下面小编就为大家带来一篇C# 使用反射来实现对象的深度复制方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C++实现浮点数精确加法

    C++实现浮点数精确加法

    这篇文章主要为大家详细介绍了C++实现浮点数精确加法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C++ 约瑟夫环的实例代码

    C++ 约瑟夫环的实例代码

    这篇文章主要介绍了C++ 约瑟夫环的实例代码的相关资料,希望通过本文能帮助到大家,实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • C++如何判断一个数字是否为质数

    C++如何判断一个数字是否为质数

    这篇文章主要为大家详细介绍了C++如何判断一个数字是否为质数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • c++ 巧开平方的实现代码

    c++ 巧开平方的实现代码

    如果没有计算器,我们如何求2的平方根
    2013-05-05
  • 使用C语言实现三子棋游戏

    使用C语言实现三子棋游戏

    这篇文章主要为大家详细介绍了使用C语言实现三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 关于函数调用方式__stdcall和__cdecl详解

    关于函数调用方式__stdcall和__cdecl详解

    下面小编就为大家带来一篇关于函数调用方式__stdcall和__cdecl详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 《C++ primer plus》读书笔记(一)

    《C++ primer plus》读书笔记(一)

    本读书笔记是C++ primer plus(第六版)前3章的学习笔记。非常的浅显易懂,复习C++基础知识的可以瞄瞄。
    2014-10-10
  • C语言的字符空间与非字符空间你了解吗

    C语言的字符空间与非字符空间你了解吗

    这篇文章主要介绍了C语言的字符空间与非字符空间,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下,希望能给你带来帮助
    2021-08-08
  • C语言自定义实现strlen函数的3种方法总结

    C语言自定义实现strlen函数的3种方法总结

    这篇文章带大家了解C语言中自定义实现strlen函数的3种方法,计数器,递归以及指针,这三种方法通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论