Hallo,
ich bräuchte eure Hilfe, und zwar werden die Farben in OpenGl etwas anders angegeben als bei GDI+
Normalerweise ist es ja RGB und dann von 00 bis FF pro Farbton.
Bei OpenGl ist es ähnlich, jedoch mit dem Unterschied, dass es hier von 0.0 - 1.0 geht.
Nun möchte ich normale Farben (0x000000 - 0xFFFFFF) in OpenGl Farben umwandeln.
Von Gl nach RGB ist es ja kein Problem, jedoch zurück und ich find den Fehler nicht.
Mein Anfang sieht so aus:
Spoiler anzeigen
#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$Color2 = _RGBToGL("0xFFFFFF")
ConsoleWrite($Color2 & @CRLF)
Func _RGBToGL($Color)
$nColor = StringTrimLeft($Color, 2)
$aColor = StringSplit($nColor, "")
$R = $aColor[1] & $aColor[2]
$G = $aColor[3] & $aColor[4]
$B = $aColor[5] & $aColor[6]
$Para1 = _HexToDecimal("0x0000" & $R)
$Para2 = _HexToDecimal("0x0000" & $G)
$Para3 = _HexToDecimal("0x0000" & $B)
Return ($Para1 / 255) & "|" & ($Para2 / 255) & "|" & ($Para3 / 255)
EndFunc
Func _GLToRGB($Para1, $Para2, $Para3)
$R = StringTrimLeft(Hex(255 * $Para1), 6)
$G = StringTrimLeft(Hex(255 * $Para2), 6)
$B = StringTrimLeft(Hex(255 * $Para3), 6)
Return "0x" & $R & $G & $B
EndFunc
Func _HexToDecimal($iHex)
If StringLeft($iHex, 2) = "0x" Then $iHex = StringMid($iHex, 3)
If StringIsXDigit($iHex) = 0 Then
SetError(1)
MsgBox(0,"Error","Wrong input, try again ...")
Return ""
EndIf
Local $ret="", $hx_count=0, $hx_array = StringSplit($iHex, ""), $Ii, $hx_tmp
For $Ii = $hx_array[0] To 1 Step -1
$hx_tmp = StringInStr($iHex, $hx_array[$Ii]) - 1
$ret += $hx_tmp * 16 ^ $hx_count
$hx_count += 1
Next
Return $ret
EndFunc ;==>_HexToDec()
;GLtoRGB:
[/autoit] [autoit][/autoit] [autoit];Parameter * 255
;Das in Hex wandeln
;6 Stellen von links kappen
;R G B zusammenfügen
;0x dranhängen
;RGBtoGL:
[/autoit] [autoit][/autoit] [autoit];0x kappen
;R G B trennen
;6Stellen dranfügen
;Das in Dezimal wandeln
; Durch 255 teilen
Unten im Script seht ihr den Ablauf.
2. Frage:
Wie bekomm ich die Hintergrundfarbe eines Fensters?
_WinAPI_GetSysColor($COLOR_WINDOW) geht ja nur bei Fenster, die aktiv sind und den Fokus besitzen. Optimal wäre es, wenn ich die Farbe per Handle bekomme...
MfG