diff options
author | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2014-04-04 14:59:13 +0200 |
---|---|---|
committer | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2014-04-04 14:59:13 +0200 |
commit | 168d996f23d74ea2a47b4d06e841e3fc9a87f97a (patch) | |
tree | acd89543ca9c85cf35e6d07fd66a7fd3b2c47669 | |
parent | b1d482cb6fa2182e15d73b0bb0d339c4000fc695 (diff) |
First try of YIQ
Change-Id: I14e981584a5d62cc9e1eff8da5821530c99ff43c
-rw-r--r-- | src/lib/CDRCollector.cpp | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/lib/CDRCollector.cpp b/src/lib/CDRCollector.cpp index 01d318b..9ac58e5 100644 --- a/src/lib/CDRCollector.cpp +++ b/src/lib/CDRCollector.cpp @@ -479,12 +479,46 @@ unsigned libcdr::CDRParserState::_getRGBColor(const CDRColor &color) } // YIQ case 0x0a: - { - break; - } // YIQ255 case 0x0b: { + double y = (double)col0; + double i = (double)col1; + double q = (double)col2; + if (colorModel == 0x0a) + { + y /= 100.0; + i /= 100.0; + q /= 100.0; + } + else + { + y /= 255.0; + i /= 255.0; + q /= 255.0; + } + i /= 2.0*0.5957; + i -= 0.5957; + q /= 2.0*0.5226; + q -= 0.5226; + double RR = y + 0.9563*i + 0.6210*q; + double GG = y - 0.2127*i - 0.6474*q; + double BB = y - 1.1070*i + 1.7046*q; + if (RR > 1.0) + RR = 1.0; + if (RR < 0.0) + RR = 0.0; + if (GG > 1.0) + GG = 1.0; + if (GG < 0.0) + GG = 0.0; + if (BB > 1.0) + BB = 1.0; + if (BB < 0.0) + BB = 0.0; + red = (unsigned char)cdr_round(255*RR); + green = (unsigned char)cdr_round(255*GG); + blue = (unsigned char)cdr_round(255*BB); break; } // Lab |