このページの本文へ

Photoshopを超えた!?BridgeとJSで作る画像フィルター (2/6)

2010年02月22日 11時00分更新

文●古籏一浩

  • この記事をはてなブックマークに追加
本文印刷

ピクセル単位で書き込んでみる

 1つ目のサンプルとして、キャンバス内のランダムな位置にランダムな色の点(ドット)を描画してみましょう。ノイズを加えるフィルターと同じような効果が得られます。

 座標位置をランダムに求めるには、Math.random()を使います。Math.random()は0から1未満の疑似乱数値を発生させます。得られた乱数値にキャンバスの横幅または縦幅を乗算し、Math.floor()を使って小数以下を切り捨てて整数にします(たとえば156.78なら156になり、四捨五入はされません)。

 ここではキャンバスの横幅を320ピクセル、縦幅を240ピクセルにしているので、以下のように記述します。すると、X座標0〜319、Y座標0〜239までの乱数値を得られます。


var x = Math.floor(Math.random() * 320);
var y = Math.floor(Math.random() * 240);


 描画色もランダムに決めるので、Math.random()を使います。BridgeではRGBモードにのみ対応しているため、常にR(赤)/G(緑)/B(青)の輝度の組み合わせで色を表現します。輝度はPhotoshopのカラーパレットと同様に、0〜255までの数値が指定できます。


var R = Math.floor(Math.random() * 256);
var G = Math.floor(Math.random() * 256);
var B = Math.floor(Math.random() * 256);


 この状態では色の輝度が変数に入っているだけですので、ピクセルを描く前にColorオブジェクトを生成します。以下のようにRGB値を指定することでColorオブジェクトが作成されます。


var myColor = new Color(R, G, B);


 あとはキャンバスにピクセルを描くだけです。BridgeではsetPixel()を使って座標値と色(Colorオブジェクト)を引数に指定します。以下のようにすると、座標(x,y)にmyColorオブジェクトの色が1ピクセル描画されます。


myCanvas.setPixel(x,y, myColor);


 ここまでのスクリプトで、ノイズフィルターの処理が完成しました。ただ、このままBridgeを終了すると画像が消えてしまいますので、生成した画像をJPEGファイルとして保存しましょう。JPEG画像の保存はexportTo()を使い、第1引数に保存先を示すファイルオブジェクトを、第2引数に画質を指定します。画質は0〜100の数値で指定でき、0が最低、100が最高画質です。

 ここまでをまとめたのがサンプル01です。生成した画像はホームフォルダ内に「BridgeSample.jpg」という名前で保存されます。

ランダムに点が表示された画像が生成されます

ランダムに点が表示された画像が生成されます

●サンプル01


#target "Bridge"
var myCanvas = new BitmapData(320, 240);
for(var i=0; i<320*240; i++){
    var x = Math.floor(Math.random() * 320);
    var y = Math.floor(Math.random() * 240);
    var R = Math.floor(Math.random() * 256);
    var G = Math.floor(Math.random() * 256);
    var B = Math.floor(Math.random() * 256);
    var myColor = new Color(R, G, B);
    myCanvas.setPixel(x,y, myColor);
}
myCanvas.exportTo(new File("~/BridgeSample.jpg"), 100);


この連載の記事

一覧へ

この記事の編集者は以下の記事をオススメしています