ProcessingのloadPixels()

ProcessingのloadPixels()は呼び出した時点のウィンドウのpixelsを保持します.

2015-12-11 23:25 追記しました

 

目的

loadPixels()を呼び出した後にしか扱えないpixelsは何の画素情報なのかを知りたい.

 

環境

 

テストコード

boolean flag = false; //ウィンドウがクリックされたかどうか
color c = color(0); //背景色

void setup(){
  size(256, 256);
  background(c);
}

void draw(){
  if( flag ){ //ウィンドウがクリックされたら
    background(c);
    println("background(c): " + hex(c)); //背景色の数値化
    println("get: " + hex(get(128, 128))); //背景色の数値化
    println("pix: " + hex(pixels[128*width+128])); //pixelsの数値化
    flag = false;
  }
}

void mouseClicked(){
  flag = true;
  loadPixels(); //pixelsを読み込む
  println("loadPixels(): " + hex(c)); //読み込んだ値
  
  //背景色を反転
  if( c == color(255) ) c = color(0);
  else c = color(255);
}

ウィンドウをクリックすると背景色が白,黒,白,……と反転します.
反転する前にloadPixels()を呼び出します.

クリックするたびに,

  1. loadPixels()
  2. 背景色を反転
  3. 背景色の値を表示(println("background(c): " + hex(c));
  4. get()によるウィンドウの画素情報を表示(println("get: " + hex(get(128, 128)));
  5. 4.のget()と同じ座標のpixels[]の画素情報を表示(println("pix: " + hex(pixels[128*width+128]));

を行います.

 

結果

loadPixels(): FF000000
background(c): FFFFFFFF
get: FFFFFFFF
pix: FF000000
loadPixels(): FFFFFFFF
background(c): FF000000
get: FF000000
pix: FFFFFFFF
loadPixels(): FF000000
background(c): FFFFFFFF
get: FFFFFFFF
pix: FF000000

loadPixels()をした時のウィンドウの画素情報がpixelsになっていることが分かりました.
任意のウィンドウの状態の画素情報を取得したままにできるので,フラグ管理によっては画像処理が捗りそうです.

 

追記

updatePixels()をしなければpixelsは反映されません. 従って,pixelsを書き換えてupdatePixels()をしていない場合,get()の値はpixelsと一致しません.