我写下这些代码:
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);
}
}
,输出为:
新图像尺寸改变了!我想旋转这个图像,其重要的新图像大小白色改变
我想要一些代码来旋转图像whitout调整大小图像,像这样
答案 0 :(得分:2)
显示的效果是AffineTransformOp#filter()
的特征:" getBounds2D(BufferedImage)
返回的矩形的坐标不一定与此方法返回的BufferedImage
的坐标相同"相反,将图像绘制到具有旋转图形上下文的BufferedImage
,如图here所示。根据需要使用RenderingHints
,例如VALUE_ANTIALIAS_ON
和VALUE_INTERPOLATION_BILINEAR
。
答案 1 :(得分:2)
首先:
不要覆盖paint()。自定义绘画是通过覆盖paintComponent(...)
来完成的,并且不要忘记方法开头的super.paintComponent(...)。
不要在绘画方法中进行I / O操作。在类
旋转90度,180度,270度等以外的方块时,方块的大小会发生变化。所以,问题是你正在使用的drawImage(...)方法的版本:
g2.drawImage(image, 100, 100, Color.BLACK, null);
您可以分别绘制背景和图像,而不是使用drawImage()方法绘制背景和图像,以便控制背景的大小:
//g2.drawImage(image, 100, 100, Color.BLACK, null);
g2.setColor( Color.BLACK );
g2.fillRect(100, 100, image.getWidth(), image.getHeight());
g2.drawImage(image, 100, 100, null);
image = rotateImage(-45);
g2.fillRect(250, 100, image.getWidth(), image.getHeight());
g2.drawImage(image, 250, 100, null);