2008/05/23

Pixel Bender Toolkitで遊ぶ 〜 RGB交換

[解説]
画像のRGBを入れ替えます。
具体的にはRのチャンネルをGで出力、BのチャンネルをRで出力といった具合で。

[パラメータ]
change_r - Rチャンネルを何で出力するか。
0 = Rで出力 / 1 = Gで出力 / 2 = Bで出力 (以下同じ)

change_g - Gチャンネルを何で出力するか。
change_b - Bチャンネルを何で出力するか。

[コード]

<languageVersion : 1.0;>
kernel RGBSwap
<
   namespace : "ASADA";
   vendor : "Asada Santohei";
   version : 1;
   description : "Swap RGB";
>
{
   parameter int change_r
   <
   minValue : 0;
   maxValue : 2;
   defaultValue : 0;
   >;
   parameter int change_g
   <
   minValue : 0;
   maxValue : 2;
   defaultValue : 1;
   >;
   parameter int change_b
   <
   minValue : 0;
   maxValue : 2;
   defaultValue : 2;
   >;

   input image4 src;
   output pixel4 dst;

   void
   evaluatePixel()
   {
       pixel4 samp = sampleNearest(src, outCoord());
       pixel4 ret;

       if (change_r == 0)
           ret.r = samp.r;
       else if (change_r == 1)
           ret.r = samp.g;
       else
           ret.r = samp.b;

       if (change_g == 0)
           ret.g = samp.r;
       else if (change_g == 1)
           ret.g = samp.g;
       else
           ret.g = samp.b;

       if (change_b == 0)
           ret.b = samp.r;
       else if (change_b == 1)
           ret.b = samp.g;
       else
           ret.b = samp.b;

       ret.a = samp.a;
       dst = ret;
   }
}

0 コメント: