如何调整图像大小和旋转图像

时间:2011-01-24 20:54:19

标签: java

我想要旋转图像,在下一级别我想要调整它的大小 帮我。 我创建一个从JPanel扩展并覆盖paintComponent()方法的类 用于绘制图像。

public class NewJPanel extends javax.swing.JPanel {

/** Creates new form NewJPanel */
public NewJPanel() {
    initComponents();
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(image, 20, 20, this);
}

3 个答案:

答案 0 :(得分:3)

这是我使用的一些代码。您可以根据自己的需要进行修改。

调整图片大小:


/**
     * Resizes the image
     * @param filePath File path to the image to resize
     * @param w Width of the image
     * @param h Height of the image
     * @return A resized image
     */
     public ImageIcon resizeImage(String filePath, int w, int h) {


        String data = filePath;
        BufferedImage bsrc, bdest;
        ImageIcon theIcon;
        //scale the image
        try
        {
            if(dataSource == DataTypeEnum.file)
            {
                bsrc = ImageIO.read(new File(data));
            }
            else
            {
                bsrc = ImageIO.read(new URL(filePath));
            }
            bdest = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bdest.createGraphics();
            AffineTransform at = AffineTransform.getScaleInstance((double) w / bsrc.getWidth(),
                    (double) h / bsrc.getHeight());
            g.drawRenderedImage(bsrc, at);

            //add the scaled image
            theIcon = new ImageIcon(bdest);
            return theIcon;
        }
        catch (Exception e)
        {
            Window.getLogger().warning("This image can not be resized. Please check the path and type of file.");
            //restore the old background
            return null;
        }

     }

旋转图像:
注意:角度为弧度


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);
    GraphicsConfiguration gc = getDefaultConfiguration();
    BufferedImage result = gc.createCompatibleImage(neww, newh, Transparency.TRANSLUCENT);
    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;
}


答案 1 :(得分:0)

没有提供完整的解决方案

Graphics2Drotatescale个功能。

答案 2 :(得分:-1)

使用BufferedImage类

BufferedImage newImg = new BufferedImage(newWidth,newHeight,imageType); newImg.createGraphics()。drawImage(oldImg,0,0,newWidth,newHeight,0,0,oldWidth,oldHeight,null);

然后只使用newImg而不是旧图像进行重绘,应该可行,我现在不在编译器附近进行测试。

http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics.html#drawImage%28java.awt.Image,%20int,%20int,%20int,%20int,%20int,%20int,%20int,%20int,%20java.awt.image.ImageObserver%29