Java将图像转换为灰度,图像不会显示

时间:2014-02-20 10:32:41

标签: java image-processing

我正在尝试将图像转换为灰度并将其输出为另一个图像文件,但是当我尝试运行代码时,没有任何显示,但没有错误消息。我不确定是什么问题。帮助将不胜感激。谢谢。

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class GrayScale {
   BufferedImage  image;
   int width;
   int height;
   public GrayScale() {
      try {
         File input = new File("src/image.jpg");
         image = ImageIO.read(input);
         width = image.getWidth();
         height = image.getHeight();
         for(int i=0; i<height; i++){
            for(int j=0; j<width; j++){
               Color c = new Color(image.getRGB(j, i));
               int red = (int)(c.getRed() * 0.2126);
               int green = (int)(c.getGreen() * 0.7152);
               int blue = (int)(c.getBlue() *0.0722);
               Color newColor = new Color(red+green+blue,
               red+green+blue,red+green+blue);
               image.setRGB(j,i,newColor.getRGB());
               }
          }
         File output = new File("grayscale.jpg");
         ImageIO.write(image, "jpg", output);
      } catch (Exception e) {}
   }
   static public void main(String args[]) throws Exception 
   {
      GrayScale obj = new GrayScale();
   }
}

3 个答案:

答案 0 :(得分:0)

代码基本上正常工作。尝试插入

try 
{
    File input = new File("src/image.jpg");
    System.out.println("File exists? "+input.exists()); // THIS LINE
    ....
}
catch (Exception e) 
{
    e.printStackTrace(); // AND THIS LINE
}

从不在这种情况下使用空块捕获异常!


编辑用于显示图片:

private static void showImage(final Image image)
{
    SwingUtilities.invokeLater(new Runnable()
    {
        @Override
        public void run()
        {
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.getContentPane().add(new JLabel(new ImageIcon(image)));
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
    });
}

答案 1 :(得分:0)

代码有效。但是,新创建的图像grayscale.jpg不是在原始图像所在的src文件夹中创建的(可能您希望在那里创建它),但在执行时在工作目录中。所以例如在你的项目文件夹中。

答案 2 :(得分:0)

您只需在编写输出图像后编写此代码。

System.out.println(output.getAbsolutePath());

这将在console上打印输出文件的绝对路径。