旋转 BufferedImage 实例
我在显示旋转的 BufferedImage 时遇到问题。我认为旋转工作得很好,但我实际上无法将其绘制到屏幕上。我的代码:
Class extends JPanel {
BufferedImage img;
int rotation = 0;
public void paintComponent(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
img2d = img.createGraphics();
img2d.rotate(Math.toRadians(rotation), img.getWidth() / 2, img.getHeight() / 2);
g.drawImage(img, imgx, imgy, null);
this.repaint();
}
}
这对我不起作用。我找不到任何方法将旋转的 img2d
绘制到 g
上。
编辑:我有多个对象被绘制到 g
上,所以我无法旋转它。我需要能够单独旋转事物。
I am having trouble getting a rotated BufferedImage
to display. I think the rotation is working just fine, but I can't actually draw it to the screen. My code:
Class extends JPanel {
BufferedImage img;
int rotation = 0;
public void paintComponent(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
img2d = img.createGraphics();
img2d.rotate(Math.toRadians(rotation), img.getWidth() / 2, img.getHeight() / 2);
g.drawImage(img, imgx, imgy, null);
this.repaint();
}
}
This is not working for me. I could not find any way to draw the rotated img2d
onto g
.
EDIT: I have multiple objects that are being drawn onto g
, so I can't rotate that. I need to be able to rotate things individually.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
也许您应该尝试像这样使用
AffineTransform
:希望这会有所帮助。
Maybe you should try using
AffineTransform
like this:Hope this helps.
我会使用
Graphics2D.drawImage(image, affinetranform, imageobserver)
。下面的代码示例将图像旋转和平移到组件的中心。这是结果的屏幕截图:
I would use
Graphics2D.drawImage(image, affinetranform, imageobserver)
.The code example below rotates and translates an image to the center of the component. This is a screenshot of the result:
您正在旋转图形以绘制到图像中,而不是图像中。这就是为什么你看不到效果。将旋转应用到您正在绘制的图形上,它将绘制旋转的图像:
这可能不会完全绘制出您期望的内容,旋转将围绕坐标原点旋转。对于要绕其中心旋转的图像,您需要在旋转之前应用坐标平移,例如:
Graphics2D 教程 还有更多示例。
You are rotating the graphics for drawing into your image, not the image. Thats why you see no effect. Apply the rotation to the graphics you are painting on and it will draw the image rotated:
This will probably not draw entirely what you expect, the rotation will revolve around the coordinate origin. For the image to be rotate around its center you need to apply a coordinate translation before the rotation, for example:
The Graphics2D Tutorial has some more examples.
我知道这个问题很老了,但我想出了一个具有一些优点的解决方案:
事实上,假设该角度是90°的倍数。唯一可能需要的改进是使用 Enum 表示
angle
而不仅仅是int
。这是我的代码:
I know this question is old but I came up with a solution that has some advantages:
BufferedImage.TYPE_CUSTOM
.As it is, it is assumed that the angle is a multiple of 90°. The only improvement that one might need is to use an Enum for
angle
instead of justint
.Here's my code: