ProcessingのloadPixels()
ProcessingのloadPixels()は呼び出した時点のウィンドウのpixelsを保持します.
2015-12-11 23:25 追記しました
目的
loadPixels()を呼び出した後にしか扱えないpixelsは何の画素情報なのかを知りたい.
環境
- Windows 8.1
- Processing 3.0.1
テストコード
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()を呼び出します.
クリックするたびに,
- loadPixels()
- 背景色を反転
- 背景色の値を表示(
println("background(c): " + hex(c));
) - get()によるウィンドウの画素情報を表示(
println("get: " + hex(get(128, 128)));
) - 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と一致しません.