问题
This question already has an answer here:
- Java: Rotating Images 4 answers
I have managed to rotate an image 180 degrees
but wish to rotate it 90 degrees
clockwise
can someone edit my code so that it does this with explanation. Thanks.
private void rotateClockwise()
{
if(currentImage != null){
int width = currentImage.getWidth();
int height = currentImage.getHeight();
OFImage newImage = new OFImage(width, height);
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
newImage.setPixel( x, height-y-1, currentImage.getPixel(x, y));
}
}
currentImage = newImage;
imagePanel.setImage(currentImage);
frame.pack();
}
}
回答1:
Use this method.
/**
* Rotates an image. Actually rotates a new copy of the image.
*
* @param img The image to be rotated
* @param angle The angle in degrees
* @return The rotated image
*/
public static Image rotate(Image img, double angle)
{
double sin = Math.abs(Math.sin(Math.toRadians(angle))),
cos = Math.abs(Math.cos(Math.toRadians(angle)));
int w = img.getWidth(null), h = img.getHeight(null);
int neww = (int) Math.floor(w*cos + h*sin),
newh = (int) Math.floor(h*cos + w*sin);
BufferedImage bimg = toBufferedImage(getEmptyImage(neww, newh));
Graphics2D g = bimg.createGraphics();
g.translate((neww-w)/2, (newh-h)/2);
g.rotate(Math.toRadians(angle), w/2, h/2);
g.drawRenderedImage(toBufferedImage(img), null);
g.dispose();
return toImage(bimg);
}
taken from my ImageTool class.
Hope it helps.
回答2:
Have a look at http://docs.oracle.com/javase/tutorial/2d/index.html and http://docs.oracle.com/javase/6/docs/api/java/awt/Graphics2D.html#rotate%28double%29 aswell as this post Rotate an image in java
来源:https://stackoverflow.com/questions/15927014/rotating-an-image-90-degrees-in-java