×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

モノクロフィルタ


 1.はじめに…
今回はモノクロフィルタやってみました。




 2.概要
 モノクロにするためには,色情報から輝度情報をとりだして,その輝度情報に基づいて白黒の濃淡を描画してやるそうです。
で,この輝度情報を取り出す方法として,RGBをYIQに変換する方法などがあるそうです。YIQにはルミナンス(輝度)と2つのクロミナンス(色差)の値が含まれるそうです。
RGBからYIQを計算する式がもうあるそうで,下の式だそうです。

  Y = 0.299×R + 0.587×G + 0.114×B
  I = 0.596×R - 0.274×G - 0.322×B
  Q = 0.211×R - 0.522×G + 0.311×B

YIQからRGBを計算するには下の式を使うそうです。

  R = Y + 0.956×I + 0.620×Q
    G = Y - 0.272×I - 0.647×Q
  B = Y - 1.108×I + 1.705×Q

画面の色をモノクロにするには色差(IとQ)を0に設定すればいいそうです。ちなみにこのYIQというのはWikiPediaの情報が正しいとすると(最近,Wikipediaはうそっぱちの情報が多いよね…)1950年代当時のカラーのブラウン管の性能に基づき定められているそうで,当時は青の発色が悪かったため,YIQは青の表現力にかけるそうです。
これをプログラムで実装するにはピクセルシェーダー(フラグメントシェーダー)で送られてきた色をRGBからYIQに変換してIとQの値をゼロに設定して,今度はYIQからRGBに戻してそれを画面に送ってやればいいみたいです。


 Download
本ソースコードおよびプログラムを使用したことによる如何なる損害も製作者は責任を負いません。
本ソースコードおよびプログラムは自己責任でご使用ください。
プログラムの作成にはMicrosoft Visual Studio 2008 SP1 Professional, Micosoft DirectX SDK (June 2010)を用いています。







Flashを利用するためにはPluginが必要です。 <!-- <div id="ninja-hp-inactive-footer" style="clear:both;margin:15px;padding:0;text-align:center;position:relative;z-index:9999"><div style="padding:5px;margin:0 auto;background:#fff;display:inline-block;"><span onclick="closeHpInactiveCmFooter()" style="border:1px solid #dedede;display:block;width:12px;height:12px;font-size:16px;line-height:0.75;margin:0 0 5px;padding:0;color:#aaa;float:right;cursor:pointer;font-family:'arial','Osaka','MS Pゴシック',sans-serif;">×</span><div style="clear:both"></div><script type="text/javascript" charset="utf-8" src="//asumi.shinobi.jp/encount"></script><script type="text/javascript" charset="utf-8" src="//asumi.shinobi.jp/fire?f=434"></script><p style="font-size:10px;padding:3px;margin:0;text-align:center;color:#aaa;background:#fffffc;">[PR]この広告は3ヶ月以上更新がないため表示されています。<br>ホームページを更新後24時間以内に表示されなくなります。</p></div></div><script type="text/javascript">var headerCookieName="e0aafee963b5fb33e053128e5df5f907",footerCookieName="fb89761dd82a0c988e0b7b0f758ae55b",inactiveCmView_header=getInactiveCmViewCookie(headerCookieName),inactiveCmView_footer=getInactiveCmViewCookie(footerCookieName);function closeHpInactiveCm(){document.getElementById("ninja-hp-inactive").style.display="none";setInactiveCmViewCookie(headerCookieName,(new Date).getTime(),3600)} function closeHpInactiveCmFooter(){document.getElementById("ninja-hp-inactive-footer").style.display="none";setInactiveCmViewCookie(footerCookieName,(new Date).getTime(),3600)}function setInactiveCmViewCookie(b,c,d){var e=location.pathname,a=[],a=e.split("/");""!=a[a.length-1]&&(a[a.length-1]="",e=a.join("/"));a=(new Date).getTime();a=(new Date(a+1E3*d)).toUTCString();b=""+(b+"="+escape(c));b+="; path="+e;document.cookie=d?b+("; expires="+a+"; "):b+"; "} function getInactiveCmViewCookie(b){var c="",d="";return 0<document.cookie.length&&(c=document.cookie.indexOf(b+"="),-1!=c)?(c=c+b.length+1,d=document.cookie.indexOf(";",c),-1==d&&(d=document.cookie.length),unescape(document.cookie.substring(c,d))):""};</script><script type="text/javascript" charset="utf-8" src="//asumi.shinobi.jp/encount"></script> <ul class="tdftad"> <li><a href="http://www.ninja.co.jp/hp/">忍者ホームページ</a></li> <li class="tdftlink"><a href="http://recommend.shinobi.jp/?utm_source=hp&utm_medium=text&utm_campaign=hp_userpage_cm2" target="_blank">【アクセスUP!】忍者画像RSS</a></li> <li class="tdftpr"><a href="http://xr.shinobi.jp/homepage?code=58064b43446bc42ee324fbd407ef4453&encrypt=1fqL9PM9purZF1BejnwYDHgSpTGeMUhnv4gAQSleg6o%3D" rel="nofollow" target="_blank">RealVoice</a></li> <li class="tdftlink"><a href="http://www.ninja.co.jp/admax/" target="_blank" rel="nofollow">最短5分であなたのサイトに広告配信【忍者AdMax】</a></li> <li class="tdftlink"><a href="http://www.ninja.co.jp/" target="_blank" rel="nofollow">忍者ツールズ</a></li> <style> .asumi_ad_frame{display:inline-block;} .asumi_ad_frame div{display:inline-block;} </style> <li class="tdftpr"><div class="asumi_ad_frame"><script type="text/javascript" charset="utf-8" src="//asumi.shinobi.jp/fire?f=184"></script></div></li> </ul></body> -->