`
CodePearl
  • 浏览: 13203 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在MFC程序中使用CImage类绘制半透明图像

阅读更多

源代码:见附件TransparentTest.rar

 

在MFC程序中,可使用ATL库中的CImage类绘制透明图像。

 

但是如果直接调用CImage::Draw()函数,绘制效果不会很好,见下图。 

  

通过调试,可得知CImage在绘制透明图像时,底层会调用::AlphaBlend()函数,而::AlphaBlend()函数执行的融合操作为:Dst.RGB = Src.RGB + (1 - Src.Alpha) * Dst.RGB 。但是,正确的融合操作应该为:Dst.RGB = Src.Alpha * Src.RGB + (1 - Src.Alpha) * Dst.RGB ,所以,在绘制半透明图片之前,先修改半透明图片的每个像素的RGB值。修改代码如下(g_TransparentImg为半透明的CImage对象): 

if (g_TransparentImg.GetBPP()==32)
{
	BYTE* pBits=(BYTE*)g_TransparentImg.GetBits();
	if(g_TransparentImg.GetPitch()<0)	//指向图片缓存的最开始
		pBits+=(g_TransparentImg.GetHeight()-1)*g_TransparentImg.GetPitch();
	for (int iy=0;iy<g_TransparentImg.GetHeight();iy++)
	{
		for (int ix=0;ix<g_TransparentImg.GetWidth();ix++)
		{
			int index=iy*abs(g_TransparentImg.GetPitch())+ix*4;
			pBits[index]=pBits[index]*pBits[index+3]/255;		//B
			pBits[index+1]=pBits[index+1]*pBits[index+3]/255;	//G
			pBits[index+2]=pBits[index+2]*pBits[index+3]/255;	//R
		}
	}
}

 修改后的绘制效果如下:  

 

 

PS:MFC程序中的透明按钮、透明窗体等也可用CImage类实现。

 

 

  • 大小: 50.7 KB
  • 大小: 49.9 KB
分享到:
评论

相关推荐

    mfc的CImage类详细说明

    ### MFC的CImage类详解 #### 引言 在MFC框架中,`CImage`类的出现极大地丰富了图像处理的能力,...通过熟练掌握`CImage`的使用,开发者可以在MFC应用程序中轻松实现各种复杂的图像效果,提升应用的视觉体验和功能性。

    MFC 绘制半透明文字并保存为背景透明图片

    在本文中,我们将深入探讨如何使用Visual Studio 2010中的MFC(Microsoft Foundation Classes)框架来绘制半透明文字,并将其保存为具有背景透明效果的图像。MFC是C++编程环境中一个强大的库,它提供了许多用于创建...

    CImage类的使用

    【CImage类详解】 CImage类是Microsoft的...总的来说,CImage类为Visual C++开发者提供了强大的图像处理功能,简化了在MFC应用程序中处理和显示图像的过程,使得在Windows平台上开发图像处理相关的应用变得更加便捷。

    CImage类概述[参考].pdf

    3. **TransparentBlt**:能够在目标区域中创建透明图像,通过`SetTransparentColor`方法设定特定颜色为透明色。这使得背景可以透过图像显示出来,实现图像的透明效果。 4. **MaskBlt**:将源位图与屏蔽位图结合在...

    CImage 类的成员中英文介绍

    CImage 类是Microsoft Foundation Class (MFC) 库中的一部分,它是用来处理GDI+图形的一个强大工具。GDI+ 是Windows图形设备接口的一个扩展,提供了更多高级的绘图功能,如矢量图形、透明度处理等。CImage 类封装了...

    VC.netCImage.rar_cimage_vc.net

    在提供的压缩包文件中,可能包含了一个示例项目,演示了如何在VC++.NET中使用`CImage`类实现打开和保存图像。`www.pudn.com.txt`可能是一个文本文件,包含关于下载或来源的说明,而`VC.net类CImage例子--打开,保存`...

    CImage类的简单说明[文].pdf

    CImage类是MFC库提供的一种用于处理图像的类,主要应用于软件开发中进行图形界面的设计和图像操作。本文将详细介绍CImage类的各个成员函数和相关知识点。 1. 连接与创建: - `Attach`:此函数用于将一个DIB(设备...

    基于MFC 仿QQ截屏

    在绘制选择区域时,可以通过混合源和目标颜色来实现半透明效果,这通常涉及到GDI+或者Direct2D的使用。 "选择区域可自由放缩和移动"涉及窗口消息处理和图形绘制。我们需要监听WM_LBUTTONDOWN、WM_LBUTTONUP、WM_...

    GDI+编程入门及简单例子

    1. 引入头文件:在程序的stdafx.h中添加#include `&lt;atlimage.h&gt;`,引入CImage类。 2. 创建对象:定义一个CImage类的对象,然后调用CImage::Load方法加载外部图像文件。 3. 绘制图像:使用CImage::Draw方法绘制图像。...

    VC++图像编程常用

    3. **TransparentBlt**:在目标区域中创建透明图像,通过SetTransparentColor方法设置特定颜色为透明,实现背景融合。 4. **MaskBlt**:结合源位图和屏蔽位图,产生合成效果,常用于实现复杂图像的混合和遮罩操作。 ...

    VC实例图形和图像

    通过这样的实例,开发者不仅可以学习到MFC的基本绘图技巧,还能掌握如何在C++环境中使用GDI+进行图形和图像的高级处理,提升应用程序的视觉效果和用户体验。同时,这些技能也适用于其他Windows应用程序的开发,如...

    TransparentImage

    在本教程中,我们将探讨如何利用`CImage`类来实现半透明图像的绘制,这对于创建现代图形用户界面或游戏中的特效至关重要。 半透明图像,也称为alpha通道图像,其特点在于像素具有透明度信息,允许背景透过图像的...

    对话框加载各种格式的图片,并设为透明背景

    在对话框中显示PNG图像,我们通常会使用CStatic控件,这是MFC中用于显示静态文本或图像的基本控件。 1. **添加控件到对话框资源**:打开对话框资源编辑器,拖放一个CStatic控件到对话框上,然后为其分配一个ID,...

    VC++利用png图片做底图的漂亮窗口

    PNG(Portable Network Graphics)是一种无损压缩的位图格式,支持透明度(Alpha通道),可以创建半透明或全透明的图像,这使得它在GUI设计中非常受欢迎。相比其他如BMP、JPEG等格式,PNG在保持图像质量的同时,文件...

    GDI+的说明 GDI+的说明 GDI+的说明 GDI+的说明

    - **CImage类**:CImage是MFC对GDI+的封装,提供了一种方便的方式来创建、加载、保存和处理图像。 - **Graphics类**:作为GDI+的核心类,Graphics负责实际的绘图操作,包括绘制线条、曲线、填充区域等。 - **其他...

    有关C++编程方面的位图知识

    - MFC还提供CImage类,简化了位图的操作,支持多种图像格式。 7. **实例应用**: - 图像滤镜:如模糊、锐化、色彩平衡等可以通过操作位图像素实现。 - 游戏开发:角色动画、场景渲染等大量使用位图。 - 用户...

    VC++图像处理技巧

    - **显示位图:** 在MFC中,可以使用`CClientDC`或`CPaintDC`对象将位图绘制到窗口上,通过`CClientDC::BitBlt()`或`CPaintDC::DrawBitmap()`函数实现。 #### 二、图像的几何变换 图像的几何变换主要包括缩放、旋转...

Global site tag (gtag.js) - Google Analytics