Moin,
Kurz und bündig: Ich möchte RGB Farben in DIN99 Farben umrechnen.
Das Problem ist dabei der Schritt über die LAB Farben.
Die Berechnungen liefern bei mir falsche Ergebnisse.
(Also habe ich irgendwo etwas misinterpretiert, oder mich vertippt)
Falls jemand schonmal Funktionen für diese Umrechnungen umgesetzt hat wäre ich ihm sehr verbunden wenn er sie zur Verfügung stellen würde.
http://www.subcolors.de/content/public/colorsystems/uni.html
http://de.wikipedia.org/wiki/Lab-Farbraum
Spoiler anzeigen
#include <Math.au3>
[/autoit] [autoit][/autoit] [autoit]Global $a[3]
[/autoit] [autoit][/autoit] [autoit]$a[0] = 0
$a[1] = 0
$a[2] = 1
;~ _Norm($a)
[/autoit] [autoit][/autoit] [autoit]_Print($a, 'RGB')
[/autoit] [autoit][/autoit] [autoit]Global $b = _RGBtoXYZ($a[0], $a[1], $a[2])
[/autoit] [autoit][/autoit] [autoit]_Print($b, 'XYZ')
[/autoit] [autoit][/autoit] [autoit]Global $c = _RGBtoHSV($a[0], $a[1], $a[2])
[/autoit] [autoit][/autoit] [autoit]_Print($c, 'HSV', '°%%')
[/autoit] [autoit][/autoit] [autoit]Global $d = _XYZtoLAB($b[0], $b[1], $b[2])
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite('Für Blau (R=0, G=0, B=1) muss L=?, A=0, B=-90 herauskommen' & @CRLF)
[/autoit] [autoit][/autoit] [autoit]_Print($d, 'LAB')
[/autoit] [autoit][/autoit] [autoit]Func _XYZtoLAB($X, $Y, $Z)
Local $Sum = Abs($X) + Abs($Y) + Abs($Z), $Xn = $X/$Sum, $Yn = $Y/$Sum, $Zn = $Z/$Sum
Local $L = 116 *(($Y/$Yn)^(1/3))-16
Local $A = 500 * (($X/$Xn)^(1/3) - ($Y/$Yn)^(1/3))
Local $B = 200 * (($Y/$Yn)^(1/3)-($Z/$Zn)^(1/3))
Local $aRet[3] = [$L, $A, $B]
Return $aRet
EndFunc
Func _RGBtoHSV($R, $G, $B)
Local $Min = _Min(_Min($R, $G), $B), $Max = _Max(_Max($R, $G), $B)
Local $H = 0
Switch $Max
Case $Min
Case $R
$H = 60 * (($G-$B)/($Max-$Min))
Case $G
$H = 60 * (2+($B-$R)/($Max-$Min))
Case $B
$H = 60 * (4+($R-$G)/($Max-$Min))
EndSwitch
If $H < 0 Then $H += 360
Local $S = 0
If Not $Max = 0 Then $S = ($Max-$Min)/$Max
Local $V = $Max
Local $aRet[3] = [$H, $S * 100, $V * 100]
Return $aRet
EndFunc
Func _RGBtoXYZ($R, $G, $B)
Local $X = 0.4124564 * $R + 0.3575761 * $G + 0.1804375 * $B
Local $Y = 0.2126729 * $R + 0.7151522 * $G + 0.0721750 * $B
Local $Z = 0.0193339 * $R + 0.1191920 * $G + 0.9503041 * $B
Local $aRet[3] = [$X, $Y, $Z]
Return $aRet
EndFunc
Func _Norm(ByRef $a)
Local $b = 255
$a[0] /= $b
$a[1] /= $b
$a[2] /= $b
EndFunc
Func _Print($a, $s, $s2 = '')
ConsoleWrite('+> ' & $s & ':' & @CRLF)
For $i = 0 To 2 Step 1
ConsoleWrite(StringMid($s, $i+1, 1) & ': ' & $a[$i] & ' ' & StringMid($s2, $i+1, 1) & @CRLF)
Next
ConsoleWrite(@CRLF)
EndFunc
.
.
lg
Mars