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) |,

 

 

 

 

 

rotation

 

. 图像旋转

 

   

 这样,只要先做平移       

 

[   1    0    (Widthw)/2   ]

 [   0    1    (Heighth)/2  ]

[   0    0    1              ]

 

 

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

得到。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值