特定の色をシフトしてみる の変更点


 RIGHT:寄稿:東條遼平
 
 * 色相 [#e1801fde]
 
 まずは色相についてシフトしてみたいと思います。色相は0から359度までの値を持っていますが、シフトさせたい範囲を決め、その中に入っているときだけシフトをするという風にすれば、例えば青空を夕日に変えようと思えば青は240度付近ですので、 240度からプラスマイナス何度かの間を範囲とし、その中に入っているときに 120度位シフトすれば空が赤く変わりそうです。
 
  if(top <= bottom){
    if(img->hsv[i*img->width + j].h <= top ||
                  img->hsv[i*img->width + j].h >= bottom){
      img->hsv[i*img->width + j].h += degree;
    }
  }else{
    if(img->hsv[i*img->width + j].h >= bottom && 
                  img->hsv[i*img->width + j].h <= top){
      img->hsv[i*img->width + j].h += degree;
    }
  }
  
  if(img->hsv[i*img->width + j].h >= 360) 
    img->hsv[i*img->width + j].h -= 360;
  if(img->hsv[i*img->width + j].h < 0) 
    img->hsv[i*img->width + j].h += 360;
 
 bottomが範囲の始点、topが範囲の終点です。ここで赤の部分をシフトしようとするとどうしても0度をまたぐ必要があるので例えば330度から30度までというような指定が出来なければなりません。そのためtopがbottom以下のときとそれ以外で分岐させています。後は結果が0度から359度の間に納まるようにしています。
 
 * 彩度 [#q6f6098d]
 
 これを大きくするとその名の通り画像があざやかになります。これも範囲を指定できるようにしておきましょう。ちなみに-255だけシフトさせると彩度は全てゼロになり、グレースケールになります。
 
 * 明度 [#sbdd7303]
 
 これも範囲を指定できるようにしました。あまりマイナス方向にシフトしすぎると真黒になります。明るい部分を少しシフトすると艶のある画像になります。
 
 * 全て [#z6c32d3f]
 
 ついでなので色相、彩度、明度に対し全てに範囲を指定し、全ての範囲に入っているときにHSV全てをシフトする関数を作ってみました。これで細かな指定ができます。ただCUIのプログラムではなかなか細かくしていできませんが。殆ど前述の関数を足し合わせたような関数ですが、範囲外だったときにcontinueするように直しています。 
 
 - &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.2.17HTML convert time to 0.024 sec.