2013-03-14 84 views
1

我想通过使用Affinetransform.rotate()和AffinetransformOp.filter以90度增量旋转32乘64 png图像。它适用于0,90和180度,但在270度时只显示一半图像。经过一番研究后,我发现这是由于filter()处理图像坐标的方式,但我不知道如何解决这个问题。我已经尝试过使用其他方法来旋转图像,但我宁愿使用这个。Java AffinetransformOp过滤器()拧我的形象

用于旋转图像的方法:

public BufferedImage rotateImage(BufferedImage img, double angle) { 
    AffineTransform tx = new AffineTransform(); 
    tx.rotate(angle, img.getWidth() - 16, img.getHeight() - 16); 
    AffineTransformOp op = new AffineTransformOp(tx, 
      AffineTransformOp.TYPE_BILINEAR); 
    return op.filter(img, null); 
} 

我也有一个屏幕截图澄清我的问题: enter image description here

编辑:我已经手动试图通过将创建filter()目标图像的下面的代码,无济于事。

int w, h; 
if (angle == Math.PI/2 || angle == 3 * Math.PI/2) { 
     w = img.getHeight(); 
     h = img.getWidth(); 
} else { 
     w = img.getWidth(); 
     h = img.getHeight(); 
} 
BufferedImage dest = new BufferedImage(w, h, img.getType()); 
return op.filter(img, dest); 
+0

我也希望为此找到解决办法。当我有100x50尺寸的图像时,旋转它,然后过滤它,结束图像是100x100。该过程扩大了图像边界以绘制所有图像,但我想知道一旦完成后是否可以重新调整这些边界。 – 2013-08-01 15:16:11

回答

1

我觉得它有什么用,你是通过

tx.rotate(angle, img.getHeight()/2 - 16, img.getHeight() - 16); 

事实做时,它应该是

tx.rotate(angle, img.getWidth() - 16, img.getHeight()/2 - 16); 

(你传递的getHeight()两次,我很确定他们是在错误的顺序)

让我知道这是否改变了你的事情。

+0

我确实使用了错误的参数,所以我解决了这个问题。但它并没有解决我的问题。 – Exevan 2013-03-14 17:08:12