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

GDI+ 在Delphi程序的应用 -- ColorMatrix与图像亮度

阅读更多

 年初,我写了一篇关于GDI+亮度调整的文章,见《GDI+ 在Delphi程序的应用 -- 调整图像亮度》,采用的是扫描线逐点改变,当时有网友评论时提出是否可以ColorMatrix进行调整,我觉得图像像素值上下限不好控制,加之没时间没去研究,今天,我却发现该网友提出的方案居然是切实可行的。改变图像亮度,实际就是对像素点的各颜色分量值作一个平移,使用ColorMatrix进行平移是个轻而易举的事!

  在《GDI+ 在Delphi程序的应用 -- 调整图像亮度》一文举例中对图片增加亮度20,用ColorMatrix矩阵来说,就是个颜色值平移20 / 256 = 0.078,也就是各颜色分量值加0.078,用ColorNatrix矩阵表示为:

1.0 0.0 0.0 0.0 0.0

0.0 1.0 0.0 0.0 0.0

0.0 0.0 1.0 0.0 0.0

0.0 0.0 0.0 1.0 0.0

0.078 0.078 0.0780.01.0

重写《GDI+ 在Delphi程序的应用 -- 调整图像亮度》中的例子:

unitmain;

interface

uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls;

type
TForm1
=class(TForm)
Button1:TButton;
Edit1:TEdit;
procedureButton1Click(Sender:TObject);
procedureEdit1Exit(Sender:TObject);
private
...{Privatedeclarations}
Value:Integer;
public
...{Publicdeclarations}
end;

var
Form1:TForm1;

implementation

usesGdiplus;

...{$R*.dfm}

procedureSetBrightness(Image:TGpImage;Value:Shortint);
var
Tmp:TGpImage;
attr:TGpImageAttributes;
g:TGpGraphics;
v:Single;
I:Integer;
ColorMatrix:TColorMatrix;
begin
Tmp:
=Image.Clone;
g:
=TGpGraphics.Create(Image);
attr:
=TGpImageAttributes.Create;
try
FillChar(ColorMatrix,
25*Sizeof(Single),0);
forI:=0to4do
ColorMatrix[I][I]:
=1.0;//初始化ColorMatrix为单位矩阵
v:=Value/256;            //亮度调整绝对值转换为相对值
forI:=0to2do
ColorMatrix[
4][I]:=v;         //设置ColorMatrix各颜色分量行的虚拟位 
attr.SetColorMatrix(ColorMatrix);
g.DrawImage(Tmp,GpRect(
0,0,Image.Width,Image.Height),
0,0,Tmp.Width,Tmp.Height,utPixel,attr);
finally
g.Free;
attr.Free;
Tmp.Free;
end;
end;

procedureTForm1.Edit1Exit(Sender:TObject);
begin
ifEdit1.Text=''then
Text:
='20';
Value:
=StrToInt(Edit1.Text);
end;

procedureTForm1.Button1Click(Sender:TObject);
var
Image:TGpImage;
g:TGpGraphics;
begin
Image:
=TGpImage.Create('..media€41001.jpg');
g:
=TGpGraphics.Create(Handle,False);
g.DrawImage(Image,
10,10);
SetBrightness(Image,Value);
g.DrawImage(Image,
200,10);
g.Free;
image.Free;
end;

end.

运行结果,左边为原图,右边为亮度加20后的图像:

分享到:
评论

相关推荐

    GDI+_for_VCL基础

    GDI+ for VCL基础是关于在Delphi和C++Builder中使用GDI+图形库进行图形绘制和图像处理的专题。GDI+是微软在Windows XP系统中引入的一个增强图形设备接口,它扩展了传统的GDI(Graphics Device Interface),提供了更...

    c++ GDI,C++Builder GDI,GDI,Png,Png to Image,支持多种图片格式,能够在多种图片间进行转换(bmp,jpg,wmf,emf,png,gif)

    GDI+ for VCL 是一个基于 GDI+ 的图形处理库,专门为 C++ Builder 和 Delphi 开发环境设计,提供了许多实用的图形处理函数和类库,帮助开发者快速开发图形相关的应用程序。 GDI+ for VCL 基础 -- 图像显示辅助类 ...

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

    在这个"vc中GDI+的关于数字图像处理的具体应用实例"中,我们将深入探讨如何利用GDI+在Visual C++(vc)环境中进行数字图像处理。 1. **GDI+的基本概念**: GDI+提供了丰富的图形对象,如画刷、画笔、字体、路径和...

    GDI+函数说明

    通过GDI+,开发者能够创建出具有专业级图形效果的应用程序,无论是简单的图表绘制,还是复杂的矢量图形编辑,GDI+都能提供必要的工具和支持。同时,由于GDI+是.NET Framework的一部分,它与C#、VB.NET等语言的集成...

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

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

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

    总的来说,GDI+是一个强大的图形和图像处理工具,它的出现极大地丰富了Windows应用程序的图形表现力。无论是简单的界面美化还是复杂的图像编辑功能,GDI+都能提供足够的支持,让开发者能够更加轻松地实现这些功能。...

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

    在VC++(Visual C++)开发环境中,使用GDI+可以使应用程序具有更现代、更美观的图形界面,特别是在图像处理方面,其功能强大且易于使用,相较于GDI中的Device Independent Bitmap (DIB) 处理方式,GDI+提供了一套...

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

    在C#编程中,GDI+(Graphics Device Interface Plus)是一个强大的图形处理库,它提供了丰富的功能用于创建、编辑和操作图像。本项目利用GDI+实现了一系列实用的图像处理功能,包括创建高质量的缩略图、进行图像压缩...

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

    通过结合`View.cpp`、`StatLink.cpp`、`MainFrm.cpp`、`Picture.cpp`、`BlendView.cpp`、`PictCtrl.cpp`、`Doc.cpp`、`StdAfx.cpp`等文件中的类和方法,我们可以构建一个完整的应用程序,展示这种动态透明度变化的...

    vc++2010GDI+

    在本文中,我们将深入探讨如何使用VC++ 2010和GDI+技术来处理图像,特别是关于图片的透明度、对比度和亮度的调整,以及如何将修改后的图像保存为PNG格式。GDI+(Graphics Device Interface Plus)是微软提供的一种...

    GDI+参考大全.pdf

    - **使用颜色矩阵对单色进行变换**:通过`ColorMatrix`类可以实现对图像的颜色调整。 - **转换图像颜色**:使用颜色矩阵可以改变图像的整体色调。 - **缩放颜色**:通过修改颜色矩阵来改变图像的颜色饱和度。 - **...

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

    在VB(Visual Basic)编程环境中,GDI+(Graphics Device Interface Plus)是一个强大的图形处理库,用于绘制图形、处理图像以及进行复杂的可视化操作。标题"GBI.rar_gdi+取屏幕反色_vb gdi+"指出,这个压缩包包含了...

    GdiplusTest01.rar_GDI+ MFC

    标题 "GdiplusTest01.rar_GDI+ MFC" 提示我们这是一个使用GDI+库在MFC(Microsoft ...通过阅读和分析源代码,开发者可以深入理解如何在C++中利用GDI+的图像处理功能,并了解MFC应用程序的架构和生命周期管理。

    c#GDI+例子源码

    - **颜色矩阵**:使用ColorMatrix类和ImageAttributes对象,可以对图像应用复杂的色彩效果。 6. **性能优化** - **缓存绘图结果**:使用Bitmap对象创建内存图,先在内存中完成复杂绘图,再一次性绘制到屏幕,提高...

    GDI+程序设计实例源代码

    通过分析和学习这些实例源代码,开发者不仅可以了解GDI+的基本用法,还能掌握如何在实际项目中高效地利用GDI+进行图形编程,提高应用程序的视觉体验。这些代码对于初学者来说是一份宝贵的资源,能帮助他们快速上手,...

    GDI+ 叠加显示及移动透明图片

    在Windows编程中,GDI+(Graphics Device Interface Plus)是一个强大的图形处理库,它扩展了传统...通过学习和实践GDI+的叠加显示和移动透明图片技术,开发者可以创造出丰富的图形用户界面,提升应用程序的用户体验。

    GDI+实现动态图像明暗效果

    在本文中,我们将深入探讨如何使用GDI+在Visual Studio 2008中实现动态图像的明暗效果,特别是创建一种类似拍照后选择图像的效果,使得选定区域保持原样,而其他区域变暗50%。GDI+是Windows API的一部分,它提供了...

    c# GDI+编程例子

    C# GDI+编程是Windows应用程序开发中的一个重要领域,它允许开发者通过代码创建和操作图形、图像以及文本。GDI+(Graphics Device Interface Plus)是.NET Framework中的一个强大的图形库,为C#程序员提供了丰富的...

    C#使用GDI+给图片加文字或图片水印

    在IT领域,尤其是在软件开发中,为图像添加文字或图片水印是一项常见的需求。C#是一种广泛使用的编程语言,尤其适用于Windows平台上的桌面应用开发。本篇将详细讲解如何使用C#结合GDI+库来实现这个功能。 GDI+...

    vb Gdi+图像变形、透明处理

    在VB(Visual Basic)编程环境中,GDI+(Graphics Device Interface Plus)是一个强大的图形处理库,它提供了丰富的功能,用于创建、操作和显示图像。本主题主要关注如何使用VB和GDI+进行图像的变形、透明处理以及...

Global site tag (gtag.js) - Google Analytics