当前位置:  开发笔记 > 编程语言 > 正文

图像旋转算法

如何解决《图像旋转算法》经验,为你挑选了2个好方法。

我正在寻找一种将图像旋转一定程度(输入)的算法.

public Image rotateImage(Image image, int degrees)

(图像实例可以用包含每个像素RGB值的int []替换,我的问题是我需要为JavaME MIDP 2.0项目实现它,所以我必须使用1.5版之前的JVM上可运行的代码任何人都可以帮我解决这个问题?

编辑:我忘了提到我没有可用的SVG API,我需要一种方法来旋转90 - 180-270之外的任意度

此外,MIDP 2.0上没有可用的java.awt.*包



1> earino..:

我在互联网上找到的描述图像旋转算法的最佳页面之一与Dan Bloomberg的优秀 leptonica库有关.虽然leptonica库本身是用C语言编写的,但对于图像旋转算法的页面却没有帮助.

http://www.leptonica.com/rotation.html

绝对值得一读.您很可能希望实现类似于他在页面第二部分中描述的"按区域映射的旋转"算法.



2> user20493..:

一般解决方案:对于目标图像中的每个像素,使用目标像素的坐标获取源图像中的像素,并沿相反方向旋转.

解决方案的增强:旋转通常不会给出精确的像素坐标.根据与其重叠的百分比,对源像素与其邻居进行加权平均.

更快的二进制图像解决方案:将图像转换为连续前景像素的"运行".然后旋转这些线的端点并将它们绘制到目标中.

通常,由于整数舍入,这将产生轻微的间隙,因此当一个或两个端点距离整数超过10%时,通过使用向上和向下舍入的整数坐标绘制单个源线的两条线来进行补丁.

如果一个端点在10%以内而另一个端点不在,则两条线将形成"V"形.如果两者都偏差超过10%,则两条线将形成"X"形状.

这可以相对于X轴或Y轴完成.使用轴和旋转角度之间角度最小的那个.(即如果旋转角度在45到-45之间,请使用X轴.)

二进制图像的更快解决方案:如果背景像素少于前景像素,则使用前景填充目标,并按照上述算法使用背景像素.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有