如何从文件夹加载所有图像? (处理中,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();
输出的数字这么大?我那里只有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
方法。
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());
}
}
}
使用此代码,您可以检索图像路径,然后加载并绘制它们。
why is the folder.list(); output such a huge number? I only have 7 images in there...
您没有打电话给 folder.list()
。您正在呼叫 folder.length()
。此函数 returns 文件的大小,对于文件夹是未定义的。可以在 the 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());
}
}
请帮帮我。我想在不知道数据名称的情况下将多个图像加载到这个处理草图中。这样我就可以随时将 .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();
输出的数字这么大?我那里只有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
方法。
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());
}
}
}
使用此代码,您可以检索图像路径,然后加载并绘制它们。
why is the folder.list(); output such a huge number? I only have 7 images in there...
您没有打电话给 folder.list()
。您正在呼叫 folder.length()
。此函数 returns 文件的大小,对于文件夹是未定义的。可以在 the 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());
}
}