WPFとVB.NETでカラーピッカーその3、元の色の明るさ(輝度)に合わせた別の色(色相)を選びたい
WPFとVB.NETでカラーピッカーその2、HSVとRGBで色指定 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14025927.html
http://blogs.yahoo.co.jp/gogowaten/14025927.html
前回6日前から
色相を変化させた時に元の色の輝度に合わせた色にする
色を選んでいる時に今の色のトーンっていうのかな、明るさに合わせた色を
選びたい時がある、これをある程度自動でできるようにしてみた
明るさの基準はHDTV形式の輝度(Y)にした
例えば色相30のオレンジ色(RGB(255,128,0))と同じくらいの明るさの
水色(色相180)を選びたいとき
色相だけ水色の180に移動させると
オレンジ色に比べてずいぶん明るくなる
明るさ(輝度)を変えるには彩度(S)と明度(V)を変化させればいい
今回は明度(V)を変化させて輝度を合わせるようにした
輝度の範囲0から255のとき
オレンジ色 163.7水色 227.5
だったので水色の輝度をオレンジ色と同じ163.7になるまで明度(V)を下げる
明度(V)72をまで下げると輝度164.2でだいたいオレンジ色と同じくらいの
明るさになった
動き
輝度固定にチェックを入れると新しい色が輝度固定比較用にコピーされて色相(H)とガンマ値以外は動かせなくなる
デザイン画面
VBコード
RGBやHSVから輝度を求めるものが必要なので
osakana.factory - グレースケールのひみつこの辺りを参照して
https://ofo.jp/osakana/cgtips/grayscale.phtml
ColortoHDTVはColorを渡すとHDTV形式の輝度を返す関数
Colorだと0から255の整数値でちょっと大雑把かなと思って
っていうDouble型の値を持つ構造体RGBをつくって小数点以下の数値も
意味があるようにして、これを利用して
RGBtoHDTVはRGBを渡すとHDTV形式の輝度を返す関数
この関数を利用するのが
HSVを輝度に変換する関数
HSVtoHDTVY
これで準備OK
GetVFixedYは単純に比較用の元の色の輝度と今の色の輝度を比較して
今のほうが大きければ小さくなるまでVを1づつ下げて比較を繰り返す
小さくなったらVに1足してから今度は0.1づつ下げて比較を繰り返して
小さくなったらその時のVを返している
っていう効率は良くないけどわかりやすい単純な方法
あとは選んだ色を並べて保存しておく機能がほしいなあ
Wpf_test91_カラーピッカー4 - Visual Studio Team Services
https://gogowaten.visualstudio.com/DefaultCollection/WPF/_git/WPF_test6?path=%2FWpf_test91_%E3%82%AB%E3%83%A9%E3%83%BC%E3%83%94%E3%83%83%E3%82%AB%E3%83%BC4&version=GBmaster&_a=contents
https://gogowaten.visualstudio.com/DefaultCollection/WPF/_git/WPF_test6?path=%2FWpf_test91_%E3%82%AB%E3%83%A9%E3%83%BC%E3%83%94%E3%83%83%E3%82%AB%E3%83%BC4&version=GBmaster&_a=contents
WPFとVB.NETでカラーピッカーその4、パレットを作って色を登録できるようにした ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14048893.html
http://blogs.yahoo.co.jp/gogowaten/14048893.html