ひまわりユーザー プログラム掲示板 バックアップ
注意
ひまわりのススメ  □ ひまわり本家Home  □ 新着記事  □ 新規投稿  □ SEARCH  □ 参考プログラム集
ツリー表示

MESSAGE RGB-HSV相互変換(V0.10) /SWinX (02/05/15(Wed) 17:35) [904]
......MESSAGE コードの解析はまだ出来てませんが /山本 博信 (02/05/22(Wed) 21:44) [937]


親記事 / ▼[ 937 ]
NO.904  RGB-HSV相互変換(V0.10)
□投稿者/ SWinX -(2002/05/15(Wed) 17:35:45)
□U R L/
{RGB-HSV相互変換}
{---プログラム掲示板投稿フォーム---
【ソフト名】RGB-HSV相互変換 (バージョン 0.10)
【作 成 者】SWinX (連絡先:swinx@plala.to)
【種  別】フリーソフトウェア
【ひまわりのバージョン】ver.1.48
【転  載】可(転載条件:特に有りません)
【改変運用】可(変換部分だけでも使えます)
【ひまわり本体への梱包】可
【実行時に利用作成するファイル】無
【コメント】RGBとHSVを相互変換します。
HSVは6角錐カラーモデルを使用しています。
参考url=http://www.openspc2.org/reibun/javascript/
---投稿フォームここまで---}
母艦の、タイトルは、「RGB-HSV相互変換」
母艦の、幅は、250
母艦の、高さは、200

「R\nG\nB\nH\nS\nV」を、反復(
   「{それ}ラベルを、ラベルとして、作成。」を、ひまわりする。
   「(その、右側)に、{それ}バーを、バーとして、作成。」を、ひまわりする。
   その、変更した時は、色計算。
   その、最大値は、255
   「(その、右側)に、{それ}エディタを、エディタとして、作成。」を、ひまわりする。
   その、変更した時は、色計算。
   その、幅は、64
   「{それ}=0。」を、ひまわりする。
)
Hバーの、最大値は、359
母艦浮上。
待機。

*色計算
対象=イベントオブジェクトの、名前。
対象から、1文字、左端を切り取る。
もし、対象=「バー」ならば、対象=「エディタ」
   でなければ、対象=「バー」
「{それ}{対象}の、変更した時は、」&『「」』&「
{それ}{対象}=イベントオブジェクト。
{それ}{対象}の、変更した時は、色計算」を、ひまわりする。
「{それ}=イベントオブジェクト。」を、ひまわりする。
それで、条件分岐。
   「R」の時、(RGB2HSV。HSV更新)
   「G」の時、(RGB2HSV。HSV更新)
   「B」の時、(RGB2HSV。HSV更新)
   「H」の時、(HSV2RGB。RGB更新)
   「S」の時、(HSV2RGB。RGB更新)
   「V」の時、(HSV2RGB。RGB更新)
母艦の、背景色は、RGB(R,G,B)
戻る。

*HSV更新
「H\nS\nV」を、反復(
   「{それ}バーの、変更した時は、」&『「」』&「
   {それ}バー={それ}。
   {それ}バーの、変更した時は、色計算。
   {それ}エディタの、変更した時は、」&『「」』&「
   {それ}エディタ={それ}。
   {それ}エディタの、変更した時は、色計算。」を、ひまわりする。
)
戻る。

*RGB更新
「R\nG\nB」を、反復(
   「{それ}バーの、変更した時は、」&『「」』&「
   {それ}バー={それ}。
   {それ}バーの、変更した時は、色計算。
   {それ}エディタの、変更した時は、」&『「」』&「
   {それ}エディタ={それ}。
   {それ}エディタの、変更した時は、色計算。」を、ひまわりする。
)
戻る。

//R,G,Bをもとに、HSVを計算する。
//R:赤成分[0-255]
//G:緑成分[0-255]
//B:青成分[0-255]
*RGB2HSV
色配列=「{R}\n{G}\n{B}」
色配列の、配列最大値して、色最大値に、入れる。
色配列の、配列最小値して、色最小値に、入れる。
色差=色最大値-色最小値。
H=0
もし、色差>0ならば、(
   もし、色最大値=Gならば、H=120+(B-R)*60/色差
   でなければ、(
      もし、色最大値=Bならば、H=240+(R-G)*60/色差
      でなければ、(
         H=(G-B)*60/色差
         もし、H<0ならば、H=H+360
      )
   )
)
H=INT(H)
S=0
もし、色差>0ならば、S=INT(色差*255/色最大値)
V=色最大値
戻る。

//H,S,Vをもとに、R,G,Bを計算する。
//H:色相[0-359] 赤=0,黄色=60,緑=120,水色=180,青=240,紫=300に相当
//S:彩度[0-255] 0=無彩色(灰色系) 255=鮮やかな色
//V:明度[0-255] 0=黒 255=明るい色
*HSV2RGB
//グレースケールの判断
もし、S=0ならば、(
   R=V
   G=V
   B=V
)でなければ、(
   H=H%360
   もし、H<0ならば、H=H+360
   色エリア=INT(H/60)
   色割合=(H%60)/60
   色差=S/255
   色V=V                  //色最大値
   色M=INT(V-V*色差)    //色最小値
   色1=INT(V-V*色割合*色差)
   色2=INT(V-V*(1-色割合)*色差)
   色エリアで、条件分岐。
      0の時、(R=色V。G=色2。B=色M。)
      1の時、(R=色1。G=色V。B=色M。)
      2の時、(R=色M。G=色V。B=色2。)
      3の時、(R=色M。G=色1。B=色V。)
      4の時、(R=色2。G=色M。B=色V。)
      5の時、(R=色V。G=色M。B=色1。)
)
戻る。



▲[ 904 ] / 返信無し
NO.937  コードの解析はまだ出来てませんが
□投稿者/ 山本 博信 -(2002/05/22(Wed) 21:44:16)
□U R L/
プログラムを動かしてみるだけで、色の勉強が出来ますね

H・・WEBで調べると色彩と出ましたが、確か中学校のとき、色環と習ったような
RGBの内、上位2色で決まるのですね・・・バーでなく、何か円グラフみたいな物で
表せるともっとすごいですね(すみません勝手な事言って)

S・・三原色または補色の三原色の支配力が強いと、値が大きくなることが分かります
(で、いいんですよね。あまり自信無いです)

V・・とにかくRGBの内、一番高い値になるのですね、知らなかったです。
赤より白の方が、明度は高いのかと思ってました。

あと、私のプログラムへのアドバイスで、明るさ判定教えてくださいましたが
なぜ、これには使っておられないのでしょうか?
母艦の背景色が暗いと、ラベルが見えないんですが・・・

まだ何も分かってないのに、いろいろ書いてしまいました。
コードのほう時間はかかると思いますが、研究して参考にしたいと思います。

それでは、またよろしくお願いします。



- Child Tree -