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
パスに問題があるようです。画像を読みませんでした。
ここにウサギの写真がありますか?現在のコードでは、イメージは生成されたプログラムと同じディレクトリにある必要があります。
天蓬老师2017-04-24 09:15:34
@オリエンタルスターマーク@捏造信念、
1枚目の写真はEclipseでのフォルダーの状況、2枚目はIDEAでのフォルダーの状況です。
ただし、IDEA では、これを BufferedImage image = ImageIO.read(this.getClass().getResource((path))); に変更すると、コンパイルはパスします。クラスパスまたはパスの問題だと思いますが、実際は問題ありません。具体的ではありません。
------更新------
問題は解決されました。 その理由は、IDEA では相対パスがデフォルトでプロジェクト パスまたはモジュール パスになるためです。画像フォルダーと .idea フォルダーと同じ階層のディレクトリ、またはそれより深いフォルダーでは、ファイルの作成またはパスの取得時に、画像フォルダーが配置されている上位ディレクトリが反映される必要があります。ファイルを読み取れなくなる状況が長くなります。