RGB <=> HSV - Umrechner
RGB <=> HSV - Umrechner
Code gelöscht weil der nich mir gehörte.
Zuletzt geändert von Tommy am 27.01.2015 12:07, insgesamt 2-mal geändert.
PB 5.41 x64
Re: RGB <=> HSV - Umrechner
danke Tommy
gut zu wissen dass man es machen kann, aber eine Frage, braucht man HSV in pb? eigentlich nur rgb oder?
Aber wenn man ein Bildeditor erstellt kann man den Code gut gebrauchen.
gut zu wissen dass man es machen kann, aber eine Frage, braucht man HSV in pb? eigentlich nur rgb oder?
Aber wenn man ein Bildeditor erstellt kann man den Code gut gebrauchen.

Ich benutze Pure Basic 5.30 auf Microsoft Windows 7.
Gruß
JM
Gruß
JM
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: RGB <=> HSV - Umrechner
Ich habe selten einen so verworrenen Code gesehen
Wieso diese irre Macro-Verschachtelungs-Orgie und nicht einfach so in der Art:

Wieso diese irre Macro-Verschachtelungs-Orgie und nicht einfach so in der Art:
Code: Alles auswählen
Procedure.d GetMax(a.d, b.d, c.d)
Protected Result.d
Result = a
If b > Result
Result = b
EndIf
If c > Result
Result = c
EndIf
ProcedureReturn Result
EndProcedure
Procedure.d GetMin(a.d, b.d, c.d)
Protected Result.d
Result = a
If b < Result
Result = b
EndIf
If c < Result
Result = c
EndIf
ProcedureReturn Result
EndProcedure
Procedure RGB2HSV(Red, Green, Blue, *H.INTEGER, *S.DOUBLE, *V.DOUBLE)
Protected R.d, G.d, B.d, Max.d, Min.d
Protected H, S.d, V.d
R = Red / 255
G = Green / 255
B = Blue / 255
Max = GetMax(R, G, B)
Min = GetMin(R, G, B)
If Max = Min
*H\i = 0
ElseIf Max = R
*H\i = 60 * ((G - B) / (Max - Min))
ElseIf Max = G
*H\i = 60 * (2 + ((B - R) / (Max - Min)))
Else
*H\i = 60 * (4 + ((R - G) / (Max - Min)))
EndIf
If *H\i < 0
*H\i + 360
EndIf
*S\d = 0.0
If Max > 0.0
*S\d = (Max - Min) / Max
EndIf
*V\d = Max
EndProcedure
Procedure HSV2RGB(H, S.d, V.d, *R.INTEGER, *G.INTEGER, *B.INTEGER)
Protected hi, f.d, p.d, q.d, t.d, R.d, G.d, B.d
hi = H / 60
f = (H / 60) - hi
p = V * (1 - S)
q = V * (1 - S * f)
t = V * (1 - S * (1 - f))
Select hi
Case 0, 6
R = V : G = t : B = p
Case 1
R = q : G = V : B = p
Case 2
R = p : G = V : B = t
Case 3
R = p : G = q : B = V
Case 4
R = t : G = p : B = V
Case 5
R = V : G = p : B = q
EndSelect
*R\i = R * 255
*G\i = G * 255
*B\i = B * 255
EndProcedure
;example
CompilerIf #PB_Compiler_IsMainFile
Procedure main()
Protected Red, Green, Blue, H, S.d, V.d
RGB2HSV(255, 128, 64, @H, @S, @V)
Debug "RGB 255, 128, 64 => H:" + Str(H) + "°, S = " + StrD(S * 100, 1) + "%, V = " + StrD(V * 100, 1) + "%"
HSV2RGB(H, S, V, @Red, @Green, @Blue)
Debug "HSV " + Str(H) + "°, " + StrD(S * 100, 1) + "%, " + StrD(V * 100, 1) + "% => R:" + Str(Red) + ", G:" + Str(Green) + ", B:" + Str(Blue)
RGB2HSV(71, 58, 171, @H, @S, @V)
Debug "RGB 255, 128, 64 => H:" + Str(H) + "°, S = " + StrD(S * 100, 1) + "%, V = " + StrD(V * 100, 1) + "%"
HSV2RGB(H, S, V, @Red, @Green, @Blue)
Debug "HSV " + Str(H) + "°, " + StrD(S * 100, 1) + "%, " + StrD(V * 100, 1) + "% => R:" + Str(Red) + ", G:" + Str(Green) + ", B:" + Str(Blue)
EndProcedure
main()
CompilerEndIf
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}