我写这段代码:
BufferedImage image;
BufferedImage im = image;
@Override
public void paint(Graphics g) {
try {
image = ImageIO.read(new File("jet.png"));
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(image, 100, 100, Color.BLACK, null);
image = rotateImage(-45);
g2.drawImage(image, 250, 100, Color.BLACK, null);
} catch (IOException ex) {
}
}
public BufferedImage rotateImage(int degress) {
double deg = Math.toRadians(degress);
double xrot = image.getWidth()/2 ;
double yrot = image.getHeight() /2;
AffineTransform xt = AffineTransform.getRotateInstance(deg, xrot, yrot);
AffineTransformOp op = new AffineTransformOp(xt, AffineTransformOp.TYPE_BILINEAR);
return op.filter(image, im);
}
}
输出是:
并且新的图像尺寸改变了!!!我想旋转这个图像,它的重要的新图像大小不改变
我想要一些代码来旋转图像而不调整图像大小,就像这样
最佳答案
显示的效果是AffineTransformOp#filter()
的特点:“getBounds2D(BufferedImage)
返回的矩形坐标不一定与此方法返回的BufferedImage
坐标相同。”相反,将图像绘制到具有旋转图形上下文的 BufferedImage
中,如图所示 here .使用 RenderingHints
,例如 VALUE_ANTIALIAS_ON
和 VALUE_INTERPOLATION_BILINEAR
,根据需要。
关于java - 在java中旋转图像而不调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210114/