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

Delphi图像处理 -- 图像颜色矩阵调整

阅读更多

本文在《GDI+ ColorMatrix的完全揭秘》的ColorMatrix原理揭秘的基础上,用Delphi代码来完整实现GDI+的ColorMatrix功能。

GDI+中设置ColorMatrix时有2个枚举选项,在实际运用中极少使用,所以代码中以GDI+设置ColorMatrix的缺省方式实现。

先给一个简易的浮点版本,因为该过程没有考虑子图处理,所以称之为简易版本,主要方便阅读者理解ColorMatrix实现原理:

因代码已经有了注释,而实现原理、公式已经在《GDI+ ColorMatrix的完全揭秘》中进行了详尽的介绍,所以本文不再累述。

该过程代码的特点是简单易读,缺点是效率较低,在我的P4 2.8G计算机上,处理一张千万像素的照片,耗时为1000ms左右(不包括GDI+图像格式转换耗时。千万像素的24位格式图像转换为32位格式,耗时就达650ms)。

下面是一个MMX BASM代码的整数ColorMatrix实现过程:

该过程中作了更详细的注释,其特点是处理速度较快。在我的机器上,不包括图像格式转换耗时,处理千万像素图片主对角线数据耗时不到50ms,而处理全部变换耗时350-400ms。

下面是一个测试程序代码,该程序代码中,没有使用GDI+,用TJPEGImage对象装入图像转换为TImageData类型后,有上面的ImageSetColorMatrix过程进行处理。该测试代码界面与《GDI+ for VCL基础 -- 颜色调整矩阵ColorMatrix详解》是一样的。有兴趣的朋友可以同里面的测试代码作一下比较。

例子代码中的图像显示过程DrawImage见《Delphi图像处理 -- 图像显示》。
下面是运行效果图:
效果图
该效果图是个处理-1矩阵实现图像取反的画面,仔细观察右边的取反图,不难发现其中有不少黑色的点,尤其是画面右上角“圣亚”2个字下面,更是出现一些难看的色斑,这些问题在《GDI+ ColorMatrix的完全揭秘》中已经作了详细的解说。其实这个问题完全可以进行改进,但本文的目的是揭秘和完整实现,改进后,一些非主要效果肯定会与“正版”不一样。^_^

文章中所用数据类型及一些过程见《Delphi图像处理 -- 数据类型及内部过程》和《Delphi图像处理 -- 图像像素结构与图像数据转换》。

尽管我十分努力,但水平有限,错误在所难免,欢迎指正和指导。邮箱地址:

maozefa@hotmail.com

说明:本文代码于2010.5.20重新修订过,增加了拷贝形式的处理过程。

分享到:
评论

相关推荐

    delphi部件开发

    7.1 图像处理部件开发概述 7.2 TFastBMP类的开发 7.3 TFastlmage部件的开发 第八章 开发数值计算部件 8.1 数值计算部件开发概述 8.2 矩阵部件开发编程 8.2.1 TMatrix类属性 8.2.2 TMatrix类方法 8.2.3 TMatrix的...

    Delphi图片去色 彩色变成黑白的例子.rar

    Delphi图片去色 彩色变成灰度图的例子,应用了矩阵维数,去色功能使用了两种方法,各不相同但效果相差不大,觉得转换成黑白图像的效果不是太好,有些不清淅,而且例子只针对BMP文件,局限性有点大,只供参考学习。

    易语言程序免安装版下载

    修改BUG:VCL相关支持库部分组件在修改个别属性或调用个别方法后不可见,并改进了Delphi版本的支持库SDK。 15. 修改BUG:高级表格在列类型为数值型时,添加新行且省略标题的情况下,会导致程序异常。 16. 修改BUG...

    Delphi 6集成开发环境

    第1 章 Delphi 集成开发环境..........1 1.1 Delphi 6.0 简介............................................ 1 1.2 Delphi 可视化开发环境简介...................... 2 1.2.1 对象编辑器(Object Inspector)....3 ...

    Delphi将彩色图片转换成灰度图

    内容索引:Delphi源码,图形处理,图像转换 Delphi将彩色图片转换成灰度图,有两种算法实现转换,不过效果都不是太好,转换后的图像有些失真,而且锐度控制的不太好,使用了矩阵维数,仅供学习参考。

    精通matlab7.0混合编程.

    13.2.3 visual c++的图像处理位图文件读/写操作 13.3 综合实例框架 13.3.1 框架搭建 13.3.2 模块划分 13.3.3 应用程序功能添加 13.4 实现方法 13.4.1 图像直方图统计——matlab引擎命令实现 13.4.2 图像形态学——...

    TuXiangShiBie.rar_site:www.pudn.com_ultrasound image_神经网络_肝脏_超声图

    该软件需用Delphi7设计,采用灰度共生矩阵的方法对肝脏超声图像进行纹理特征提取。通过神经网络进行分类处理。

    java源码包---java 源码 大量 实例

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    JAVA上百实例源码以及开源项目源代码

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    精通GDI+编程

    此外,GDI+的矩阵运算、图像的编码与解码、图像色彩信息校正等深层次知识,也都能够在本书中找到详细的说明。为了让读者更快地掌握GDI+编程,在每一章的内容中,都配有详尽的程序源代码,以强化具体的理论阐述。本书...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    windows 程序设计

    所有GUI都在点矩阵对应的视讯显示器上处理图形。图形提供了使用屏幕的最佳方式、传递信息的可视化丰富多彩环境,以及能够WYSIWYG(what you see is what you get:所见即所得)的图形视讯显示和为书面文件准备好格式...

    java源码包2

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 ...

    java源码包3

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 ...

    java源码包4

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 ...

    JAVA上百实例源码以及开源项目

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

Global site tag (gtag.js) - Google Analytics