如何从文件夹加载所有图像? (处理,Java)

时间:2018-05-07 15:41:57

标签: java image processing loadimage

请帮帮我。我想在不知道数据名的情况下将多个图像加载到此处理草图中。因此,我总是可以将.png图像放入数据文件夹中,程序会自动加载它们。我在某些论坛中搜索过但除了某些代码之外没有找到任何内容。已经使用但它没有正常运行。

一旦程序启动,它就会在NullPointerException

给我一​​个image();

这是consoleoutput:

4096
D:\Program Files\processing-3.3.7\PROJECTS\Blendertutorial\data
[0] "1.png"
[1] "2.png"
[2] "3.png"
[3] "4.png"
[4] "5.png"
[5] "6.png"
[6] "7.png"

同样为什么folder.list();输出如此巨大?我只有7张图片......

import java.io.File;
String fileExtension = ".png";

java.io.File folder = new java.io.File(sketchPath("/PROJECTS/Blendertutorial/data"));
java.io.FilenameFilter extfilter = new java.io.FilenameFilter() {
  boolean accept(File dir, String name) {
    return name.toLowerCase().endsWith(fileExtension);
  }
};

PImage images;
String[] imageNames;
int i=0;
long folderInhalt = folder.length();

void setup(){
  size(500,500);
  println(folder.length());
  println(folder);
  printArray(imageNames);

  imageNames = folder.list(extfilter);
}

void draw(){
  if(mousePressed){
    images = loadImage(folder+"/"+imageNames[0]);
    println(images);
    println(imageNames[i]);
    delay(200);
    i++;
  }
  image(images,0,0);      //NULL POINTER EXCEPTION!
}

3 个答案:

答案 0 :(得分:1)

调用draw()时代码会发生什么,但mousePressed为false?

考虑你的代码:

PImage images;
...
...
...

void draw(){
  if(mousePressed){
    images = loadImage(folder+"/"+imageNames[0]);
    println(images);
    println(imageNames[i]);
    delay(200);
    i++;
  }
  image(images,0,0);      //NULL POINTER EXCEPTION!
}

您已声明images但尚未实例化。

如果是mousePressed==falseimages将保持为空。

此行为可以解释您的NullPointerException - 您正在使用null值参数调用image方法。

答案 1 :(得分:1)

  

为什么是folder.list();输出如此庞大的数字?我只有7张图片......

你没有打电话给folder.list()。您正在致电folder.length()。此函数返回文件的大小,文件夹未定义。更多信息可以在the Java API找到。

此外,这与您的问题没有直接关系,但您不应该像这样在draw()函数中加载图像。从setup()函数加载它们。否则,您每秒会加载60次图像,这会导致计算机着火。

将您的加载移至setup()也会解决您的NullPointerException问题,因为当您未按下鼠标时,您将不再绘制空图像。

答案 2 :(得分:-1)

public void readImagesPath(String dir){
   File folder = new File(dir);
   File[] listOfFiles = folder.listFiles();

    for (File file : listOfFiles) {
      if (file.isFile()) {
         System.out.println(file.getName());
      }
    }
 }

使用此代码,您可以检索图像路径,然后可以加载和绘制它们。