RGBの分割と結合をしてみる の変更点


 RIGHT:寄稿:東條遼平
 
 * RGB情報を分割 [#x9be3cbe]
 
 せっかくRGB情報が別々に分かれているのでRならRだけ、GならGだけ、BならBだけの情報でグレースケールを作れるようにしてみました。つまり元の画像のRGBの、RをRGB全てに入れたもの、Gを全てに入れたもの、Bを全てに入れたものの3枚を作成します。
 
     void RGBDivision(Image *colorimg, Image *Rimg,
                                         Image *Gimg, Image *Bimg)
     {
       unsigned int i;
 
  
       for(i=0; i<(colorimg->width)*(colorimg->height); i++){
         Rimg->data[i].r = Rimg->data[i].g = 
                                Rimg->data[i].b = colorimg->data[i].r;
         Gimg->data[i].r = Gimg->data[i].g = 
                                Gimg->data[i].b = colorimg->data[i].g;
         Bimg->data[i].r = Bimg->data[i].g = 
                                Bimg->data[i].b = colorimg->data[i].b;
       }
     }
 
 この関数を呼び出す前に引数として渡すRimg,Gimg,Bimgについては先に作成したCreate_Imageでcolorimgと同じwidth, heightを渡し、 dataの領域を確保しておく必要があります。もちろん使い終わればFree_Imageします。
 
 * RGB情報を結合 [#ue0e9598]
 
 RGB情報を分割したら結合もしてみたくなります。分割では1枚のRGB情報で3枚の画像を作成しましたが、今度は3枚のRGB情報を用いて1枚のカラー画像を作成します。つまり分割の時のほぼ逆変換を行います。「ほぼ逆変換」というのは3枚の画像がグレースケールで無くてもいいというのと、必ずしも同じ画像で無くてもいいからです。下にソースを載せますが、プログラム上dataはcolorimgのwidth,height分しか参照されません。そのため3枚の原画像が全てcolorimgよりもサイズの大きい画像であれば問題ありません。ただ、それができるからといって何の役にも立たない気もしますが。
 
     void RGBCombination(Image *Rimg, Image *Gimg, Image *Bimg,
                                                     Image *colorimg)
     {
       unsigned int i;
 
  
       for(i=0; i<(colorimg->width)*(colorimg->height); i++){
         colorimg->data[i].r = Rimg->data[i].r;
         colorimg->data[i].g = Gimg->data[i].g;
         colorimg->data[i].b = Bimg->data[i].b;
       }
     }
 
 * 用途 [#m471a1be]
 
 とりあえず思い付きで作ってみた関数なので、なんの役に立つか疑問だったのですが、よく考えてみると原画像のRGBのそれぞれの値がRGGになっている画像を作成したりできます。また例えばRGB情報のRの情報にだけフィルタをかけるといった事もでき、面白い画像ができあがりました。フィルタについてはこれから載せていこうと思いますが、とりあえず今回はRGBのそれぞれの値をRGGにするmain.cのコードにしておきます。
 
 - &ref(main.c);
 - &ref(bitmap.c);
 - &ref(bitmap.h);
Valid XHTML 1.1! home > コンピュータ > プログラミング >
リロード   新規 編集 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.3.29HTML convert time to 0.002 sec.