我正在寻找的是由一些度旋转的图像的算法(输入)。

public Image rotateImage(Image image, int degrees)

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

编辑:我忘了提及,我没有可用的SVG API和我需要一个方法通过超过90其他任意程度旋转 - 180- 270

此外,没有java.awt中。*包可在MIDP 2.0

有帮助吗?

解决方案

一个描述图像旋转算法我发现在互联网上是依赖于丹彭博的优秀的leptonica库最好的网页。虽然leptonica库本身是用C语言编写,并不会帮你,他对图像旋转算法页:

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

是绝对值得一读。你很可能要实施类似的旋转运动通过他描述了在页面的第二部分区域映射算法。

其他提示

常规溶液:作为目标图像中的每个像素,获取源图像中的像素与所述目标像素的坐标,在相反的方向上旋转

<强>增强到溶液旋转通常不会给确切像素坐标。做与邻国源像素的加权平均值,根据它重叠它们的百分比。

作为二进制图像更快溶液:将图像转换到连续的前景像素的“运行”。然后旋转这些线的端点和它们绘制到目标

通常,这将产生由于整数的舍入微小的间隙,因此,当一个或两个端点都超过10%的距离的整数,通过绘制两条线为单源极线,使用整数补丁坐标四舍五入向上和向下。

如果一个端点在10%以内,而另一个不是,则两条线将形成“V”形。如果两者都关闭的10%以上,这两条线将形成一个“X”形。

此可相对于X轴或Y轴来进行。使用一个与所述轴和所述旋转角度之间的最小角度。 (即,如果旋转角度为45和-45之间,使用X轴。)

作为二进制图像仍快溶液:如果有较少的背景像素比前景像素,填充前景目标,并按照上面的算法与背景像素

您可以尝试 http://www.j2mearmyknife.com/ 。它具有一个很大的凉爽的视觉效果,包括图像旋转。

Graphics2D的和的AffineTransform会帮你做你想要什么。具体而言,Graphics2D.drawImage(图像,的AffineTransform)和AffineTransform.getRotateInstance。你也可以做缩放,平移,以及与此剪切。这两个类已经在运行时,因为至少1.4可能更早。

  public Image rotateImage(Image img, float degrees){
   BufferedImage sourceBI = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_ARGB);
   sourceBI.getGraphics().drawImage(img,0,0,null);
   AffineTransform at = new AffineTransform();
   at.rotate(degrees*Math.PI/180, sourceBI.getWidth()/2, sourceBI.getHeight()/2);
   BufferedImageOp bio = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
   return bio.filter(sourceBI, null);
  }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top