在处理中显示随机图像

show random image on Processing

我对处理和编程真的很菜鸟,我不知道如何随机显示我的图像。

我正在使用 PImage 名称 img0、img1、img2 加载设置中的图像,然后

image("img" + random(3), 0, 0); 

但它不起作用,因为处理等待 PImage 参数,而字符串加数字不是。

而且我确信肯定有比以下更好的方法:

int randomNumber = random(3);

if(randomNumber == 0 ){ 
   image(img0,0,0);
} 
if(randomNumber == 1 ){ 
    image(img1,0,0);
} 
if(randomNumber == 2 ){
    image(img2,0,0);
} 

但是我还没有找到。

有什么想法吗? 谢谢!

您可以使用 HashMap 创建从 String 键到 PImage 值的映射。像这样:

HashMap<String, PImage> imageMap = new HashMap<String, PImage>();
imageMap.put("image1", image1);
imageMap.put("image2", image2);

然后要从 String 键获得 PImage,您需要调用 get() 函数:

PImage image1 = imageMap.get("image1");

您可以在 the reference 中找到更多信息。

顺便说一下,这一行不会编译:

int randomNumber = random(3);

random()函数returns一个float值。您不能将 float 值存储在 int 变量中。您必须使用 int() 函数对其进行转换:

int randomNumber = int(random(3));

如果您仍然不能让它工作,请 post 一个 MCVE 来演示问题。祝你好运。

除了 Kevin 的出色回答之外,您还可以使用数组来存储加载的 PImage。

这是一个粗略的例子(当然你需要调整图片的路径):

// total number of images
int numImages = 3;
// an array of images
PImage[] images = new PImage[num];

int randomNumber;

void setup(){
    //TODO correct sketch size
    size(300,300);
    // initialize images array (loading each one)
    for(int i = 0 ; i < numImages; i++){
        // TODO correct path to images
        images[i] = loadImage("img"+(i)+".png");
    }
}
void draw(){
    background(0);
    //render the most recently selected random index image
    image(images[randomNumber]);
    //instructions
    text("click to randomize",10,15);
}
// change the random number on click (draw() would look chaotic/hard to debug)
void mousePressed(){
    // pick a random number and cast the floating point value return to integer needed as in images array index
    randomNumber = (int)random(numImages);
}