`
sogotobj
  • 浏览: 647751 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

GDI+的ImageAttributes.SetGamma方法参数的疑惑

阅读更多

前天有个朋友发邮件向我咨询,怎样使用GDI+的ImageAttributes.SetGamma方法。他说他在使用GDI+ SetGamma方法时,发现所给参数值越大,图像越暗,反之则越亮,似乎与自己理解的不一样。我测试了一下,确实如此。我查了一下.NET2.0类库文档,关于该方法参数的说明是:

gamma 参数的典型值在 1.0 到 2.2 之间;但在某些情况下,0.1 到 5.0 范围内的值也很有用。

ImageAttributes 对象维护五种调整类别的颜色和灰度设置:默认、位图、画笔、钢笔和文本。例如,可以为默认类别指定一个伽玛值,为位图类别指定另一个伽玛值,再为钢笔类别指定另一个伽玛值。

默认的颜色调整设置和灰度调整设置适用于本身没有调整设置的所有类别。例如,如果从来没有为钢笔类别指定任何调整设置,则默认设置适用于钢笔类别。

一旦为某一类别指定了颜色调整或灰度调整设置,默认调整设置就不再适用于该类别了。例如,假定您为默认类别指定了一个调整设置集合。如果通过将 Pen 传递给 SetGamma 方法来为钢笔类别设置伽玛值,则任何默认调整设置都将不会应用于钢笔。

正常范围以外的伽玛值可用于旧式 CRT 监视器,或者用于处于非一般照明条件(例如工业环境或橱窗陈设)下的监视器。

而且还有个例子,摘录在下面:

按说,按照例子代码设置伽玛校正值2.2后图像显示的结果应该是比没有使用伽玛校正前要亮一些才对,可现在结果相反!是我们理解有错,还是GDI+的BUG???

带着疑惑,网上搜索了一下,果然,在MSDN论坛上发现有同样的疑问:http://social.msdn.microsoft.com/Forums/zh-HK/csharpgeneral/thread/efc76edd-adf1-4acb-aa34-fe5fdd01b183,但版主的解答却说这样的效果是正确的。

自己写了一个设置伽玛校正的函数,与GDI+的ImageAttributes.SetGamma方法一比较,也是刚好相反。但如果把GDI+的SetGamma方法参数用倒数的形式给出,倒是与我自己写的函数效果是一样的(也可以说,把我写的函数中的exponent := 1 / Gamma语句 改为exponent := Gamma,与GDI+的SetGamma方法效果一样):

于是我得出一个结论:如果GDI+的SetGamma方法是正确的,就是我们大家理解有误;反之,应该是GDI+的SetGamma方法把参数搞颠倒了!当然,只要给出倒数形式的实参,不影响该方法的使用,只是使用者心里应该明白就是。

分享到:
评论

相关推荐

    常用的GDI+的.lib和头文件

    此外,GDI+还提供了丰富的滤镜效果,如模糊、锐化、灰度转换等,可以通过`ImageAttributes`和`Graphics::DrawImage`的组合实现。 颜色管理也是GDI+的一大亮点,它支持RGB、CMYK、HSL、HSB等多种颜色模型,以及色彩...

    Visual Basic.NET GDI+技术教程Visual Basic.NET GDI+技术教程

    《Visual Basic.NET GDI+技术教程》是一本深入讲解如何在VB.NET环境下利用GDI+进行图形绘制和图像处理的专业教程。GDI+是Microsoft .NET Framework中的一个重要组成部分,为开发者提供了丰富的图形处理功能,包括二...

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

    8.4 图像属性和ImageAttributes类 8.5 编码器参数与图像格式 总结 第9章 高级二维图形 9.1 线帽和线条样式 9.2 理解并使用图形路径 9.3 图形容器 9.4 读取图像的元数据 9.5 混合 9.6 Alpha混合 9.7 其他...

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

    通过使用Graphics类的DrawImage方法的ImageAttributes参数,可以应用这些效果。 8. **坐标系统和单位**:GDI+使用笛卡尔坐标系统,并支持多种单位(像素、英寸、毫米等)。 在"使用GDI+进行图像处理"这个主题中,...

    GDI+ LIB ,GDI+ LIB

    除了基本的绘图功能,GDI+还提供了一些高级特性,如路径绘图(Path类)、位图操作(Bitmap类)和图像滤镜(ImageAttributes类)。路径绘图允许开发者创建复杂的几何形状,而位图操作则支持裁剪、缩放、旋转和翻转等...

    超全面的.NET GDI+图形图像编程教程_C#_.net_gdi+_GDI编程_gdi_源码

    2. 图像效果:GDI+支持模糊、锐化、灰度转换等图像效果,通过Graphics类的DrawImage方法和ImageAttributes类的SetColorMatrix方法实现。 五、路径和几何形状 1. 路径绘图:Path类用于创建复杂的路径,可以组合直线...

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

    在本文中,我们将深入探讨如何使用GDI+在VC++环境中实现图片的透明度变化,即淡入淡出效果。GDI+是Windows图形设备接口的一个扩展,它提供了丰富的绘图功能,包括处理图片的透明度。我们将主要关注`AlphaBlend`函数...

    GDI+开发包,GDI的升级版。

    GDI+还提供了ImageAttributes类,可以用来设置图像的透明度或应用色彩调整效果。 GDI+的另一个重要特性是颜色管理。它支持RGB、CMYK、HSL和HSB等多种颜色模型,以及色彩空间转换。Color类提供了创建和管理颜色的...

    GDI+程序设计(源代码)

    还可以进行图像的裁剪、缩放、旋转等操作,这些都是通过设置ImageAttributes和DrawImage方法的参数来完成的。 GDI+还支持图形路径,通过GraphicsPath类可以创建复杂形状,如贝塞尔曲线、多边形等。这在绘制自定义...

    GDI.rar_gdi+取屏幕反色_vb gdi+

    在VB中利用GDI+,开发者可以访问到一系列的图形绘制对象,如Pen、Brush、Font、Image等,以及各种绘图方法,如DrawLine、FillRectangle、DrawString等。 屏幕反色是一种常见的图像处理技术,它通过反转每个像素的...

    C#GDI+图形程序设计源码

    8.4 图像属性和ImageAttributes类 8.5 编码器参数与图像格式 总结 第9章 高级二维图形 9.1 线帽和线条样式 9.2 理解并使用图形路径 9.3 图形容器 9.4 读取图像的元数据 9.5 混合 9.6 Alpha混合 9.7 其他...

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

    使用`ClipRegion`和`DrawImage`方法的`srcRect`参数可以裁剪图像。而多个图像的组合则可以通过`DrawImageUnscaledAndClipped`或自定义的绘图逻辑实现。 7. **滤波和效果**: 虽然GDI+本身不提供复杂的滤波器,但...

    C#调用GDI+ Effect特效

    `Bitmap`用于存储和操作图像,`Graphics`用于绘制和处理图像,`ImageAttributes`则提供了应用各种效果的方法,如设置颜色矩阵、渐变混合等。 例如,要实现高斯模糊,可以创建`Graphics`对象,然后使用`SetClip`方法...

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

    反色操作在图像处理中是一项基础功能,GDI+通过调用`ColorMatrix`和`ImageAttributes`类的相关方法可以实现。通过设置特定的色彩矩阵,我们可以反转图像中的颜色,达到黑白、负片的效果。 此外,GDI+的文本渲染能力...

    精通GDI+_gdi+_physicalz3i_

    《精通GDI+》是一本深入探讨GDI+编程技术的专业书籍,旨在帮助读者全面掌握这一Windows图形设备接口的增强版。GDI+是Microsoft Windows操作系统中的一个图形库,它提供了丰富的图形绘制、图像处理和文本渲染功能,是...

    C#中基于GDI+(Graphics)图像处理工具(缩略图、压缩优化、任意角度旋转、透明水印)

    `Image`类的`Save`方法可以接受一个`EncoderParameters`对象,该对象包含对编码器参数的控制,比如调整JPEG的压缩质量。通过降低质量设置,可以减小文件大小,但可能会牺牲一些图像质量。合理调整这个平衡是压缩优化...

    vc++2010GDI+

    1. GDI+的基础类和方法,如`Graphics`, `Bitmap`, `Image`, `ColorMatrix`, `ImageAttributes`等。 2. 如何使用`Bitmap`类读取和保存图像。 3. 通过`ColorMatrix`调整图像的透明度、对比度和亮度。 4. `...

    《C# GDI+图形程序设计》随书源码完整版

    `Graphics`类提供了绘制图像的方法,而`ImageAttributes`类则用于应用色彩调整和滤镜效果。 在学习这本书的过程中,通过实际运行随书源码,读者将能深入了解GDI+的各种功能。这些代码示例涵盖了基本的图形绘制、...

    GDI+学习的2个经典例子

    GDI+(Graphics Device Interface Plus)是Windows操作系统中用于图形处理的一个强大库,它是GDI(Graphics Device Interface)的升级版,提供了更多的功能和更好的性能。GDI+不仅支持基本的绘图操作,如线条、曲线...

    c#GDI+例子源码

    C# GDI+是.NET Framework中的图形设备接口,它提供了丰富的绘图能力,允许程序员创建、编辑和渲染2D图形、图像以及文本。这个压缩包包含的源码例子旨在帮助开发者深入理解并熟练掌握C# GDI+的使用。下面我们将详细...

Global site tag (gtag.js) - Google Analytics