rgb in Farbtiefe, Sättingung, Helligkeit und zurück

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

TheProgrammer

Betreff: rgb in Farbtiefe, Sättingung, Helligkeit und zurück

BeitragFr, Dez 30, 2005 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

erstma folgendes Spektrum:
user posted image

Die Farbtiefe entspricht der x-Achse in diesem Spektrum (0-239) von links nach rechts
Die Sättigung entspricht der y-Achse in diesem Spektrum (0-240) von unten nach oben und
die Helligkeit muss individuell berechnet werden.

(vgl. MS Paint Wink )

Das wäre eine Möglichkeit, um den rbg-wert zu "picken".
Aber wie rechnet man jetzt einen rgb-wert in diese anderen drei werte um?

Wenn jemand eine Ahnung hat, dann soll er seine Gedanken hier posten. ^^ Ich hoffe auf eine eindeutige und richtige Antwort.

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being

Hubsi

BeitragFr, Dez 30, 2005 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich Dich richtig verstanden habe willst Du den Wert den WritePixel(Fast) zurückgibt in Color-kompaible Werte umrechnen?

Onlinehilfe hat Folgendes geschrieben:
Berechnung der Farbanteile aus einem Farbcode:
a=(rgb AND $FF000000)/$1000000
r=(rgb AND $FF0000)/$10000
g=(rgb AND $FF00)/$100
b=rgb AND $FF

Berechnung des Farbcodes aus den Farbanteilen:
rgb=a*$1000000 + r*$10000 + g*$100 + b

Berechnung der Farbwerte ohne Alpha:
rgb2=rgb AND $FFFFFF
Wenn nicht, dann... nicht Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

TheProgrammer

BeitragFr, Dez 30, 2005 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hätte gerne die werte

Rot, Grün, Blau

in

Farbtiefe, Sättigung, Helligkeit

umgerechnet ^^
aktuelles Projekt: The last day of human being

BtbN

BeitragFr, Dez 30, 2005 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Helligkeit is ganz easy: Addier die drei werte, und Teil sie durch 3
Für die andren ka, ma nach googeln.
 

nobody

BeitragFr, Dez 30, 2005 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
BORNtobeNAMELESS hat Folgendes geschrieben:
Helligkeit is ganz easy: Addier die drei werte, und Teil sie durch 3
Für die andren ka, ma nach googeln.

Klappt nicht wirklich =o
Bsp:
R:255;G:0;B:0;
=255/3
=85
H:240;S:100;B:100;
Selbst wenn es Sättigung oder Farbtiefe angeben sollte, stimmt das nicht.

d-bug

BeitragFr, Dez 30, 2005 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Schätze er meint HSV, also Hue - Saturation - Value (oder so ähnlich)...

Kleiner Schnipsel aus XUI2...
Originalcode ist von EPS also Credits an ihn !!!

Code: [AUSKLAPPEN]
Global xui2rgbr,xui2rgbg,xui2rgbb
Global xui2hsvh,xui2hsvs,HSL_L

;---------------------------------------------
; RGB nach HSV
;---------------------------------------------

Function XUI2_RGB2HSV ()
   Min = XUI2_GetMin(xui2rgbr, xui2rgbg, xui2rgbb)
   Max = XUI2_GetMax(xui2rgbr, xui2rgbg, xui2rgbb)
   Minus# = Max - Min
   Plus# = Max + Min
   HSL_L = ((Plus * 240) + 255) / (2 * 255)
   If Max = Min Then
      xui2hsvh = 0
      xui2hsvs = 0
   Else
      If HSL_L <= (240 / 2) Then
         xui2hsvs = ((Minus * 240) + 0.5) / Plus
      Else
         xui2hsvs = ((Minus * 240) + 0.5) / (2 * 255 - Plus)
      End If
      RDelta = (((Max - xui2rgbr) * 40) + 0.5) / Minus
      GDelta = (((Max - xui2rgbg) * 40) + 0.5) / Minus
      BDelta = (((Max - xui2rgbb) * 40) + 0.5) / Minus
      Select Max
         Case xui2rgbr
            xui2hsvh = BDelta - GDelta
         Case xui2rgbg
            xui2hsvh = 80 + RDelta - BDelta
         Case xui2rgbb
            xui2hsvh = 160 + GDelta - RDelta
      End Select
      While xui2hsvh < 0
         xui2hsvh = xui2hsvh + 240
      Wend
      xui2hsvh = xui2hsvh Mod 240
   End If
End Function


;---------------------------------------------
; HSV nach RGB
;---------------------------------------------

Function XUI2_HSV2RGB ()
   H = xui2hsvh
   S = xui2hsvs
   V = HSL_L
   If S = 0 Then
      R = (V * 255) / 240
      G = R
      B = R
   Else
       If V <= 240 / 2 Then
           Magic2 = (V * (240 + S) + 120) / 240
       Else
           Magic2 = V + S - ((V * S) + 120) / 240
       End If
       Magic1 = 2 * V - Magic2
       R = (XUI2_H2RGB(Magic1, Magic2, H + 80) * 255 + 120) / 240
       G = (XUI2_H2RGB(Magic1, Magic2, H) * 255 + 120) / 240
       B = (XUI2_H2RGB(Magic1, Magic2, H - 80) * 255 + 120) / 240
   End If
   If R<0 Then R=0
   If R>255 Then R=255
   xui2rgbr = R
   If G<0 Then G=0
   If G>255 Then G=255
   xui2rgbg = G
   If B<0 Then B=0
   If B>255 Then B=255
   xui2rgbb = B
End Function

;---------------------------------------------
;Sub-Funktionen
;---------------------------------------------

Function XUI2_H2RGB (mag1,mag2,Hue)

   If Hue < 0 Then
       Hue = Hue + 240
   Else
      If Hue > 240 Then Hue = Hue - 240
   End If
   If Hue < 40 Then
      Ret = (mag1 + (((mag2 - mag1) * Hue + 20) / 40))
   Else
      If Hue < 120 Then
         Ret = mag2
      Else
         If Hue < 160 Then
            Ret = (mag1 + (((mag2 - mag1) * (160 - Hue) + 20) / 40))
         Else
            Ret = mag1
         End If
      End If
   End If
   Return Ret
End Function

Function XUI2_GetMin (a,b,c)
 Min=a
 If b<Min Then Min=b
 If c<Min Then Min=c
 Return Min
End Function

Function XUI2_GetMax (a,b,c)
   Max=a
   If b>Max Then Max=b
   If c>Max Then Max=c
   Return Max
End Function


So, das Ganze funktioniert über die Globalen. Also Farbwerte in die Globalen eintragen, Konvertieren, Farbwerte aus den Globalen auslesen !

Have fun

TheProgrammer

BeitragFr, Dez 30, 2005 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank Very Happy
Ich schaus mir gleich an! Wink

edit: Welcher Buchstabe gehört jetzt zu welchem?

Mein Vorschlag:

H - Helligkeit
S - Sättigung
V - Farbtiefe

passt das so?
aktuelles Projekt: The last day of human being

d-bug

BeitragFr, Dez 30, 2005 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Guckst du hier !!! Wink

demnach ist:

Zitat:
H = Farbton
S = Sättigung
V = Helligkeit



greetz

TheProgrammer

BeitragFr, Dez 30, 2005 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank nochmal!!! Very Happy

Wer sich für das Resultat interessiert: Wink

Screen
aktuelles Projekt: The last day of human being
 

David

BeitragSa, Dez 31, 2005 1:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Nur nochmal am Rande. Es handelt sich nicht um die Farbtiefe sondern den Farbton, wie d-bug schon richtig bemerkte! Wink

grüße

d-bug

BeitragSa, Dez 31, 2005 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Mensch TheProgrammer, ist die FPS Anzeige da mit oder ohne Vsynch ?

Wenn sie ohne ist, dann solltest du dir nochmal Gedanken über deine GFX-Routinen machen Wink

greetz

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group