HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0926
うひょRGBからHSVに変換とその逆について4解決


うひょ

リンク

2006/9/26(Tue) 20:31:59|NO.2653

RGBからHSVへの色の変換をしようと思い、
検索してみると他の言語のサンプルはあったので
それをHSPに直してみたのですが、
hsvcolorのヘルプを見るとH値は191までのようです。
どう直せばhsvcolorで対応できるようにすることができるでしょうか。
お願いします!

goto *main #deffunc toHSV int r,int g,int b,var h,var s,var v,local mx,local mn mx = max(r,g) mx = max(mx,b) mn = min(r,g) mn = min(mn,b) h=0 s=0 v = mx s = 255 * ((mx-mn)/mx) if mx=r{ h=60*((b-g)/(mx-mn)) }else{ if mx=g{ h=60*(2+(r-b)/(mx-mn)) }else{ h=60*(4+(g-r)/(mx-mn)) } } if h<0:h+=360 return *main



この記事に返信する


うひょ

リンク

2006/9/27(Wed) 19:34:10|NO.2663

忘れていました。前に

#defcfunc max int intA,int intB if intA<intB:return intB:else:return intA #defcfunc min int intA,int intB if intA>intB:return intB:else:return intA
も必要です。



Shinya

リンク

2006/9/27(Wed) 22:07:05|NO.2670

 うひょさんのスクリプトで、ほとんど間違いないです。
ただし、色相(Hue)の、赤、黄、緑、シアン、青、マゼンタ(6種類)を周期を
360度ではなく192度に変換するので。一色分の角度は
360/60 = 192/D
D = 32
となります。

#module
// 360度 周期を 192度にする #define _PI 96.0 #define _2PI 192.0 #defcfunc max int p1, int p2 if p1 < p2 : return p2 return p1 #defcfunc min int p1, int p2 if p1 < p2 : return p1 return p2 #deffunc toHSV var H, var S, var V, int R, int G, int B V = max(max(R, G), B) u = min(min(R, G), B) if V { S = 255.0 * (V - u) / V } else { S = 0.0 } if V == R { H = _PI / 3 * (G - B) / (V - u); _PI/3 = 32 } else : if V == G { H = _PI / 3 * (2.0 + (R - B) / (V - u)) } else { H = _PI / 3 * (4.0 + (G - R) / (V - u) ) } if H < 0.0 : H + _2PI return #global repeat 10 r = rnd(256) g = rnd(256) b = rnd(256) color r, g, b : boxf , , 320, 240 toHSV h, s, v, r, g, b hsvcolor h, s, v : boxf 320, 240 wait 50 loop



Shinya

リンク

2006/9/27(Wed) 22:17:09|NO.2671

 間違えました。toHSV を次のように置き換えてください。
#deffunc toHSV var H, var S, var V, int R, int G, int B
V = max(max(R, G), B) u = min(min(R, G), B) if V { S = 255.0 * (V - u) / V } else { S = 0.0 } if V == R { H = _PI / 3 * (G - B) / (V - u); _PI/3 = 32 } else : if V == G { H = _PI / 3 * (2.0 + double(B - R) / (V - u)) } else { H = _PI / 3 * (4.0 + double(R - G) / (V - u) ) } if H < 0.0 : H + _2PI return



うひょ

リンク

2006/9/27(Wed) 22:26:22|NO.2672

ありがとうございます!
正しく動作させることができました!
しかし、僕が見たのと全然違いますね…(汗)
とにかく、ありがとうございました!



ONION software Copyright 1997-2021(c) All rights reserved.