繁体   English   中英

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

[英]Java converting image to grayscale, image won't show up

我正在尝试将图像转换为灰度并将其输出为另一个图像文件,但是当我尝试运行代码时,什么都没有出现,但是没有错误消息。 我不知道怎么了。 帮助将不胜感激。 谢谢。

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();
   }
}

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

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);
        }
    });
}

该代码有效。 但是,新创建的图像grayscale.jpg不会在原始图像所在的src文件夹中创建(并且可能希望在此处创建),而在执行时会在工作目录中创建。 因此,例如在您的项目文件夹中。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM