diff options
author | Marti Maria <mmaria@abindustries.com> | 2021-12-21 17:33:25 +0100 |
---|---|---|
committer | Marti Maria <mmaria@abindustries.com> | 2021-12-21 17:33:25 +0100 |
commit | 24cce00ca8dde820d765e059dba1c583d09123a5 (patch) | |
tree | 52a14a90ca2f10fa07a1db9c81c2b85b6ba0bea3 /src/cmspack.c | |
parent | e9951c3d3ac9a8200e724e45f04f2040b934521d (diff) | |
download | lcms2-24cce00ca8dde820d765e059dba1c583d09123a5.tar.gz |
tifficc premultiplied alpha
First attempt to add premultiplied alpha support
Other cosmetic changes
Diffstat (limited to 'src/cmspack.c')
-rw-r--r-- | src/cmspack.c | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/src/cmspack.c b/src/cmspack.c index 6a72edc..9e18e69 100644 --- a/src/cmspack.c +++ b/src/cmspack.c @@ -112,14 +112,14 @@ cmsUInt8Number* UnrollChunkyBytes(CMSREGISTER _cmsTRANSFORM* info, if (ExtraFirst) { - if (Premul) + if (Premul && Extra) alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(accum[0])); accum += Extra; } else { - if (Premul) - alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(accum[nChan - 1])); + if (Premul && Extra) + alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(accum[nChan])); } for (i=0; i < nChan; i++) { @@ -178,7 +178,7 @@ cmsUInt8Number* UnrollPlanarBytes(CMSREGISTER _cmsTRANSFORM* info, if (ExtraFirst) { - if (Premul) + if (Premul && Extra) alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(accum[0])); @@ -186,8 +186,8 @@ cmsUInt8Number* UnrollPlanarBytes(CMSREGISTER _cmsTRANSFORM* info, } else { - if (Premul) - alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(accum[(nChan - 1) * Stride])); + if (Premul && Extra) + alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(accum[(nChan) * Stride])); } for (i=0; i < nChan; i++) { @@ -1348,12 +1348,12 @@ cmsUInt8Number* UnrollFloatsToFloat(_cmsTRANSFORM* info, Stride /= PixelSize(info->InputFormat); - if (Premul) + if (Premul && Extra) { if (Planar) - alpha_factor = (ExtraFirst ? ptr[0] : ptr[(nChan - 1) * Stride]) / maximum; + alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan * Stride]) / maximum; else - alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan - 1]) / maximum; + alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan]) / maximum; } if (ExtraFirst) @@ -1368,7 +1368,7 @@ cmsUInt8Number* UnrollFloatsToFloat(_cmsTRANSFORM* info, else v = ptr[i + start]; - if (Premul) + if (Premul && alpha_factor > 0) v /= alpha_factor; v /= maximum; @@ -1415,12 +1415,12 @@ cmsUInt8Number* UnrollDoublesToFloat(_cmsTRANSFORM* info, Stride /= PixelSize(info->InputFormat); - if (Premul) + if (Premul && Extra) { if (Planar) - alpha_factor = (ExtraFirst ? ptr[0] : ptr[(nChan - 1) * Stride]) / maximum; + alpha_factor = (ExtraFirst ? ptr[0] : ptr[(nChan) * Stride]) / maximum; else - alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan - 1]) / maximum; + alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan]) / maximum; } if (ExtraFirst) @@ -1436,7 +1436,7 @@ cmsUInt8Number* UnrollDoublesToFloat(_cmsTRANSFORM* info, v = (cmsFloat64Number) ((cmsFloat64Number*) accum)[i + start]; - if (Premul) + if (Premul && alpha_factor > 0) v /= alpha_factor; v /= maximum; @@ -1680,15 +1680,15 @@ cmsUInt8Number* PackChunkyBytes(CMSREGISTER _cmsTRANSFORM* info, if (ExtraFirst) { - if (Premul) + if (Premul && Extra) alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(output[0])); output += Extra; } else { - if (Premul) - alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(output[nChan - 1])); + if (Premul && Extra) + alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(output[nChan])); } for (i=0; i < nChan; i++) { @@ -1746,15 +1746,15 @@ cmsUInt8Number* PackChunkyWords(CMSREGISTER _cmsTRANSFORM* info, if (ExtraFirst) { - if (Premul) + if (Premul && Extra) alpha_factor = _cmsToFixedDomain(*(cmsUInt16Number*) output); output += Extra * sizeof(cmsUInt16Number); } else { - if (Premul) - alpha_factor = _cmsToFixedDomain(((cmsUInt16Number*) output)[nChan - 1]); + if (Premul && Extra) + alpha_factor = _cmsToFixedDomain(((cmsUInt16Number*) output)[nChan]); } for (i=0; i < nChan; i++) { @@ -1816,15 +1816,15 @@ cmsUInt8Number* PackPlanarBytes(CMSREGISTER _cmsTRANSFORM* info, if (ExtraFirst) { - if (Premul) + if (Premul && Extra) alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(output[0])); output += Extra * Stride; } else { - if (Premul) - alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(output[(nChan - 1) * Stride])); + if (Premul && Extra) + alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(output[nChan * Stride])); } @@ -1872,15 +1872,15 @@ cmsUInt8Number* PackPlanarWords(CMSREGISTER _cmsTRANSFORM* info, if (ExtraFirst) { - if (Premul) + if (Premul && Extra) alpha_factor = _cmsToFixedDomain(((cmsUInt16Number*) output)[0]); output += Extra * Stride; } else { - if (Premul) - alpha_factor = _cmsToFixedDomain(((cmsUInt16Number*)output)[(nChan - 1) * Stride]); + if (Premul && Extra) + alpha_factor = _cmsToFixedDomain(((cmsUInt16Number*)output)[nChan * Stride]); } for (i=0; i < nChan; i++) { |