Rumah > Soal Jawab > teks badan
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
请问这是怎么回事啊?
阿神2017-04-24 09:15:34
Nampaknya ada masalah dengan laluan saya tidak membaca gambar itu.
Ada gambar arnab di sini? Dalam kod semasa, imej harus berada dalam direktori yang sama dengan program yang dihasilkan.
PHPz2017-04-24 09:15:34
Laluan relatif idea adalah relatif kepada direktori akar projek, bukan relatif kepada direktori akar output.
天蓬老师2017-04-24 09:15:34
@tanda bintang oriental @kepercayaan rekaan ,
Gambar pertama ialah situasi folder dalam Eclipse, dan gambar kedua ialah situasi folder dalam IDEA.
Tetapi dalam IDEA, tukarkannya kepada imej BufferedImage = ImageIO.read(this.getClass().getResource((path))); dan saya rasa ia adalah masalah classpath atau masalah laluan, tetapi Spesifiknya tidak jelas.
------Kemas kini------
Masalah telah diselesaikan, Sebabnya di bawah IDEA, laluan relatif lalai kepada Laluan projek atau Laluan Modul, jadi jika anda sama ada meletakkan folder imej dalam direktori tahap yang sama dengan folder .idea, atau meletakkannya dalam folder yang lebih dalam, tetapi anda perlu meletakkannya dalam folder imej semasa membuat fail atau mendapatkan laluan. Direktori peringkat tinggi di mana ia terletak dicerminkan, supaya tiada situasi di mana fail tidak boleh dibaca.