開発中のコードを実行する際に問題が発生しています。Java - ディレクトリ内の新しく生成されたファイルに対して機能を実行する
それは以下のような動作するはずです:
For all images within directory (x)
Read image
Convert to greyscale
Save to new directory (y)
For all images within new directory (y)
Read image
Convert to binary
Save to new directory (z)
End for
End for
を、私は現時点で300枚の画像を持っており、これまでのすべてのイメージが正常にグレースケールに変換し、新しいディレクトリに保存されます。しかし、バイナリ変換では、新しいディレクトリ内の画像を検出しないように見える問題が発生し、のコードが実行される前に[画像]ファイルがすでにディレクトリ内に存在する場合にのみ動作するように見えます。
All files in directory (x) are read
All files in directory (x) are converted to greyscale and saved to new directory (y)
All files in directory (y) are read
It appears that directory (y) is empty (but, in fact, contains 300 greyscale images)
Program ends
をしかし、私はプログラムをもう一度実行すると、いずれかの300枚のグレースケール画像または単一イメージで、directory (y)
で画像が正常に変換されています
したがって、次は実際に何が起こるかでありますバイナリに変換する。新しく変換されたグレースケール画像がオンザフライで作成されている間ではなく、ディレクトリに既存の画像がある場合にのみ動作するように見えます。
次のようにメソッドが呼び出される:
public static void processFiles(){
processGreyscale();
System.out.println("Greyscale image conversion complete.\n");
processBinary();
System.out.println("Binary image conversion complete.\n");
}
私もこの方法の間の時間遅延は、新しく作成された[グレースケール]の画像を検出するために自分自身を更新するためのシステムを可能にするために、呼び出し追加しようとしています(directory (y)
に)、これは、任意の違いを確認しないと画像のみ認識され、2つの条件が満たされたときにバイナリに変換される:
directory (y)
中に存在するイメージがあります- またはのコードが実行されます。最初にのコードが実行される前に、ディレクトリ内に[画像]ファイルがある場合は、コードが実行されます。
新しく生成されたグレースケール画像が作成され、バイナリに変換されるとすぐに検出できるようにする方法はありますか?
多くのありがとうございます。
UPDATE:次のようにグレースケールに変換するための私のコードは次のとおりです。
try{
//Read in original image.
BufferedImage inputImg = ImageIO.read(image);
//Obtain width and height of image.
double image_width = inputImg.getWidth();
double image_height = inputImg.getHeight();
//New images to draw to.
BufferedImage bimg = null;
BufferedImage img = inputImg;
//Draw the new image.
bimg = new BufferedImage((int)image_width, (int)image_height, BufferedImage.TYPE_BYTE_GRAY);
Graphics2D gg = bimg.createGraphics();
gg.drawImage(img, 0, 0, img.getWidth(null), img.getHeight(null), null);
//Save new binary (output) image.
String fileName = "greyscale_" + image.getName();
File file = new File("test_images\\Greyscale\\" + fileName);
ImageIO.write(bimg, "jpg", file);
}
catch (Exception e){
System.out.println(e);
}
はどのようflush()
および/またはclose()
機能を追加するために、これを修正するのでしょうか?
UPDATE:java.lang.NullPointerException (BINARY) test_images\Greyscale\desktop.ini: processed successfully. Binary image conversion complete.
それは言うべき一方:(BINARY) images\298.jpg: processed successfully.
を私はまた、成功した各変換後に出力し、binary
方法から、私が持っている唯一のフィードバックがある行を作成しました。
これには何らかの理由がありますか? desktop.ini
ファイルが読み込まれて処理される理由を理解できませんか?
...ファイルが書き込まれて閉じられた場合、すぐにJavaからアクセスできます。だから、コードに何か問題がある可能性が高いです。私たちは見ることができません。 –
どのようにファイルを検出していますか?新しいファイルを作成するときに新しいファイルを適切に閉じていることを確認してください。 – DNA
元の投稿に関連コードを追加しました。 – MusTheDataGuy