Как загрузить все изображения из папки? (Обработка, Java) - PullRequest
0 голосов
/ 07 мая 2018

пожалуйста, помогите мне. Я хочу загрузить несколько изображений в этот эскиз обработки, не зная названия данных. Так что я всегда могу просто поместить .png изображения в папку данных, и программа автоматически загрузит их. Я искал на некоторых форумах, но не нашел ничего, кроме некоторого кода, который уже использовал, но это не так беги правильно.

Как только программа запускается , она дает мне NullPointerException при image();

Это вывод консоли:

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 голосов
/ 07 мая 2018
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());
      }
    }
 }

С помощью этого кода вы можете получить пути к изображениям, а затем загрузить и нарисовать их.

0 голосов
/ 07 мая 2018

почему это folder.list (); вывести такое огромное количество? У меня там только 7 изображений ...

Вы не звоните folder.list(). Вы звоните folder.length(). Эта функция возвращает размер файла, который не определен для папок. Дополнительную информацию можно найти в API Java .

Кроме того, это не имеет прямого отношения к вашей проблеме, но вы не должны загружать изображения внутри функции draw(). Вместо этого загрузите их из функции setup(). В противном случае вы будете загружать изображение 60 раз в секунду, что приведет к возгоранию вашего компьютера.

Перемещение загрузки на setup() также исправит вашу проблему NullPointerException, поскольку вы больше не будете рисовать нулевые изображения, когда мышь не нажата.

0 голосов
/ 07 мая 2018

Что происходит в вашем коде, когда вызывается draw (), но mousePressed ложно?

Рассмотрим ваш код:

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 с нулевым параметром.

...