[PR]テレビ番組表
今夜の番組チェック
グラデーション
画像処理を行う場合、行う処理によってはそのときの画像の大きさを知る必要が出てきます。gtProgの内部ではそのとき処理している画像の大きさを(xs,ys)というパラメータで持っています。
前回、以下のような初期化を行いました。
---Initialize---
coord=0;
cx=cy=0;
この場合は左上が原点(0,0)になりますので、右上の座標は(xs-1,0)です。0からカウントしているので、画像の大きさ-1が座標になっています。同じように左下の座標は(0,ys-1)です。右下は(xs-1,ys-1)になります。
余談ですが、プレビューを描画するときにはそのサイズに合わせてxs,ysが変更されています。画像のサイズに合わせて処理を行うようにすれば、プレビューと実際の処理結果は同じになります。
では、左から右に、色が徐々に赤から青に変化させることを考えます。
x=0でR=255,G=0,B=0の状態で、x=xsのときはR=0,G=0,B=255になります。前回の応用として考えれば、以下のプログラムが出来上がります。
---Transform---
R=( 0*x+255*(xs-x))/xs;
G=( 0*x+ 0*(xs-x))/xs;
B=(255*x+ 0*(xs-x))/xs;

元のカラーを無視しているので、絵は消えてしまいます。
少し考えると常にG=0ですので、以下のものでも同じ結果になります。
---Transform---
R=(0 *x+255*(xs-x))/xs;
G=0;
B=(255*x+ 0*(xs-x))/xs;
さらに計算を簡単にするために、x/xsをまとめて以下のように書くことも出来ます。
---Transform---
a=x/xs;
R= 0*a+255*(1-a);
G= 0;
B=255*a+ 0*(1-a);
この例で分かるのは、aという変数は画像の左を0、右を1としたときの比率をあらわしているということです。Rの成分を考えてみると、左に行けば255の成分(255に掛ける値)が強くなって、右に行けば0の成分が強くなっています。
このプログラムからG=0の行を除けば、緑成分のみ残すことが出来ます。

次にスライダーを使ってパラメータを入力する方法を学びましょう。
初期化プログラムを以下のように変更するだけで6つのパラメータが入力できるようになります。三つ並んでいる数値は、最小、最大、初期値です。この定義に範囲を1跳びで変更できるようになります。
---Initialize---
coord=0;
?r1,Left R,0,255,255;
?g1,Left G,0,255,0;
?b1,Left B,0,255,0;
?r2,Right R,0,255,0;
?g2,Right G,0,255,0;
?b2,Right B,0,255,255;
cx=cy=0;
r1,g1,b1,r2,g2,b2という変数が入力されるので、Transformプログラムも、カラーの定義を数字から変数にします。
これで、任意の色から任意の色へのグラデーションが作れるようになりました。
---Transform---
a=x/xs;
R=r2*a+r1*(1-a);
G=g2*a+g1*(1-a);
B=b2*a+b1*(1-a);

aの計算式をy/ysにすれば縦方向へのグラデーションが作れます。
---Transform---
a=y/ys;
R=r2*a+r1*(1-a);
G=g2*a+g1*(1-a);
B=b2*a+b1*(1-a);

色の扱いの基本的なところは、この程度です。
次回は画像を変形させる方法を学びます。
戻る