Java-将文件[]项转换为BuffereImage

Java-将文件[]项转换为BuffereImage,java,file,image-processing,bufferedimage,Java,File,Image Processing,Bufferedimage,我有一个300个图像文件名的数组,希望将每个文件名转换成一个新的BuffereImage 创建了300个图像名称的数组,因此: //Default image directory (to convert to greyscale). static File dir = new File("images"); //Array of original image filenames. static File imgList[] = dir.listFiles(); public static vo

我有一个300个图像文件名的数组,希望将每个文件名转换成一个新的BuffereImage

创建了300个图像名称的数组,因此:

//Default image directory (to convert to greyscale).
static File dir = new File("images");
//Array of original image filenames.
static File imgList[] = dir.listFiles();

public static void processGreyscale(){
    if(dir.isDirectory()){
        for(File img : imgList){
            if(img.isFile()){
                //functions are carried out here.
            }
            else{
                //functions are carried out here.
            }
        }
    }
}
是否有一种方法可以将所有
imgList[x]
项转换为
buffereImage
项,方法如下:

File file = new File(new BufferedImage(imgList[0-300]));

try {
    image = ImageIO.read(file);
} catch (IOException e) {
    ...
}

我希望下面的解决方案能对您有所帮助

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
public class BufferedImageBuilder {

private static final int DEFAULT_IMAGE_TYPE = BufferedImage.TYPE_INT_RGB;

public BufferedImage bufferImage(Image image) {
    return bufferImage(image, DEFAULT_IMAGE_TYPE);
}

public BufferedImage bufferImage(Image image, int type) {
    BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
    Graphics2D g = bufferedImage.createGraphics();
    g.drawImage(image, null, null);
    waitForImage(bufferedImage);
    return bufferedImage;
}

private void waitForImage(BufferedImage bufferedImage) {
    final ImageLoadStatus imageLoadStatus = new ImageLoadStatus();
    bufferedImage.getHeight(new ImageObserver() {
        public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
            if (infoflags == ALLBITS) {
                imageLoadStatus.heightDone = true;
                return true;
            }
            return false;
        }
    });
    bufferedImage.getWidth(new ImageObserver() {
        public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
            if (infoflags == ALLBITS) {
                imageLoadStatus.widthDone = true;
                return true;
            }
            return false;
        }
    });
    while (!imageLoadStatus.widthDone && !imageLoadStatus.heightDone) {
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {

        }
    }
}

class ImageLoadStatus {

    public boolean widthDone = false;
    public boolean heightDone = false;
}

}

第二位代码没有意义,无法编译。在文件数组上循环,用ImageIO加载每个文件-每次加载都会返回一个图像…请参阅上面的。第二部分不会编译,因为它是我希望它看起来如何的理论代码。