Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is some code I found a long time ago:</p> <pre><code>import java.awt.*; import java.awt.geom.*; import java.awt.image.*; import java.io.*; import java.net.*; import javax.imageio.*; import javax.swing.*; public class RotateImage { public static void main(String[] args) throws IOException { URL url = new URL("http://www.oracle.com/us/assets/im04t0-java-logo-1862786.jpg"); BufferedImage original = ImageIO.read(url); GraphicsConfiguration gc = getDefaultConfiguration(); BufferedImage rotated1 = tilt(original, -Math.PI/2, gc); BufferedImage rotated2 = tilt(original, +Math.PI/4, gc); BufferedImage rotated3 = tilt(original, Math.PI, gc); display(original, rotated1, rotated2, rotated3); } public static BufferedImage tilt(BufferedImage image, double angle, GraphicsConfiguration gc) { 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); int transparency = image.getColorModel().getTransparency(); BufferedImage result = gc.createCompatibleImage(neww, newh, transparency); Graphics2D g = result.createGraphics(); g.translate((neww-w)/2, (newh-h)/2); g.rotate(angle, w/2, h/2); g.drawRenderedImage(image, null); return result; } public static GraphicsConfiguration getDefaultConfiguration() { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gd = ge.getDefaultScreenDevice(); return gd.getDefaultConfiguration(); } public static void display(BufferedImage im1, BufferedImage im2, BufferedImage im3, BufferedImage im4) { JPanel cp = new JPanel(new GridLayout(2,2)); addImage(cp, im1, "original"); addImage(cp, im2, "rotate -PI/2"); addImage(cp, im3, "rotate +PI/4"); addImage(cp, im4, "rotate PI"); JFrame f = new JFrame("RotateImage"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setContentPane(cp); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } static void addImage(Container cp, BufferedImage im, String title) { JLabel lbl = new JLabel(new ImageIcon(im)); lbl.setBorder(BorderFactory.createTitledBorder(title)); cp.add(lbl); } } </code></pre> <p>Edit:</p> <pre><code>// BufferedImage result = gc.createCompatibleImage(neww, newh, transparency); BufferedImage result = gc.createCompatibleImage(neww, newh, Transparency.TRANSLUCENT); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload