tande lab.

[Processing] フォルダ内の画像をスライドショーする

data フォルダ内にある数不明の画像ファイルを読み込んで、
白フェードでループするスライドショーを表示させる方法です。

画像は “img_0.jpg, img_1.jpg, …” といったような数字が0から始まる名称で
data フォルダ内に入れておく必要があります。

例えば “slideshowSample” というプロジェクト名称にした場合、
以下のようなフォルダ構成になります。

slideshowSample
  |-- slideshowSample.pde
  |-- data
    |-- img_0.jpg
    |-- img_1.jpg
    |-- img_2.jpg
    |--   ...

以下、サンプルコード。
もっとスマートに書けるんだろうけど、、とりあえず。

//初期設定
PImage[] img = new PImage[999];  // 画像を格納する配列。ひとまず999個分用意。
int imgID = 0;  // 画像カウント変数。
int imgMaxID;  // 読みこんだ画像が何枚あったか覚えておく変数。
String imgMax = "NO";  // 読み込める画像がまだあるか判別するフラグ変数。
int ftpNum = 12;  // フレームレート数 ※スライドショー速度を早くしたいときは数を増やす。
int fadeColor = 255;  // フェード色 ※0(黒)~255(白)で指定。
int fadeAlpha = -100;  // フェード色の透過度。少しずつ数を増やすことで透過度を増やし次画像を少しずつ表示するように見せる。
int fadeAlphaDefault = fadeAlpha;  // fadeAlphaの値のリセット用変数。

// setup関数 ※最初の1回だけ実行される。
void setup()
{    

  //先に画像を読み込んでおく
  int i = 0;
  while(imgMax == "NO"){  
     String imgName = "img_"+str(i)+".jpg";
     img[i] =loadImage(imgName);
     
     // 画像を読み込もうとして null が返ってきたら画像読み込み終了なのでフラグを YES に変更して、画像枚数をiに記録。
     if(img[i]==null){
        imgMax = "YES";
        imgMaxID = i;

     // そうじゃない場合はまだ画像があるので読み込む。
     }else{
        i++;
     }
  }
  
  size(480,360);  // 画面サイズを設定
  colorMode(RGB,256);  // 色モードを RGB, 256色に設定
  background(255);  // 背景色を設定
  noStroke();  // 描画するオブジェクトの線をナシに設定
  frameRate(ftpNum);  // フレームレートを設定
  
  // 1枚目の画像を表示
  image(img[imgID],0,0,img[imgID].width,img[imgID].height);
  imgID++;

}

// draw関数 ※毎フレームで実行される。
void draw()
{

  if(imgID < imgMaxID){
    
    // フェード色が透過255になるまで少しずつ数字を足して fadeout関数を呼び出す
    if(fadeAlpha < 255){
      fadeout(fadeColor, fadeAlpha);
      fadeAlpha += 20;
    
    // もし透過が255より大きくなったら画像を表示
    }else if(255 < fadeAlpha){
      
      image(img[imgID],0,0,img[imgID].width,img[imgID].height);
      imgID++;
      fadeAlpha = fadeAlphaDefault;
    
    }
  
  // 最後の画像まできたら、最初の画像に戻る
  }else if(imgID == imgMaxID){
    
    imgID = 0;
    
  }
  
  // デバッグ用
  // println(imgID);
  
}

// fadeout関数 ※指定した色とアルファ値で塗りつぶされた四角を描画する関数
void fadeout(int fadeColor, int fadeAlpha){
  fill(fadeColor, fadeAlpha);
  rect(0,0,width,height);
}