繁体   English   中英

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

[英]How to load all images from folder? (Processing, Java)

请帮我。 我想在不知道数据名称的情况下将多个图像加载到这个处理草图中。 这样我就可以随时将.png图像放入数据文件夹,程序会自动加载它们。我在一些论坛中进行了搜索,但除了一些我已经使用过但无法运行的代码外,没有找到任何东西适当地。

程序一启动,它就在image();处给我一个NullPointerException

这是控制台输出:

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(); output 这么大的数字? 我那里只有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!
}

当调用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==false的情况下, images将保持为空。

此行为可以解释您的NullPointerException您正在使用具有空值参数的image方法。

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

您没有在调用folder.list() 您正在调用folder.length() 此函数返回文件的大小,该大小对于文件夹而言是未定义的。 可以在Java API中找到更多信息。

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

将加载移动到setup()还将解决NullPointerException问题,因为当不按下鼠标时不再绘制空图像。

我有这个,它似乎工作(基于文件选择示例)

void fileSelected(File selection) {
if (selection == null) {
println("Window was closed or the user hit cancel.");
} else {
println("User selected " + selection.getAbsolutePath());
img = loadImage(selection.getAbsolutePath());
}
}
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());
      }
    }
 }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM