我能够导入JPG
文件,但是每次我运行程序以输出图像时,都会出现此异常:
Exception in thread "main" java.lang.NullPointerException
at InvertImage.main(InvertImage.java:24)
不知道为什么,这是我的代码:
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
public class InvertImage{
public static void main(String args[])throws IOException{
BufferedImage img = null;
File imgFile = null;
try {
imgFile = new File("Cake.jpg");
img = ImageIO.read(imgFile);
} catch(IOException e){
System.out.println(e);
}
int width = img.getWidth();
int height = img.getHeight();
for(int y = 0; y < height; y++){
for(int x = 0; x < width; x++){
int pixel = img.getRGB(x, y);
int a = (pixel >> 24) & 0xff;
int r = (pixel >> 16) & 0xff;
int g = (pixel >> 8) & 0xff;
int b = pixel & 0xff;
r = 255 - r;
g = 255 - g;
b = 255 - b;
//set new RGB values
pixel = (a << 24) | ( r << 16) | ( g << 8) | b;
img.setRGB(x, y, pixel);
}
}
try{
imgFile = new File("Cake_invert.jpg")
ImageIO.write(img, "jpg", imgFile);
}catch(IOException e){
System.out.println(e);
}
}
}
不知道我在这里缺少什么,只需要在程序完成运行后输出jpg文件即可。
答案 0 :(得分:1)
您将收到NullPointerException。这意味着您正在尝试对empty
对象进行操作。它甚至告诉您错误发生在类InvertImage
和行24
-(InvertImage.java:24)
中。
可能找不到图像Cake.jpg
,当您从Eclipse启动应用程序并将文件放置在错误的文件夹中时,通常会发生这种情况。这就是为什么在不确定放置文件的位置时提供完整路径到您要打开的文件的一种好习惯。如果要保持相对路径,请将图像放入与src
和bin
文件夹相同级别的项目主文件夹中。
您的代码对我有用。我唯一更改的是提供Cake.jpg
的完整路径,例如C:\\Cake.jpg
。 Cake_invert.jpg
同样适用,否则它将保存在项目的主文件夹中。