Java 中的图像旋转

 Java 中的图像旋转

 

    通过AffineTransform.getScaleInstance(double sx, double sy) 可以得到
一个执行旋转操作的AffineTransform 实例,再用它做参数,构造一
AffineTransformOp 对象,再调用其filter(BufferedImage src,BufferedImage dst)
方法,即可用来对BufferedImage做旋转变换。
 
 
    但是,AffineTransformOpfilter方法,其返回的BufferedImage的坐标,并
不一定与getBounds2D(BufferedImage)返回的矩形的坐标相同。如果矩形左上角的坐
标为负,那部分就不会画出来。只有坐标非负的部分在目标BufferedImage中画出。所以
单单直接调用此函数做旋转变换,会使图像的一些部分丢失。必须使源图像在旋转后坐标都
非负,这样才可以得到完全的图像。
 
 
 
    可在做旋转之前,先对源图像做适当的平移,使源图像的坐标足够大,旋转之后都非负。
如图 3.2 所示,w, h 分别为源图像的宽,高。旋转后恰好可以包含整个图像的竖直矩形尺
寸为:
 

 

Width  = h * | sin(theta) |  + w * | cos(theta) |.

 

 

 

Height = h * | cos(theta) | +w * | sin(theta) |,

 

 

 

 

 

Java 中的图像旋转_第1张图片

 

. 图像旋转

 

   

 这样,只要先做平移       

 

[   1    0    (Widthw)/2   ]

 [   0    1    (Heighth)/2  ]

[   0    0    1              ]

 

 

即可。而这可通过AffineTransform.getTranslateInstance( (Width - wh)/2,( Height - h)/2 )

得到。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java)