我正在尝试将图像转换为灰度并将其输出为另一个图像文件,但是当我尝试运行代码时,没有任何显示,但没有错误消息。我不确定是什么问题。帮助将不胜感激。谢谢。
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();
}
}
答案 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
上打印输出文件的绝对路径。