public class ToGray {
/*二值化*/
public void binaryImage() throws IOException {
File file = new File("image/rabbit.jpeg");
BufferedImage image = ImageIO.read(file);
int width = image.getWidth();
int height = image.getHeight();
BufferedImage grayImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);// 重点,技巧在这个参数BufferedImage.TYPE_BYTE_BINARY
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int rgb = image.getRGB(i, j);
grayImage.setRGB(i, j, rgb);
}
}
File newFile = new File("image/binary_rabbit");
ImageIO.write(grayImage, "jpg", newFile);
}
/*灰度图片*/
public void grayImage() throws IOException {
File file = new File("image/rabbit.jpeg");
BufferedImage image = ImageIO.read(file);
int width = image.getWidth();
int height = image.getHeight();
BufferedImage grayImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);// 重点,技巧在这个参数BufferedImage.TYPE_BYTE_GRAY
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int rgb = image.getRGB(i, j);
grayImage.setRGB(i, j, rgb);
}
}
File newFile = new File("image/ggray_rabbit.jpg");
ImageIO.write(grayImage, "jpg", newFile);
}
public static void main(String[] args) throws IOException {
ToGray demo = new ToGray();
demo.binaryImage();
demo.grayImage();
System.out.println("hello image!");
}
}
在Eclipse之下可以正常通过,但是在IDEA下面会出现无法读取的错误,具体代码如下:
Exception in thread "main" javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at basicoperation.ToGray.grayImage(ToGray.java:70)
at basicoperation.ToGray.main(ToGray.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Process finished with exit code 1
请问这是怎么回事啊?
사진을 안읽어봐서 경로에 문제가 있는 것 같네요.
여기 토끼 사진 있나요? 현재 코드에서 이미지는 생성된 프로그램과 동일한 디렉터리에 있어야 합니다.
아이디어의 상대 경로는 출력 루트 디렉터리가 아닌 프로젝트 루트 디렉터리를 기준으로 합니다.
파일을 읽지 못했습니다. 이미지 파일이 패키지 디렉터리에 없습니다. Idea는 out 또는 build 디렉터리에 있어야 합니다.
@오리엔탈스타마크 @조작된 신념 ,
첫 번째 사진은 Eclipse에서의 폴더 상황, 두 번째 사진은 IDEA에서의 폴더 상황입니다.
하지만 IDEA에서는 BufferedImage image = ImageIO.read(this.getClass().getResource((path))); 로 변경하면 컴파일이 통과될 것입니다. 클래스 경로 문제이거나 경로 문제입니다. 구체적인 내용은 명확하지 않습니다.
------업데이트------
문제가 해결되었습니다. 이유는 IDEA에서 상대 경로가 기본적으로 프로젝트 경로 또는 모듈 경로이므로 이미지 폴더를 .idea 폴더와 동일한 수준 디렉터리에 넣거나 더 깊은 폴더에 넣지만 파일을 만들거나 가져올 때 이미지 폴더에 넣어야 하는 경우 해당 경로가 위치한 상위 디렉터리를 반영하므로 파일을 읽을 수 없는 상황이 발생하지 않습니다.