0

slideshow from selected directory

// reference
// http://niisi.hatenablog.jp/entry/2016/01/05/000000
// http://yoppa.org/proga10/1353.html

import codeanticode.syphon.*; // [lib]Syphon
SyphonServer server; // [lib]Syphon

// 設定
float transitionTime = ((125/*BPM*/ / 60) * 10) / 4; // 画像切替タイミング。(BPMの1拍) * frameRate()
int effectNumberDefault =  3; // effect数。1から

int timer = 0;
int randomImageNumber;
int effectNumber = int(random(1, effectNumberDefault));

void settings(){
  size(600, 600, P3D);
  PJOGL.profile = 1;
}

void setup(){
  server = new SyphonServer(this, "Processing Syphon"); // [lib]Syphon
  rectMode(CENTER);
  imageMode(CENTER);
  smooth();
  noStroke();
  frameRate(10);
  selectFolder("フォルダを選択","loadImages");
}

void draw(){
  server.sendScreen(); // [lib]Syphon
  background(0);
  drawImage();
  if(effectNumber == 1){
    effectSpikes();
    effectNumber = int(random(1, effectNumberDefault));
  } else if (effectNumber == 2) {
    effectRect();
    effectNumber = int(random(1, effectNumberDefault));
  } else if (effectNumber == 3){
    effectMosaic();
    effectNumber = int(random(1, effectNumberDefault));
  }
  timer ++;
}

int indexOfImage = 0;
ArrayList<PImage> originalImages = new ArrayList<PImage>();//読み込んだ画像の保存先
String[] extensions = {
    ".jpg",".gif",".tga",".png" //操作したいファイルの拡張子を登録
};

void loadImages(File selection){
    File[] files = selection.listFiles();
    randomImageNumber = files.length;
    for(int i = 0; i < files.length; i++){
        for(String extension : extensions){
            if(files[i].getPath().endsWith(extension)){//ファイル名の末尾が拡張子と一致するか
                PImage originalImage = loadImage(files[i].getAbsolutePath());//絶対パスで画像を読み込む
                originalImages.add(originalImage);
            }
        }
    }
}

// 画像表示
void drawImage(){
  int nextOfImage = int(random(0, randomImageNumber));
  if(!originalImages.isEmpty()){
    if(timer > transitionTime){  
      indexOfImage = (nextOfImage)%originalImages.size();
      println("表示画像番号(総画像数) : " + nextOfImage + "(" + randomImageNumber + ")");
      timer = 0;
    }
    originalImages.get(indexOfImage).resize(width, 0);
    image(originalImages.get(indexOfImage),width/2, height/2);
  }
}

// エフェクト
void effectSpikes(){
  float mosaicSize = random(5, 20);
  loadPixels();
  for(int j = 0; j < height; j+=mosaicSize) {  
    for(int i = 0; i < width; i+=mosaicSize) {  
      color c = pixels[j * width + i];
      fill(c, 127);
      pushMatrix();
      translate(i, j);
      rotate(brightness(c));
      rect(0, 0, brightness(c)/6.0, 2);
      popMatrix();
    }
  }
}

void effectRect(){
  loadPixels();
  int mosaicSize = int(random(4, 20));
  for(int j = 0; j < height; j+=mosaicSize) {  
    for(int i = 0; i < width; i+=mosaicSize) {  
      color c = pixels[j * width + i];
      fill(c);
      rect(i, j, mosaicSize, mosaicSize);
    }
  }
}

void effectMosaic(){
  loadPixels();
  float mosaicSize = random(4, 10);
  for(int j = 0; j < height; j+=mosaicSize) {  
    for(int i = 0; i < width; i+=mosaicSize) {  
      color c = pixels[j * width + i];
      fill(c, 127);
      ellipse(i, j, brightness(c)/6.0, brightness(c)/6.0);
    }
  }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です