Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; OKLAB https://bottosson.github.io/posts/oklab/
- $c = 0xE3E3E3
- ConsoleWrite('+++ convert 0x' & Hex($c,6) & ' to Lab:' & @CRLF)
- $lab = rgb_to_oklab($c)
- ConsoleWrite('--> $lab.L ' & $lab.L & @CRLF)
- ConsoleWrite('--> $lab.a ' & $lab.a & @CRLF)
- ConsoleWrite('--> $lab.b ' & $lab.b & @CRLF)
- ConsoleWrite('+++ convert back to RGB:' & @CRLF)
- ConsoleWrite('--> ' & oklab_to_rgb($lab) & @CRLF)
- Func rgb_to_oklab($_RGB, $_iRetType=0) ; $_iRetType: 0=struct, 1=map
- Local $R = BitAND(BitShift($_RGB, 16), 0xFF)
- Local $G = BitAND(BitShift($_RGB, 8), 0xFF)
- Local $B = BitAND($_RGB, 0xFF)
- Local $l = (0.4122214708 * $R) + (0.5363325363 * $G) + (0.0514459929 * $B)
- Local $m = (0.2119034982 * $R) + (0.6806995451 * $G) + (0.1073969566 * $B)
- Local $s = (0.0883024619 * $R) + (0.2817188376 * $G) + (0.6299787005 * $B)
- Local $l_ = $l ^ (1/3)
- Local $m_ = $m ^ (1/3)
- Local $s_ = $s ^ (1/3)
- If $_iRetType = 0 Then
- Local $Lab = DllStructCreate("struct;float L; float a; float b;endstruct")
- Else
- Local $Lab[]
- EndIf
- $Lab.L = (0.2104542553 * $l_) + (0.7936177850 * $m_) - (0.0040720468 * $s_)
- $Lab.a = (1.9779984951 * $l_) - (2.4285922050 * $m_) + (0.4505937099 * $s_)
- $Lab.b = (0.0259040371 * $l_) + (0.7827717662 * $m_) - (0.8086757660 * $s_)
- Return $Lab
- EndFunc
- Func oklab_to_rgb($_Lab)
- Local $l_ = $_Lab.L + (0.3963377774 * $_Lab.a) + (0.2158037573 * $_Lab.b)
- Local $m_ = $_Lab.L - (0.1055613458 * $_Lab.a) - (0.0638541728 * $_Lab.b)
- Local $s_ = $_Lab.L - (0.0894841775 * $_Lab.a) - (1.2914855480 * $_Lab.b)
- Local $l = $l_ * $l_ * $l_
- Local $m = $m_ * $m_ * $m_
- Local $s = $s_ * $s_ * $s_
- Local $R = Int(Round( (+4.0767416621 * $l) - (3.3077115913 * $m) + (0.2309699292 * $s), 0))
- Local $G = Int(Round( (-1.2684380046 * $l) + (2.6097574011 * $m) - (0.3413193965 * $s), 0))
- Local $B = Int(Round( (-0.0041960863 * $l) - (0.7034186147 * $m) + (1.7076147010 * $s), 0))
- Return '0x' & Hex($R, 2) & Hex($G, 2) & Hex($B, 2)
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement