如何在java中缩放图像?我需要算法而不是预定义功能

时间:2017-03-15 11:49:34

标签: java image-processing

我尝试在java中实现一个缩放BufferedImage的简单示例,但代码不起作用!

如果您对我有其他建议,请分享! :d

这是我的代码,但我想为BufferedImage扩展实现一个单独的函数。

感谢您的帮助!

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Scale extends JPanel{

    public static void main(String []args){
        JFrame f = new JFrame();
        f.add(new Translation());
        f.setSize(750, 600);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void paintComponent(Graphics g){
        double scaleFactorX = 2.0;
        double scaleFactorY = 2.0;
        BufferedImage img = null;
        BufferedImage image = null;
        try {
            img = ImageIO.read(new File("img.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }       
        Graphics2D g2d = (Graphics2D) g;

        g2d.drawImage(img, 0, 0, null);
        g2d.drawImage(img, 0, 0, img.getWidth() * scaleFactorX, img.getHeight() * scaleFactorY, null);
    }
}

1 个答案:

答案 0 :(得分:0)

我必须将f.add(new Translation())更改为f.add(new Scale())。 使用intdouble进行计算的结果将导致double。因此,将计算结果解析为int,例如img.getWidth() * scaleFactorX - > (int)(img.getWidth() * scaleFactorX)。 请参阅以下代码:

public class Scale extends JPanel{

  double scaleFactorX = 2.0;//TODO eventually change through constructor?
  double scaleFactorY = 2.0;

  public static void main(String []args){
    JFrame f = new JFrame();
    f.add(new Scale());
    f.setSize(750, 600);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  public void paintComponent(Graphics g){
    scaleImage((Graphics2D) g);//Call separate function
  }

  //Scales the image from "img.jpg"
  private void scaleImage(Graphics2D g) {        
    BufferedImage img = null;
    BufferedImage image = null;//is never used?!
    try {
      img = ImageIO.read(new File("img.jpg"));
    } catch (IOException e) {
      e.printStackTrace();
    }
    Graphics2D g2d = g;
    if(img != null) {
      g2d.drawImage(img, 0, 0, null);
      g2d.drawImage(img, 0, 0, (int)(img.getWidth() * scaleFactorX), (int)(img.getHeight() * scaleFactorY), null);
    }else{
      System.out.println("Image not found!");
    }
  }
}