diff options
author | Patrick Noffke <patrick.noffke@gmail.com> | 2013-11-14 10:05:41 -0600 |
---|---|---|
committer | Patrick Noffke <patrick.noffke@gmail.com> | 2013-11-14 10:05:41 -0600 |
commit | ee00cc8164088621a4cb85e0cad383981e5c7a9b (patch) | |
tree | 44e725fe11c83373d3f27bd8a2ba6a240955a7dd | |
parent | 69ecafd3b1638cc76ae0b005277120fe15c5bbda (diff) | |
download | lcms2-ee00cc8164088621a4cb85e0cad383981e5c7a9b.tar.gz |
Add PackXYZFloatFrom16 output formatter for TYPE_XYZ_FLT.
Transforms created with TYPE_XYZ_FLT would otherwise result in XYZ
values that were off (too small) by a factor of 2.
-rw-r--r-- | AUTHORS | 3 | ||||
-rw-r--r-- | src/cmspack.c | 34 |
2 files changed, 36 insertions, 1 deletions
@@ -31,6 +31,7 @@ Christian Schmitz XhmikosR Stanislav Brabec (SuSe) Leonhard Gruenschloss (Google) +Patrick Noffke Special Thanks -------------- @@ -40,4 +41,4 @@ Harald Schneider (Maxon) Christian Albrecht Dimitrios Anastassakis Lemke Software -Tim Zaman
\ No newline at end of file +Tim Zaman diff --git a/src/cmspack.c b/src/cmspack.c index d54a8cf..5677e07 100644 --- a/src/cmspack.c +++ b/src/cmspack.c @@ -2305,6 +2305,39 @@ cmsUInt8Number* PackXYZDoubleFrom16(register _cmsTRANSFORM* Info, } static +cmsUInt8Number* PackXYZFloatFrom16(register _cmsTRANSFORM* Info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) +{ + if (T_PLANAR(Info -> OutputFormat)) { + + cmsCIEXYZ XYZ; + cmsFloat32Number* Out = (cmsFloat32Number*) output; + cmsXYZEncoded2Float(&XYZ, wOut); + + Out[0] = XYZ.X; + Out[Stride] = XYZ.Y; + Out[Stride*2] = XYZ.Z; + + return output + sizeof(cmsFloat32Number); + + } + else { + + cmsCIEXYZ XYZ; + cmsFloat32Number* Out = (cmsFloat32Number*) output; + cmsXYZEncoded2Float(&XYZ, wOut); + + Out[0] = XYZ.X; + Out[1] = XYZ.Y; + Out[2] = XYZ.Z; + + return output + (3 * sizeof(cmsFloat32Number) + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat32Number)); + } +} + +static cmsUInt8Number* PackDoubleFrom16(register _cmsTRANSFORM* info, register cmsUInt16Number wOut[], register cmsUInt8Number* output, @@ -2998,6 +3031,7 @@ static cmsFormatters16 OutputFormatters16[] = { { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, PackXYZDoubleFrom16}, { TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, PackLabFloatFrom16}, + { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, PackXYZFloatFrom16}, { FLOAT_SH(1)|BYTES_SH(0), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP| ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackDoubleFrom16}, |