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

Delphi图像处理 -- 图像旋转

阅读更多

图像旋转,是指按照给定的角度,计算出图像每个像素坐标点在新图像上的坐标位置,从而实现整个图像坐标变换的图像处理手段。其像素坐标的变换公式为:

(1)、x' = x * cos(angle) + y *sin(andle)

y' = x * -sin(angle)+y * cos(andle)

公式中,x',y'为变换后的像素坐标点,x,y为变换前像素坐标点,angle为旋转角度。

但是,按照上面的公式旋转图像,会出现多个原图像像素点对应新图像同一个点的问题,这不仅会多消耗图像旋转处理的时间,而且也会使旋转后的图像产生不必要的失真,如果是32位带Alpha通道像素格式的图像,更会因此造成图像的混乱,所以在实际的图像旋转处理代码中,是以目标图(旋转后的图像)的像素坐标点,逐点反推原图像素的位置,这样,目标图的各个像素点既不会重复,也不会遗漏。其计算公式为:

(2)、x = x' * cos(angle) - y' * sin(angle)

y = x' * sin(angle) + y' * cos(angle)

下面是Delphi图像旋转处理的代码:

同图像缩放处理一样,图像旋转的质量,也取决图像像素的插值方式,图像旋转时的像素插值也可选择临近插值、线性插值和双立方插值等方式,缺省时线性插值方式,代码中用到的内部像素插值过程见《Delphi图像处理 -- 图像缩放》。

本文的图像旋转处理是采用放大256倍后的定点整数运算,其运算速度是浮点运算不可比拟的,同时在像素处理前按照给定的旋转角度计算好了x,y坐标点的增量,因此在具体的逐点像素坐标变换时,不需要按照前面的像素坐标变换公式进行复杂的运算,而只是直接在放大256倍后的像素坐标点上进行加减,就可达到像素坐标变换的目的,这更加加快的图像的旋转处理过程。因此,本文的图像旋转过程处理速度还是较快的。

图像旋转处理最麻烦的还是边界像素的处理。本文的图像旋处理过程和图像缩放、卷积处理过程一样,使用ImageGetExpandData过程扩展了图像边界,但和图像旋转、卷积处理过程不同的是,图像旋转后,其边界会因为角度的变化,带来明显的边缘锯齿,为了解决这个问题,本过程将图像扩展的边界部分的Alpha通道置为了0,这样,在像素插值过程中,扩展边界像素的R、G、B各分量就较融洽地融合在目标图边界像素之间的背景色中,也就相当于进行了锯齿消除。

下面是个在TImage对象上进行图像任意角度旋转的例子。

运行界面图如下:

旋转前的界面

运行界面

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

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

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

maozefa@hotmail.com

说明:本文代码于2010.5.20重新修订过,在旋转处理过程中增加了一个Alpha参数,可实现半透明形式的图像旋转。

分享到:
评论

相关推荐

    Delphi图像处理方法

    Delphi图像处理方法,直方图拉伸,亮度,对比度,图像旋转,二值化

    delphi关于图像处理基础代码源

    图像旋转 二值化 图像放大 缩小 镜像 边缘测试 图像求和差 伪彩色 线性变换 去噪等等..

    Delphi旋转JPG图像

    摘要:Delphi源码,图形处理,旋转图像 Delphi旋转JPG图像,使用Delphi旋转、显示JPG图像,相对较初级的Delphi图像处理实例,仅供参考。

    Delphi使用Asphyre图像处理控件实例源码.rar

    Delphi使用Asphyre图像处理控件实例源码,包含如下特效:  灰度、饱和度、对比度、浮雕、马赛克、错位模糊、高斯模糊、风化、锐化、波浪变形、扭曲变形。  因时间关系,来不及用中文界面,反正比较简单。  ...

    XsImageEffect v1.00.321 (图像处理控件)

    提供技术支持,最适合应用于扫描后的图像处理开发本控件原本就是应用于扫描后的图像处理,方便使用提供很好用的Demo----------安装方法:1、首先打开Delphi在菜单里选择Component-->Install Component...。2、然后在...

    一个Delphi图像旋转控件

    摘要:Delphi源码,图形处理,图像旋转 一款适用于delphi环境的图像旋转处理控件,自带测试例子,编译前请先引入控件,实例挺简单的,欢迎初学者下载源码。

    源码演示Delphi 如何放大和缩小图像【图片】.rar

    源码演示Delphi 如何放大和缩小图像【图片】,我们这个例子可以学习了解如何使用Delphi编程代码,放大或缩小一张图片,这里把放大和缩小图片的基数写在按钮事件中,用户每次单击按钮,就会按照一定的缩放倍数放大或...

    Delphi旋转图像源码实例

    摘要:Delphi源码,图形处理,图像旋转 Delphi旋转图像源码实例,有使用Delphi7的朋友,本实例可以直接编译,无需任何第三方控件,Delphi将图像旋转仅是一个图像操作的一简单实例,Delphi初学者可参考。

    图像处理软件压缩文件VB

    其中封装了10个常用图像处理的API函数,方便VC、VB、Delphi等开发工具调用。GeoInVB目录中是一个VB项目,对封装的Dll进行调用演示。 封装之前的Visual C++代码仅能进行256色图像的处理,现在封装的各API函数可以处理...

    XsImageEffect

    SetRotateDegree: Integer //设置图像旋转角度 SelectArea: Boolean //是否可以选择区域 DragInForm: Boolean //是否可以手拖动浏览 BaseColor: Integer //自动去除颜色的基本颜色数(默认黑色) ColorArea: ...

    Delphi实现图像文本旋转特效完整实例代码

    主要介绍了Delphi实现图像文本旋转特效完整实例代码,对于帮助读者进一步理解Delphi图形及文字特效的处理有一定的借鉴价值,需要的朋友可以参考下

    Delphi Canvas生成万花筒特效.rar

    Delphi Canvas生成万花筒特效,是由一个个单体的圆形经过变换生成的,单体的圆形的定义代码,可参考下边的代码:  Form1: TForm1;  R1,R2,Syn:integer; //R1大圆半径,R2小圆半径;Syn为小圆上的任意一点到圆心距离...

    FastBmp

    - 自由缩放图像 - 任意旋转图像 - 锐化 / 钝化图像 - 特殊效果处理 e.g. 马赛克,加杂音点 ... 简直是个小小 Photoshop. With Delphi source ! 速度也不错!

    DELPHI 5编程实例与技巧

    10.2 图像格式的处理 188 10.2.1 位图 189 10.2.2 JPEG文件 191 10.3 特殊显示效果 193 10.3.1 画布 193 10.3.2 调用CopyRect 193 10.3.3 调用BitBlt 194 10.4 动画 199 10.4.1 文字动画 199 10.4.2 图像动画 200 ...

    DELPHI全屏截图、区域截屏程序.rar

    DELPHI全屏截图、区域截屏程序,同时还包括绘图工具、按比例缩放、图像剪裁、图像旋转、自定义形状抓图(圆形、椭圆形、正方形等),还有多种画笔工具,整个截屏软件在界面上的设计也是很棒,下边是TAB式窗口,功能...

    Delphi编程大师2003 4of5

    一个能够旋转显示其内的图像的Image控件 Gifimage For Delphi6 Richview1.4.2 SakEmail控件3.4.3版本 利用Windows Socket API抓取网络上的网页的控件 系统信息控件 一个不错的RAS构件 最新版本的gifimage glad控件包...

    Delphi实现图片上下左右翻转.rar

    Delphi实现图片上下左右翻转,换一种说法也就是让图片水平翻转和上下翻转,可头朝下旋转,正反旋转,很多图像处理软件中都具备的功能,看上去十分简单,不过程序代码确实不太复杂哦,而且效果不失真,操作时,只需...

    Delphi编程大师2003 2of5

    一个能够旋转显示其内的图像的Image控件 Gifimage For Delphi6 Richview1.4.2 SakEmail控件3.4.3版本 利用Windows Socket API抓取网络上的网页的控件 系统信息控件 一个不错的RAS构件 最新版本的gifimage glad控件包...

    《Delphi7编程100例》代码

    《Delphi7编程100例》代码目录:---------------------------------------------ToolBar工具栏控件的使用动态建立主菜单选项窗口界面的动态分隔条动态设置选项卡页面在标题栏中自定义按钮窗体开合窗帘效果Windows XP...

    Delphi编程大师2003 1of5

    一个能够旋转显示其内的图像的Image控件 Gifimage For Delphi6 Richview1.4.2 SakEmail控件3.4.3版本 利用Windows Socket API抓取网络上的网页的控件 系统信息控件 一个不错的RAS构件 最新版本的gifimage glad控件包...

Global site tag (gtag.js) - Google Analytics