有人对这段代码可能出什么问题有任何建议吗?我正在尝试将图像图块加载到一个大数组中,然后显示它们。稍后,我将洗牌。在底部附近可以看到我遇到的问题。我有一个for循环,应该将i的值插入输出数组,并在该索引值处显示相关图像。相反,我得到一个空指针异常。如果我将字母i替换为整数,则效果很好。如果我将数据传递给数组,可能会阻止进程传递该值吗?有什么想法吗?谢谢。
int tileSize = 100;
PImage out; PImage sample;
PImage img;
PImage img2;
String[] imageNames = {"arctic_fox.jpg", "bbridge_in_the_am.jpg", "Kali2.jpg"};
PImage[] images = new PImage[imageNames.length];
//PImage[] output = new PImage[((1440/tileSize)*imageNames.length)*(900/tileSize)];
PImage[] output = new PImage[2000];
int tintScale = 200;
void setup() {
fullScreen();
for (int i=0; i < imageNames.length; i++) {
String imageName = imageNames[i];
images[i] = loadImage(imageName);
}
out = createImage(width, height, RGB);
noLoop();
println("test");
}
void draw() {
background(0);
println(width, height);
println(output.length);
int counter=0;
for (int i = 0; i < imageNames.length; i++) {
img = loadImage(imageNames[i]);
img.resize(0,900);
for (int y=0; y<img.height; y+=tileSize) {
for (int x=0; x<img.width; x+=tileSize/3) {
sample = img.get(x, y, tileSize, tileSize);
output[counter] = sample;
tint(255, tintScale);
counter++;
//println(counter);
//image(out, random(0, width-img_x), random(0, height-img_y));
}
//image(output[i],30,30);
}
}
for (int i=0;i<output.length;i++){
image(output[30],i*tileSize,i*tileSize);
}
//for (int y=0; y<out.height; y+=tileSize) {
// for (int x=0; x<out.width; x+=tileSize) {
// i = 800;
// //tint(255, tintScale);
// image(output[i], x, y);
// }
//}
}
答案 0 :(得分:1)
希望您能解决它,但这是问题所在:
PImage[] output = new PImage[2000];
您要使用2000个空值初始化数组,然后输入少于300个图块。这就是为什么会出现空指针错误的原因。您必须在初始化数组之前计算出数组的大小。也许更好,请使用arraylist:
ArrayList<PImage> output = new ArrayList<PImage>();
//to add a tile:
output.add(sample);
//to draw all tile:
for(int i = 0; i< output.size();i++)
{
image(output[i],i*tileSize,i*tileSize);
}
您可以了解有关数组列表here
的更多信息最后说明:正如Kevin Workman所说,loadImage()和这种划分为图块的过程不属于'void draw()'。它应该位于setup()或从setup()调用的单独函数中。