java image 对象_java – 旋转Image对象

因此,基于

this answer中的示例,您应该能够设计一种旋转方法,该方法可以将源图像旋转给定的度数,例如……

// 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 Im talking about

// Okay, this calculates the amount of space the image will need in

// order not be clipped when its 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;

}

因此,基于 this answer中的示例,您应该能够设计一种旋转方法,该方法可以将源图像旋转给定的度数,例如…… // 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 Im talking about // Okay, this calculates the amount of space the image will need in // order not be clipped when its 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; }
经验分享 程序员 微信小程序 职场和发展