Both sides previous revisionPrevious revision | Next revisionBoth sides next revision |
isp:hsl-_rgb [2019/05/27 22:53] – [Detailed algorithm] Igor Yefmov | isp:hsl-_rgb [2019/05/27 23:07] – [Detailed algorithm] Igor Yefmov |
---|
| |
^ # ^ name ^ math excerpt from Wikipedia ^ bits ^ range ^ C-like code ^ factor((multiply by that much to get the "real" value)) ^ | ^ # ^ name ^ math excerpt from Wikipedia ^ bits ^ range ^ C-like code ^ factor((multiply by that much to get the "real" value)) ^ |
| 1 | \[h\] | \[hue(pixel)\] | ''14''\\ signed | \[-8192..+8191\] mapped into \(-180^\circ..+180^\circ\) | <code>h = pixel.hue();</code> | \[\frac{180}{2^{13}}\] | | | 1 | \[h\] | \[hue(pixel)\] | ''14''\\ signed | \[-8192..+8191\] mapped into \(-180^\circ..+180^\circ\) | <code>h = pixel.hue();</code> | \[\frac{45}{2^{11}}\] | |
| 2 | \[s\] | \[sat(pixel)\] | ''8'' | \[0..255\] | <code>s = pixel.sat();</code> | \[1\] | | | 2 | \[s\] | \[sat(pixel)\] | ''8'' | \[0..255\] | <code>s = pixel.sat();</code> | \[1\] | |
| 3 | \[l\] | \[luma(pixel)\] | ''9'' | \[0..511\] mapped into \(0..255\) | <code>l = pixel.luma();</code> | \[^1/_2\] | | | 3 | \[l\] | \[luma(pixel)\] | ''9'' | \[0..511\] mapped into \(0..255\) | <code>l = pixel.luma();</code> | \[^1/_2\] | |
| 4 | \[H\] | \[(H+360^\circ) \bmod 360^\circ\] | ''12'' | \[0..4096\] mapped into \(0^\circ..+360^\circ\) | <code>H = ((h > 0 ? h : h + 16384) >> 2);</code> ((alternatively optimized into:<code>h1 = h / 4; | | 4 | \[H\] | \[(H+360^\circ) \bmod 360^\circ\] | ''12'' | \[0..4096\] mapped into \(0^\circ..+360^\circ\) | <code>H = ((h > 0 ? h : h + 16384) >> 2);</code> ((alternatively optimized into:<code>h1 = h / 4; |
H = (h1 > 0 ? h1 : h1 + 4096);</code>)) | \[\frac{360}{2^{12}}\] | | H = (h1 > 0 ? h1 : h1 + 4096);</code>)) | \[\frac{45}{2^{9}}\] | |
| | \(S\)((not needed for calculations)) | \[\frac{S}{255}\] | | \[0..1\] | | | | | | \(S\)((not needed for calculations)) | \[\frac{S}{255}\] | | \[0..1\] | | | |
| | \(L\)((not needed for calculations)) | \[\frac{S}{511}\] | | \[0..1\] | | | | | | \(L\)((not needed for calculations)) | \[\frac{S}{511}\] | | \[0..1\] | | | |
| 5 | \[L^\prime\] | \[1-|2L-1|\] | ''9'' | \[0..510\] | <code>L_prime = 2^9 - abs(2 * L - 2^9);</code> | \[\frac{1}{2^9}\] | | | 5 | \[L^\prime\] | \[1-|2L-1|\] | ''9'' | \[0..510\] | <code>L_prime = 2^9 - abs(2 * L - 2^9);</code> | \[\frac{1}{2^9}\] | |
| 6 | \[C\] | \[L^\prime \times S\] | ''9'' | \[0..510\] | <code>C = L_prime * s / 2^8</code> | \[\frac{1}{2^9}\] | | | 6 | \[C\] | \[L^\prime \times S\] | ''9'' | \[0..510\] | <code>C = L_prime * s / 2^8</code> | \[\frac{1}{2^9}\] | |
| 7 | \[H^\prime\] | \[\frac{H}{60^\circ}\] | ''12'' | \[0..4095\] mapped into \(0..6\) | <code>H_prime = H * 273 / 2^9</code> | \[\frac{180}{2^{16}}\] | | | 7 | \[H^\prime\] | \[\frac{H}{60^\circ}\] | ''12'' | \[0..4095\] mapped into \(0..6\) | <code>Hp = H * 273 / 2^9</code> | \[\frac{45}{2^{14}}\] | |
| 8 | \[\] | \[\] | '''' | \[\] | <code></code> | \[\] | | | 8 | \[H^\prime_2\] | \[H^\prime \bmod 2\] | ''10'' | \[0..727\] | <code>Hp2 = Hp - (91 * 2^3) * ((Hp * 90) >> 16)</code>((optimized from <code>Hp2 = Hp % (2^3 * 273 / 3);</code>)) | \[\frac{45}{2^{14}}\] | |
| 9 | \[\] | \[\] | '''' | \[\] | <code></code> | \[\] | | | 9 | \[\] | \[\] | '''' | \[\] | <code></code> | \[\] | |
| 10 | \[\] | \[\] | '''' | \[\] | <code></code> | \[\] | | | 10 | \[\] | \[\] | '''' | \[\] | <code></code> | \[\] | |
| |