如何从文件夹中加载所有图像?(处理,Java)
请帮帮我。我想在不知道数据名的情况下将多个图像加载到此处理草图中。这样我就可以把如何从文件夹中加载所有图像?(处理,Java),java,image,processing,loadimage,Java,Image,Processing,Loadimage,请帮帮我。我想在不知道数据名的情况下将多个图像加载到此处理草图中。这样我就可以把.png图像放进数据文件夹,程序会自动加载它们。我在一些论坛上搜索过,但除了一些我已经使用过但运行不正常的代码外,什么也没找到 程序启动后,会在image()处给我一个NullPointerException 这是控制台输出: 4096 D:\Program Files\processing-3.3.7\PROJECTS\Blendertutorial\data [0] "1.png" [1] "2.png" [2]
.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"
还有为什么是文件夹.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!
}
调用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!
}
您已经声明了图像
,但尚未实例化它
如果mousePressed==false
,图像将保持为空
此行为可以解释您的NullPointerException
-您正在使用空值参数调用image
方法
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());
}
}
}
使用此代码,您可以检索图像路径,然后加载并绘制它们
为什么文件夹是.list();产量这么大?我只有7张照片在那里
您没有调用文件夹.list()
。您正在调用folder.length()
。此函数返回文件的大小,该大小对于文件夹是未定义的。更多信息可在中找到
另外,这与您的问题没有直接关系,但是您不应该像这样在draw()
函数中加载图像。改为从setup()
函数加载它们。否则,您将每秒加载图像60次,这将导致您的计算机着火
将加载移动到
setup()
也将解决NullPointerException
问题,因为当鼠标未按下时,您将不再绘制空图像。与您的问题没有直接关系,但您不应在draw()
函数中加载图像。改为从setup()
函数加载它们。否则,您将每秒加载图像60次,这将导致您的计算机着火。谢谢。我只是在这个例子中这样做,因为我调用delay(),因为我不希望它在需要的时候“预加载”bu load。问题是鼠标会被按下一帧以上,所以你不断地重新加载图像。至少你应该缓存你的图像,这样你就不会多次重新加载它们,但最有可能的是你应该在安装过程中加载它们。嘿,但是我只能将加载放入setup(),其余的仍然必须放入draw(),因为我想更新它mouseclick@OliverTworkowski那很好。您应该将加载放入setup()
中,然后在draw()中单击鼠标“代码”
。