実際に、この色判定ではスクリーンセーバーにアドビニュースリーダー機能を追加するかどうかの選択を行いました。ステージにいる4人に赤と緑のパネルを利用してもらい、そのニュースリーダー機能が必要な場合には赤を、不必要な場合には緑のパネルをあげてもらい、その様子をビデオカメラで撮影しながらその映像はOsprey社のキャプチャーカードを実装した判定用PCを経由させて、色を解析しました。その解析結果は会場モニターに映し出された下記のような円グラフで、リアルタイムに色判定結果が反映されるというものです。では、色判定プログラムについて見ていきましょう。

会場モニターに映し出された円グラフ

var my_cam:Camera = Camera.get();
bg.myvideo.attachVideo(my_cam);
my_cam.setMode(640,480,30,true);
bt = new flash.display.BitmapData(640,480,false); ---- (1)
onEnterFrame = function(){
bt.draw(bg); ---- (2)
var r_count = 0;
var g_count = 0;
for(var x=0;x<640;x+=16){ ---- (3)
for(var y=0;y<480;y+=16){ ---- (3)
var p0 = bt.getPixel(x,y); ---- (3)
var r = ((p0 & 0xff0000) >> 16); ---- (4)
var g = ((p0 & 0xff00) >> 8); ---- (4)
var b = ( p0 & 0xff); ---- (4)
if(r > 128 && g < 128 && b < 128){ ---- (5)
r_count++; ---- (5)
}
if(r < 128 && g > 128 && b < 128){ ---- (6)
g_count++; ---- (6)
}
}
}
var r_vote = Math.floor(r_count/1200/0.25 * 100); ---- (7)
var g_vote = Math.floor(g_count/1200/0.25 * 100); ---- (7)
if(r_vote > 100) r_vote = 100;
if(g_vote > 100) g_vote = 100;
r_level.text = g_vote;
g_level.text = r_vote;
}
色判別では、本番前の準備として照明やキャストの立ち位置などの環境を念頭に本番に臨みましたが、イベント本番の Flash オペレーティング作業では現場の照明の変化や、カメラ内に収まるパネルの面積の変化等にすぐに適用できるように、各計算用境界値を全てキーボード操作で変更できるようにしておきました。