2012-02-02 59 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