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

Delphi图像处理 -- 图像合成

阅读更多

图像合成是指将一张图像的全部或者局部与另一张图像合并,形成一张新的图像。图像合成的基本形式有2种:

一是按图像源像素本身的不透明度信息合成到目标图片上,这是最简单的形式,像素的合并公式为:

nRGB = (sAlpha * sRGB + (255 - sAlpha) * dRGB) / 255

公式中,nRGB为新的R(G,B)分量,sRGB为源的R(G,B)分量,dRGB为目标的R(G,B)分量,sAlpha为源的不透明度。

二是用指定的不透明度将图像源合成到目标图片上,像素的合并公式为:

nRGB = (Alpha * sAlpha * sRGB + (255 - Alpha * sAlpha) * dRGB) / 255

如果图像源的像素本身不含不透明度信息,则sAlpha = 255:

nRGB = (Alpha * 255 * sRGB + (255 - Alpha * 255) * dRGB) / 255

公式中,Alpha为指定的不透明度,取值范围为0 -- 1,其它同上。

本文将提供上述2种形式的图像合成过程,在实现代码中,为了加快合成速度,采用了像素合并简化公式,如前述的第一种形式公式将简化为:

nRGB = (sAlpha * (sRGB - dRGB) + dRGB * 256) / 256

简化后的公式与原公式有一些微小的误差,不过与人眼的视觉误差相比,可忽略不计。

在实际图像合成过程中,往往会要求将图像源的某个景物合成到目标图像上,这就要借助设置像素关键颜色,甚至羽化等手段将景物从图像源中抠出来,形成上面的2种基本形式后,再进行图像合并。这些已经不是本文讨论的范围。

下面是图像合成的代码:

上面的代码中定义了多个图像合成过程,以满足不同情况、不同对象的图像合并,但图像合成的核心代码还是DoSysthesis过程。为了节省MMX提取图像源的不透明度分量的时间,我采取了预先计算出Alpha掩码表,在合并过程中进行地址引用的方式。Alpha掩码表存放在SysthesisAplhaMask变量中,在单元的初始化代码中对其进行初始化(代码参见《Delphi图像处理 -- 图像像素结构与图像数据转换》第八部分)。

下面是一个图像合成例子:

因手头没有好的图片,故随便找了2张演示了一下,由于图像源比目标图像高一些,所以图像合成过程对图像源进行了裁剪。也可调用拉伸合成过程将图像源进行缩放合成,但那使用的过程并不是本文要介绍的图像合成过程,而是图像缩放过程ImageScale了(见《Delphi图像处理 -- 图像缩放》)。你也可以使用GetSubImageData或者GetClipImageData过程(见《Delphi图像处理 -- 图像像素结构与图像数据转换》),将图像源的任意局部合成到目标图像。例子代码的合成效果图如下:

目标图像:目标图像

源 图 像:图像源

合成图像:合成效果图

文章中使用GDI+版本下载地址和说明见《GDI+ for VCL基础 -- GDI+ 与 VCL》。

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

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

maozefa@hotmail.com

说明:本文代码于2010.5.20重新修订过。

分享到:
评论

相关推荐

    delphi图像拼接

    delphi图像拼接,很简单的图像拼接程序,没有用的额外第三方库,效率也不错,适合初学者

    Delphi读取Exif图像信息.rar

    Delphi读取Exif图像信息,搞图片或摄影的大概都知道Exif是什么吧,图像最原始的信息,一张只是不是合成的照片,只要是从数码相机中拍摄出来的照片,都会有EXIF信息,这里面记录了图像拍摄时的参数信息和图像属性信息...

    C++图像处理?图像显示

     《Delphi图像处理》系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM。  尽可能保持二者内容一致,可相互对照。  本文代码必须包括《C++图像处理 — 数据类型及公用函数》文章中的BmpData.h头文件...

    Delphi编程图象融合程序

    PhotoSmart是一款面向图像处理的专业软件,它可以批量的对您的数码照片进行相关的特效处理,如加盖印章,添加文字,图像的优化以及各种图像格式转换,比例缩放等等,在PhotoShop中需要专业的图像处理技能才能够实现...

    图像动画系统-delphi图片调试程序

    摘要:Delphi源码,图形处理,图像动画,图片调试 图像动画系统-delphi图片调试程序,将一图像序列载入合成动画,可编辑图像序列,不过这些序列需要你事先准备好的,找不到序列的情况下,打开程序如上图所示。

    用Delphi实现Word文件的预览

    要创建自己的图像,最灵活的方法是用一个 BufferedImage 对象,它是 Image 类的一个子类,它把图像数据存储在一个可以被访问的缓冲区中。它还支持各种存储像素数据的方法:使用或不使用 alpha 通道、不同种类的颜色...

    php和mysql开发的报刊订阅管理系统

    VB+SQL学生信息管理系统 vc图像处理 VB+sql房屋的中介管理 VC调度机制对网络QoS影响的研究分析 VB+SQL企业人力资源管理系统 VC+SQL学生成绩管理系统 VB+SQL铁岭香河商贸有限公司销售管理系统 VC人脸识别系统设计 VB+...

    缺陷管理系统。Apache+PHP+MySQL

    VB+SQL学生信息管理系统 vc图像处理 VB+sql房屋的中介管理 VC调度机制对网络QoS影响的研究分析 VB+SQL企业人力资源管理系统 VC+SQL学生成绩管理系统 VB+SQL铁岭香河商贸有限公司销售管理系统 VC人脸识别系统设计 VB+...

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

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

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

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

Global site tag (gtag.js) - Google Analytics