📄 cmspack.c
字号:
}}staticLPBYTE UnrollXYZDouble(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){ if (T_PLANAR(info -> InputFormat)) { double* Pt = (double*) accum; cmsCIEXYZ XYZ; XYZ.X = Pt[0]; XYZ.Y = Pt[info->StrideIn]; XYZ.Z = Pt[info->StrideIn*2]; cmsFloat2XYZEncoded(wIn, &XYZ); return accum + sizeof(double); } else { cmsFloat2XYZEncoded(wIn, (LPcmsCIEXYZ) accum); accum += sizeof(cmsCIEXYZ); return accum; }}// Inks does come in percentagestaticLPBYTE UnrollInkDouble(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){ double* Inks = (double*) accum; int nChan = T_CHANNELS(info -> InputFormat); int Planar = T_PLANAR(info -> InputFormat); int i; double v; for (i=0; i < nChan; i++) { if (Planar) v = Inks[i * info ->StrideIn]; else v = Inks[i]; v = floor(v * 655.35 + 0.5); if (v > 65535.0) v = 65535.0; if (v < 0) v = 0; wIn[i] = (WORD) v; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(double); else return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(double);}// Remaining cases are between 0..1.0staticLPBYTE UnrollDouble(register _LPcmsTRANSFORM info, register WORD wIn[], register LPBYTE accum){ double* Inks = (double*) accum; int nChan = T_CHANNELS(info -> InputFormat); int Planar = T_PLANAR(info -> InputFormat); int i; double v; for (i=0; i < nChan; i++) { if (Planar) v = Inks[i * info ->StrideIn]; else v = Inks[i]; v = floor(v * 65535.0 + 0.5); if (v > 65535.0) v = 65535.0; if (v < 0) v = 0; wIn[i] = (WORD) v; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(double); else return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(double);}// ----------------------------------------------------------- Packing routines// Generic chunky for bytestaticLPBYTE PackNBytes(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ int nChan = T_CHANNELS(info -> OutputFormat); register int i; for (i=0; i < nChan; i++) *output++ = RGB_16_TO_8(wOut[i]); return output + T_EXTRA(info ->OutputFormat);}// Chunky reversed order bytesstaticLPBYTE PackNBytesSwap(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ int nChan = T_CHANNELS(info -> OutputFormat); register int i; for (i=nChan-1; i >= 0; --i) *output++ = RGB_16_TO_8(wOut[i]); return output + T_EXTRA(info ->OutputFormat);}staticLPBYTE PackNWords(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ int nChan = T_CHANNELS(info -> OutputFormat); register int i; for (i=0; i < nChan; i++) { *(LPWORD) output = wOut[i]; output += sizeof(WORD); } return output + T_EXTRA(info ->OutputFormat) * sizeof(WORD);}staticLPBYTE PackNWordsSwap(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ int nChan = T_CHANNELS(info -> OutputFormat); register int i; for (i=nChan-1; i >= 0; --i) { *(LPWORD) output = wOut[i]; output += sizeof(WORD); } return output + T_EXTRA(info ->OutputFormat) * sizeof(WORD);}staticLPBYTE PackNWordsBigEndian(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ int nChan = T_CHANNELS(info -> OutputFormat); register int i; for (i=0; i < nChan; i++) { *(LPWORD) output = CHANGE_ENDIAN(wOut[i]); output += sizeof(WORD); } return output + T_EXTRA(info ->OutputFormat) * sizeof(WORD);}staticLPBYTE PackNWordsSwapBigEndian(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ int nChan = T_CHANNELS(info -> OutputFormat); register int i; for (i=nChan-1; i >= 0; --i) { *(LPWORD) output = CHANGE_ENDIAN(wOut[i]); output += sizeof(WORD); } return output + T_EXTRA(info ->OutputFormat) * sizeof(WORD);}staticLPBYTE PackPlanarBytes(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ int nChan = T_CHANNELS(info -> OutputFormat); register int i; LPBYTE Init = output; for (i=0; i < nChan; i++) { *(LPBYTE) output = RGB_16_TO_8(wOut[i]); output += info -> StrideOut; } return (Init + 1);}staticLPBYTE PackPlanarWords(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ int nChan = T_CHANNELS(info -> OutputFormat); register int i; LPBYTE Init = output; for (i=0; i < nChan; i++) { *(LPWORD) output = wOut[i]; output += (info -> StrideOut * sizeof(WORD)); } return (Init + 2);}// CMYKcm (unrolled for speed)staticLPBYTE Pack6Bytes(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[0]); *output++ = RGB_16_TO_8(wOut[1]); *output++ = RGB_16_TO_8(wOut[2]); *output++ = RGB_16_TO_8(wOut[3]); *output++ = RGB_16_TO_8(wOut[4]); *output++ = RGB_16_TO_8(wOut[5]); return output;}// KCMYcmstaticLPBYTE Pack6BytesSwap(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[3]); *output++ = RGB_16_TO_8(wOut[0]); *output++ = RGB_16_TO_8(wOut[1]); *output++ = RGB_16_TO_8(wOut[2]); *output++ = RGB_16_TO_8(wOut[4]); *output++ = RGB_16_TO_8(wOut[5]); return output;}// CMYKcmstaticLPBYTE Pack6Words(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = wOut[0]; output+= 2; *(LPWORD) output = wOut[1]; output+= 2; *(LPWORD) output = wOut[2]; output+= 2; *(LPWORD) output = wOut[3]; output+= 2; *(LPWORD) output = wOut[4]; output+= 2; *(LPWORD) output = wOut[5]; output+= 2; return output;}// KCMYcmstaticLPBYTE Pack6WordsSwap(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = wOut[3]; output+= 2; *(LPWORD) output = wOut[0]; output+= 2; *(LPWORD) output = wOut[1]; output+= 2; *(LPWORD) output = wOut[2]; output+= 2; *(LPWORD) output = wOut[4]; output+= 2; *(LPWORD) output = wOut[5]; output+= 2; return output;}// CMYKcmstaticLPBYTE Pack6WordsBigEndian(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = CHANGE_ENDIAN(wOut[0]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[1]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[2]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[3]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[4]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[5]); output+= 2; return output;}// KCMYcmstaticLPBYTE Pack6WordsSwapBigEndian(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = CHANGE_ENDIAN(wOut[3]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[0]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[1]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[2]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[4]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[5]); output+= 2; return output;}staticLPBYTE Pack4Bytes(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[0]); *output++ = RGB_16_TO_8(wOut[1]); *output++ = RGB_16_TO_8(wOut[2]); *output++ = RGB_16_TO_8(wOut[3]); return output;}staticLPBYTE Pack4BytesReverse(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = REVERSE_FLAVOR_8(RGB_16_TO_8(wOut[0])); *output++ = REVERSE_FLAVOR_8(RGB_16_TO_8(wOut[1])); *output++ = REVERSE_FLAVOR_8(RGB_16_TO_8(wOut[2])); *output++ = REVERSE_FLAVOR_8(RGB_16_TO_8(wOut[3])); return output;}staticLPBYTE Pack4BytesSwapFirst(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[3]); *output++ = RGB_16_TO_8(wOut[0]); *output++ = RGB_16_TO_8(wOut[1]); *output++ = RGB_16_TO_8(wOut[2]); return output;}// ABGRstaticLPBYTE Pack4BytesSwap(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[3]); *output++ = RGB_16_TO_8(wOut[2]); *output++ = RGB_16_TO_8(wOut[1]); *output++ = RGB_16_TO_8(wOut[0]); return output;}staticLPBYTE Pack4BytesSwapSwapFirst(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[2]); *output++ = RGB_16_TO_8(wOut[1]); *output++ = RGB_16_TO_8(wOut[0]); *output++ = RGB_16_TO_8(wOut[3]); return output;}staticLPBYTE Pack4Words(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = wOut[0]; output+= 2; *(LPWORD) output = wOut[1]; output+= 2; *(LPWORD) output = wOut[2]; output+= 2; *(LPWORD) output = wOut[3]; output+= 2; return output;}staticLPBYTE Pack4WordsReverse(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = REVERSE_FLAVOR_16(wOut[0]); output+= 2; *(LPWORD) output = REVERSE_FLAVOR_16(wOut[1]); output+= 2; *(LPWORD) output = REVERSE_FLAVOR_16(wOut[2]); output+= 2; *(LPWORD) output = REVERSE_FLAVOR_16(wOut[3]); output+= 2; return output;}// ABGRstaticLPBYTE Pack4WordsSwap(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = wOut[3]; output+= 2; *(LPWORD) output = wOut[2]; output+= 2; *(LPWORD) output = wOut[1]; output+= 2; *(LPWORD) output = wOut[0]; output+= 2; return output;}// CMYKstaticLPBYTE Pack4WordsBigEndian(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = CHANGE_ENDIAN(wOut[0]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[1]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[2]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[3]); output+= 2; return output;}staticLPBYTE Pack4WordsBigEndianReverse(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = CHANGE_ENDIAN(REVERSE_FLAVOR_16(wOut[0])); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(REVERSE_FLAVOR_16(wOut[1])); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(REVERSE_FLAVOR_16(wOut[2])); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(REVERSE_FLAVOR_16(wOut[3])); output+= 2; return output;}// KYMCstaticLPBYTE Pack4WordsSwapBigEndian(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = CHANGE_ENDIAN(wOut[3]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[2]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[1]); output+= 2; *(LPWORD) output = CHANGE_ENDIAN(wOut[0]); output+= 2; return output;}staticLPBYTE Pack3Bytes(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[0]); *output++ = RGB_16_TO_8(wOut[1]); *output++ = RGB_16_TO_8(wOut[2]); return output;}staticLPBYTE Pack3BytesLab(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *output++ = (BYTE) (wOut[0] >> 8); *output++ = (BYTE) (wOut[1] >> 8); *output++ = (BYTE) (wOut[2] >> 8); return output;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -