2016-11-03 3 views
0

私は2つの別々のJavaクラスを作成しました。 1つはカラー画像をグレースケールに、もう1つは画像をファイルに保存するためのものです。javaを使用して複数のカラー画像をグレースケールに変換してファイルに保存する

GrayScaleConverter

import java.io.*; 

public class GrayScaleConverter { 
    //I started with the image I wanted (inImage) 
    public ImageResource makeGray(ImageResource inImage) { 
     //I made a blank image of the same size 
     ImageResource outImage = new ImageResource(inImage.getWidth(), inImage.getHeight()); 
     //for each pixel in outImage 
     for (Pixel pixel: outImage.pixels()) { 
      //look at the corresponding pixel in inImage 
      Pixel inPixel = inImage.getPixel(pixel.getX(), pixel.getY()); 
      //compute inPixel's red + inPixel's blue + inPixel's green 
      //divide that sum by 3 (call it average) 
      int average = (inPixel.getRed() + inPixel.getBlue() + inPixel.getGreen())/3; 
      //set pixel's red to average 
      pixel.setRed(average); 
      //set pixel's green to average 
      pixel.setGreen(average); 
      //set pixel's blue to average 
      pixel.setBlue(average); 
     } 
     //outImage is your answer 
     return outImage; 
    } 

    public void selectAndConvert() { 
     DirectoryResource dr = new DirectoryResource(); 
     for (File f : dr.selectedFiles()) { 
      ImageResource inImage = new ImageResource(f); 
      ImageResource gray = makeGray(inImage); 
      gray.draw(); 
     } 
    } 

    public void testGray() { 
     ImageResource ir = new ImageResource(); 
     ImageResource gray = makeGray(ir); 
     gray.draw(); 
    } 
} 

ImageSaver

import java.io.File; 

public class ImageSaver { 
    public void doSave() { 
     DirectoryResource dr = new DirectoryResource(); 
     for(File f : dr.selectedFiles()){ 
      ImageResource image = new ImageResource(f); 
      String fname = image.getFileName(); 
      String newName = "copy -" + fname; 
      image.setFileName(newName); 
      image.draw(); 
      image.save(); 
     } 
    } 
} 

私はそのようにこの2つのクラスからコードを組み合わせる方法を知っていただきたいと思います。これは、私はクラスのために書いたコードです複数のカラー画像を選択してグレースケールに変換し、新しいグレースケールコピーを別々のファイルに同時に保存することができます。

答えて

0

私はDirectoryResourceImageResource に精通していないですが、答えはこのようなものが考えられます。

次のようにクラスGrayScaleConverter方法selectAndConvert()を変更します。

public void selectAndConvert() { 
    DirectoryResource dr = new DirectoryResource(); 
    ImageSaver imageSaver = new ImageSaver(); 

    for (File f : dr.selectedFiles()) { 
     ImageResource inImage = new ImageResource(f); 
     ImageResource gray = makeGray(inImage); 
     gray.draw(); 
     gray.setFileName(inImage.getFileName()); 
     imageSaver.doSave(gray); 
    } 
} 

をそのメソッドdoSave()がパラメータを取るようImageSaverクラスを変更ImageResourceを保存して を保存し、forループを削除して、一度に1つの画像で作業してください:

public void doSave(ImageResource image) { 
    String newName = "copy -" + image.getFileName();//shortcut, no need for 2 string variables 
    image.setFileName(newName); 
    // not sure if a draw() needed again, as it was called in selectAndConvert() but i am not familiar with those Resource classes. 
    image.draw(); 
    image.save(); 
} 
+0

コードのこのセクションで行ったことを正確に説明してください。Imagesaver ImageSaver = new ImageSaver(); ?私は以前これが行われたことを見たことがないし、あなたがオブジェクトを作成し、クラスImageSaverと同じ名前を付けたように見える。また、継承を使用して同じ結果を達成することもできます。例えば、publicクラスGrayScaleConverterはImageSaverを拡張し、次にdoSave()メソッドを呼び出します。私はgray.doSave()を使ってみましたが、シンボルを見つけることができないというエラーメッセージが出ました。 –

+0

@ J.Marsはいオブジェクトを作成しましたが、名前は同じではありません。オブジェクト名の最初の文字は小文字(小文字)です.Javaは大文字と小文字を区別しています。 'GrayScaleConverter'が' ImageSaver'を拡張している場合、この行を削除して 'doSave()'を直接呼び出してください。 – Yazan

関連する問題