I am looking to rotate an image. I have a JInternalFrame which contains a JLabel. The label contains the image. After the image has been rotated, I
Based on a previous example, but actually working with recent JDKs and in headless mode:
public static BufferedImage rotate(BufferedImage image, double angle) {
double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle));
int w = image.getWidth(), h = image.getHeight();
int neww = (int)Math.floor(w*cos+h*sin), newh = (int) Math.floor(h * cos + w * sin);
BufferedImage result = deepCopy(image, false);
Graphics2D g = result.createGraphics();
g.translate((neww - w) / 2, (newh - h) / 2);
g.rotate(angle, w / 2, h / 2);
g.drawRenderedImage(image, null);
g.dispose();
return result;
}
public static BufferedImage deepCopy(BufferedImage bi, boolean copyPixels) {
ColorModel cm = bi.getColorModel();
boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
WritableRaster raster = bi.getRaster().createCompatibleWritableRaster();
if (copyPixels) {
bi.copyData(raster);
}
return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
}