`
gaofen100
  • 浏览: 1227904 次
文章分类
社区版块
存档分类
最新评论

GDI+图像处理学习笔记——改变图像的透明度

 
阅读更多

GDI+是WindowsXp和windows Server 2003中的一个子系统,主要用于处理系统的绘制消息。GDI+是GDI的扩展,其继承了GDI的有点并在其基础上进行了改进,包括增加了一些GDI无法绘制的图形函数,同时GDI+重新设计了编程模型,使开发图形程序更加方便。作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。

在GDI+中,颜色的表示除了红绿蓝三种分量外,增加了一种叫做Alpha的变量,其作用是用来表示颜色的透明度,取值范围为0-255.本例中实现的图像透明度的改变主要就是改变图像中每一种颜色的Alpha的值来达到改变透明度的效果。

本例中在VS2010中开发,具体效果如下

打开图片文件,默认透明度为0,相应的alpha值为1,单击色彩处理菜单项,打开图像透明度对话框,改变滑动块的值后,图片透明度相应改变

下面详细介绍具体实现过程:

  1. vs2010中GDI+的配置
根据本人实测,在VS2010中只需在资源文件stdafx.h中包含进Gdiplus.h头文件中就可以了,并不需要在项目属性中添加GDI+库文件,左飞编写的《数字图像处理-原理与实践》中说的在VS2005下好像要在项目属性->配置属性->链接器->输入->附加依赖项中添加gdiplus.lib。本人机器上没有VS2005,所以也不敢妄下结论。不过在VS2010下只需在stdafx.h中添加如下代码即可
2.改变图像透明度的原理
之前说过,在GDI+中增加了一个alpha的变量用于表示图像的透明度,可是由于在GDI+中不能直接改变图像中的alpha的值(本人也是初学GDI+没多久,这句对与否暂时不好说),因此我们要用到一个叫做ColorMatrix的结构体,他是一个5*5的数组,我们用其表示颜色的变换关系。下面是GDI+中ColorMatrix的定义
其中REAL类型我在微软的MSDN中并没有查到具体定义,《数字图像处理-原理与实践》一书中,说其表示的一个单精度的浮点类型。
下面说一下上面提到的ColorMatrix,下面是GDI+下的一个颜色变换公式

1 0 0 0 0

0 1 0 0 0

[R G B A 1]=[r g b a 1] 0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

解释下,R/G/B/A表示颜色变换后的红、绿、蓝和透明度的分量,r/g/b/a表示颜色变换前图像的红、绿、蓝和透明度的分量,后面是一个5*5的矩阵,这个矩阵就是ColorMatrix结构体的5*5数组。根据矩阵的乘法,我们要改变图像的透明度,只需定义一个ColorMatrix结构体,将第四行第四列的数改成相应的透明度即可。

3.图像透明度对话框实现

对话框很简单,添加两个控件一个是编辑框,给其绑定变量m_alpha,类型为REAL,另一个是滑动块控件,然后在主对话框类重载消息WM_HSCROLL,重载后会在该对话框类自动生成一个OnHScroll的消息响应函数,我们主要的操作就是在这个函数类实现,下面是该函数类的代码

4.Doc文档类中的相关操作
添加变量image,用以保存打开的图像文件,另重载文档类中的OnOpenDocument函数
在OnOpenDocument函数中将打开的图像文件存入Image变量中

5.View视图类中的相关操作

首先要添加两个变量,1个时alpha的值,另一个是指向图像透明度对话框的指针;

然后在资源文件中给菜单栏添加图像处理这个菜单项,并为其绑定时间处理程序,在时间处理程序中用非模态方式显示图像透明度对话框

最后在OnDraw函数中实现绘图操作

这里面用了两种绘图方式,一种是直接向当前设备上下文输出图像,代码中注释部分。另一种是先创建与设备相兼容的内存环境,将图片先绘制在此内存环境中再拷贝到屏幕,之所以采用此种方法是因为这样可以去除视图在不断刷新过程中带来的屏幕闪烁,可是本人实际的运行效果,在不断移动滑块的时候,视图刷新依然有很明显的闪烁,本人也添加了视图类中的WM_ERASEBKGN消息,如下,但是依然不能解决其闪烁问题。


分享到:
评论

相关推荐

    使用gdi+进行图像处理.rar_GDI+ 图像_c gdi_gdi_gdi 图像处理_gdi+

    在"使用GDI+进行图像处理"这个主题中,你可能学习到如何创建Graphics对象,加载和绘制图像,使用不同的画刷和画笔进行绘图,以及进行基本的图像处理操作。"www.pudn.com.txt"可能是介绍资源来源或代码示例的文本文件...

    GDI+图像程序设计(PDF & 源码 -电子工业出版社)

    1.3 从GDI的角度学习GDI+ 1.4 .NET中的GDI+ 名称空间和类 总结 第2章 第一个GDI+ 应用程序 2.1 绘制表面 2.2 坐标系统 2.3 指南——第一个GDI+ 应用程序 2.4 一些基本的GDI+ 对象 总结 第3章 Graphics类 ...

    GDI+图形程序设计.zip

    6. **颜色管理(Color)**:GDI+支持RGB、CMYK、HSL和HSB等颜色模型,以及透明度(Alpha通道)控制。 7. **坐标系统和变换(Transformations)**:可以设置和应用坐标变换,如缩放、旋转、平移和斜切。 随书源码...

    c#GDI+图像效果

    在这个主题中,我们将深入探讨C#中的GDI+图像处理技术及其各种效果。 首先,GDI+提供了基本的图像操作,如加载、保存、绘制和裁剪图像。你可以使用`System.Drawing.Image`类来加载和保存图像文件,支持的格式包括...

    GDI+开发包 GDI+ SDK

    GDI+(Graphics Device Interface Plus)是微软推出的一种图形设备接口的增强版本,它为Windows应用程序提供了丰富的2D图形、图像处理和文本渲染能力。GDI+开发包,即GDI+ SDK,是用于帮助开发者利用GDI+功能进行...

    GDI+在数字图像处理中的具体的应用实例

    GDI+(Graphics Device Interface Plus)是Windows操作系统中用于图形绘制和图像处理的一个强大的API,它是GDI(Graphics Device ...通过学习和实践这些实例,开发者可以更好地理解和掌握GDI+在图像处理中的强大功能。

    GDI+教程(C++中文版).pdf

    GDI+是微软公司提供的一套图像处理和图形输出的编程接口,它是基于类的应用程序编程接口(API),专门针对C/C++开发者使用。GDI+的全称为Graphical Device Interface Plus,是在GDI基础上的增强版,用于管理Windows...

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

    GDI+还支持其他高级特性,如重新着色、色彩修正、消除走样和元数据,这些都极大地提高了图像处理的质量和灵活性。在开发基于对话框或单文档/多文档的应用程序时,开发者可以利用GDI+的这些特性来构建交互式和视觉上...

    ( Delphi 7 )使用GDI+进行图形缩放、拖动,多种图片格式支持,仅简单示例

    使用GDI+进行图形缩放、拖动,多种图片格式支持,仅简单示例。 问题源贴:http://bbs.csdn.net/topics/390638094

    GDI+程序设计 GDI+程序设计 GDI+程序设计 GDI+程序设计

    通过阅读《GDI+程序设计》这本书,你将深入理解GDI+的各个方面,从基本绘图到高级图像处理,从简单的形状绘制到复杂的图形算法,逐步成为一名熟练的GDI+开发者。书中可能涵盖了示例代码、实例解析、最佳实践等内容,...

    VB 经典GDI+模块

    7. **图像处理**:除了基本的显示外,GDI+还支持图像的基本处理,如裁剪、合并、滤镜效果等,开发者可以利用这些功能实现图片编辑功能。 8. **内存绘图**:GDI+支持在内存中创建位图并进行绘图,然后再将其绘制到...

    GDI+程序设计(清华大学)

    第二部分结合具体的代码实例,深入讲解了GDI+编程的各个细节,如绘图表面、坐标系、钢笔和画刷、文本和字体、图像和图像操作、路径和区域、变换处理以及打印等;第三部分重点讲解了自定义控件的设计和开发,包括...

    GDI+基础入门学习笔记

    ### GDI+基础入门学习笔记:图形绘制与变换详解 #### 一、画刷类型与应用 GDI+(Graphics Device Interface Plus)是Microsoft推出的一种用于Windows平台的绘图技术,它提供了丰富的图形处理功能,使得开发人员...

    VB6 GDI+入门教程(最新版)

    3. **丰富的图形处理能力**:GDI+支持矢量图形、位图、路径绘制等多种图形类型,同时还提供高级特性,如渐变填充、透明度控制等。 #### 使用VB6 开发GDI+ 程序 对于希望在VB6中利用GDI+功能的开发者来说,虽然市面...

    GDI+SDK学习教程与数字图像处理运用

    GDI+(Graphics Device Interface Plus)是Windows操作系统中用于图形绘制和图像处理的一个强大的API,它为开发者提供了丰富的功能,可以实现复杂的2D图形、文本渲染以及图像操作。本教程聚焦于GDI+ SDK的学习,旨在...

    异常A generic error occurred in GDI+的解决办法

    GDI+是微软提供的一种图形绘制和图像处理的API,广泛应用于各种Windows应用程序中。 当遇到“异常A generic error occurred in GDI+”时,可能的原因有多种,下面将详细介绍这些原因以及相应的解决方法: 1. **...

    用GDI+实现图片透明度变化的效果

    GDI+是Windows图形设备接口的一个扩展,它提供了丰富的绘图功能,包括处理图片的透明度。我们将主要关注`AlphaBlend`函数的应用,这是一个关键的GDI+函数,用于实现半透明效果。 首先,我们需要理解`AlphaBlend`...

Global site tag (gtag.js) - Google Analytics