2012-02-02 76 views
1

是否可以將圖像名稱數組提供到將圖像轉換爲灰度的代碼中?Java - 使用文件名數組將圖像轉換爲灰度

我能夠通過使用此代碼將圖像轉換成灰度:

public static void makeGrey() { 
try{ 
//Read in original image. 
BufferedImage image = ImageIO.read(new File("images\\012.jpg")); 

//Obtain width and height of image. 
double image_width = image.getWidth(); 
double image_height = image.getHeight(); 

BufferedImage bimg = null; 
BufferedImage img = image; 

//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 greyscale (output) image. 
String temp = "_inverted"; 
File fi = new File("images\\" + temp + ".jpg"); 
ImageIO.write(bimg, "jpg", fi); 
} 
catch (Exception e){ 
       System.out.println(e); 
} 
} 

然而,這個代碼僅適用於單個文件的時間和我想知道如何去得到它處理位於images目錄中的所有文件?

我已經創建了一個數組,通過images目錄並存儲所有文件的名稱,我想知道如何將這些文件名傳入我的makeGrey()方法?

static File dir = new File("images"); 
    static File imgList[] = dir.listFiles(); 

    public static void listFiles(String imageName) { 

     if(dir.isDirectory()){ 
      for(File img : imgList){ 
       if(img.isFile()){ 
       MakeGrey.makeGrey(); 
      } 
     } 
    } 

謝謝。

回答

2

makeGray()方法應該是這樣的:

public static void makeGrey(File image) { 
try{ 
    //Read in original image. 
    BufferedImage inputImage = ImageIO.read(image); 
    ... 
    ... 
    //Save new greyscale (output) image. (Or you'll rewrite same image all the time...) 
    File fi = new File("images\\inverted_" + image.getName() 
    ... 
    ... 

和代碼應該這樣稱呼它的另一部分:

static File dir = new File("images"); 
static File imgList[] = dir.listFiles(); 

public static void listFiles(String imageName) { 

    if(dir.isDirectory()){ 
     for(File img : imgList){ 
      if(img.isFile()){ 
      MakeGrey.makeGrey(img); 
     } 
    } 
} 
+0

謝謝你 - 我做這些更改,但我提醒「image」變量是重複的;然後我改變了'BufferedImage image = ImageIO.read(image);'到'BufferedImage inputImage = ImageIO.read(image);'現在,當我編譯並運行代碼時,沒有任何反應......任何建議? – MusTheDataGuy 2012-02-02 11:29:05

+0

謝謝,但我明白了 - 問題出在方法聲明上:'public static void listFiles(String imageName)'不需要輸入,所以它應該讀取'public static void listFiles()'。再一次感謝你。 – MusTheDataGuy 2012-02-02 11:49:38

+1

您還可以使用DirectoryScanner按擴展名列出圖像文件:http://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string-in-java – Kris 2012-02-02 12:03:01