旋转图像对象 [英] Rotating an Image object
问题描述
我有一个方法 getImage()
需要旋转一个 Image
,将它存储在一个新变量中,然后返回那个新的 Image
.这是我的尝试,图像似乎是空的或什么的.它只是没有显示在屏幕上:
I have a method getImage()
that needs to rotate an Image
, store it in a new variable, then return that new Image
. Here is my attempt, the image appears to be empty or something. It just does not show up on the screen:
public Image getImage() {
buffImage.createGraphics().rotate(direction);
return buffImage;
}
当我取出 buffImage.createGraphics().rotate(direction);
图像在屏幕上绘制得很好,没有问题,但当然没有旋转.
When I take out the buffImage.createGraphics().rotate(direction);
the image draws on the screen just fine with no problems but of course, not rotated.
推荐答案
所以,基于 这个答案,您应该能够设计一种旋转方法,该方法可以将源图像旋转给定的度数,例如...
So, based on the example in this answer, you should be able to devise a rotation method which can rotate a source image by a given number of degrees, for example...
// Make sure you actually load some image and assign it to this
// variable, otherwise you will have a NullPointerException to
// deal with
private BufferedImage source;
public Image rotateBy(double degrees) {
// The size of the original image
int w = source.getWidth();
int h = source.getHeight();
// The angel of the rotation in radians
double rads = Math.toRadians(degrees);
// Some nice math which demonstrates I have no idea what I'm talking about
// Okay, this calculates the amount of space the image will need in
// order not be clipped when it's rotated
double sin = Math.abs(Math.sin(rads));
double cos = Math.abs(Math.cos(rads));
int newWidth = (int) Math.floor(w * cos + h * sin);
int newHeight = (int) Math.floor(h * cos + w * sin);
// A new image, into which the original can be painted
BufferedImage rotated = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = rotated.createGraphics();
// The transformation which will be used to actually rotate the image
// The translation, actually makes sure that the image is positioned onto
// the viewable area of the image
AffineTransform at = new AffineTransform();
at.translate((newWidth - w) / 2, (newHeight - h) / 2);
// And we rotate about the center of the image...
int x = w / 2;
int y = h / 2;
at.rotate(rads, x, y);
g2d.setTransform(at);
// And we paint the original image onto the new image
g2d.drawImage(source, 0, 0, null);
g2d.dispose();
return rotated;
}
这篇关于旋转图像对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!