Java Icon createRotatedImage(Component c, Icon icon, double rotatedAngle)

Here you can find the source of createRotatedImage(Component c, Icon icon, double rotatedAngle)

Description

Creates a rotated version of the input image.

License

Open Source License

Parameter

Parameter Description
c The component to get properties useful for painting, e.g. the foreground or background color.
icon the image to be rotated.
rotatedAngle the rotated angle, in degree, clockwise. It could be any double but we will mod it with 360 before using it.

Return

the image after rotating.

Declaration

public static ImageIcon createRotatedImage(Component c, Icon icon, double rotatedAngle) 

Method Source Code


//package com.java2s;
import java.awt.Component;

import java.awt.Graphics;
import java.awt.Graphics2D;

import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

import javax.swing.Icon;
import javax.swing.ImageIcon;

public class Main {
    final static double DEGREE_90 = 90.0 * Math.PI / 180.0;

    /**//from  w w  w  . j a  va  2  s  .  c  o m
     * Creates a rotated version of the input image.
     *
     * @param c            The component to get properties useful for painting, e.g. the foreground
     *                     or background color.
     * @param icon         the image to be rotated.
     * @param rotatedAngle the rotated angle, in degree, clockwise. It could be any double but we
     *                     will mod it with 360 before using it.
     *
     * @return the image after rotating.
     */
    public static ImageIcon createRotatedImage(Component c, Icon icon, double rotatedAngle) {

        // convert minus values into right
        while (rotatedAngle < 0)
            rotatedAngle += 360;

        // convert rotatedAngle to a value from 0 to 360
        double originalAngle = rotatedAngle % 360;
        if (rotatedAngle != 0 && originalAngle == 0) {
            originalAngle = 360.0;
        }

        // convert originalAngle to a value from 0 to 90
        double angle = originalAngle % 90;
        if (originalAngle != 0.0 && angle == 0.0) {
            angle = 90.0;
        }

        double radian = Math.toRadians(angle);

        int iw = icon.getIconWidth();
        int ih = icon.getIconHeight();
        int w;
        int h;

        if ((originalAngle >= 0 && originalAngle <= 90) || (originalAngle > 180 && originalAngle <= 270)) {
            w = (int) (iw * Math.sin(DEGREE_90 - radian) + ih * Math.sin(radian));
            h = (int) (iw * Math.sin(radian) + ih * Math.sin(DEGREE_90 - radian));
        } else {
            w = (int) (ih * Math.sin(DEGREE_90 - radian) + iw * Math.sin(radian));
            h = (int) (ih * Math.sin(radian) + iw * Math.sin(DEGREE_90 - radian));
        }
        BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
        Graphics g = image.getGraphics();
        Graphics2D g2d = (Graphics2D) g.create();

        // calculate the center of the icon.
        int cx = iw / 2;
        int cy = ih / 2;

        // move the graphics center point to the center of the icon.
        g2d.translate(w / 2, h / 2);

        // rotate the graphcis about the center point of the icon
        g2d.rotate(Math.toRadians(originalAngle));

        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        icon.paintIcon(c, g2d, -cx, -cy);

        g2d.dispose();
        return new ImageIcon(image);
    }
}

Related

  1. createColorIcon(Color color)
  2. createColorIcon(final int width, final int height, final Color color)
  3. createHistImage(JComponent c, Icon hd, File dir, Color bgColor, String fname)
  4. extractIconImage(Component component, Icon icon)
  5. genImageResource(Class cls, String icon)
  6. getChatIconImage()
  7. makeIcon(final Class baseClass, final Class rootClass, final String imageFile)