📄 cmspack.c
字号:
}staticLPBYTE Pack3BytesSwap(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]); return output;}staticLPBYTE Pack3Words(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; return output;}staticLPBYTE Pack3WordsSwap(register _LPcmsTRANSFORM info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = wOut[2]; output+= 2; *(LPWORD) output = wOut[1]; output+= 2; *(LPWORD) output = wOut[0]; output+= 2; return output;}staticLPBYTE Pack3WordsBigEndian(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; return output;}staticLPBYTE Pack3WordsSwapBigEndian(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ *(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 Pack3BytesAndSkip1(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++; return output;}staticLPBYTE Pack3BytesAndSkip1SwapFirst(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ 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 Pack3BytesAndSkip1Swap(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ output++; *output++ = RGB_16_TO_8(wOut[2]); *output++ = RGB_16_TO_8(wOut[1]); *output++ = RGB_16_TO_8(wOut[0]); return output;}staticLPBYTE Pack3BytesAndSkip1SwapSwapFirst(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++; return output;}staticLPBYTE Pack3WordsAndSkip1(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; output+= 2; return output;}staticLPBYTE Pack3WordsAndSkip1Swap(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ output+= 2; *(LPWORD) output = wOut[2]; output+= 2; *(LPWORD) output = wOut[1]; output+= 2; *(LPWORD) output = wOut[0]; output+= 2; return output;}staticLPBYTE Pack3WordsAndSkip1SwapSwapFirst(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = wOut[2]; output+= 2; *(LPWORD) output = wOut[1]; output+= 2; *(LPWORD) output = wOut[0]; output+= 2; output+= 2; return output;}staticLPBYTE Pack3WordsAndSkip1BigEndian(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; output+= 2; return output;}staticLPBYTE Pack3WordsAndSkip1SwapBigEndian(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ 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 Pack1Byte(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[0]); return output;}staticLPBYTE Pack1ByteAndSkip1(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ *output++ = RGB_16_TO_8(wOut[0]); output++; return output;}staticLPBYTE Pack1ByteAndSkip1SwapFirst(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ output++; *output++ = RGB_16_TO_8(wOut[0]); return output;}staticLPBYTE Pack1Word(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = wOut[0]; output+= 2; return output;}staticLPBYTE Pack1WordBigEndian(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = CHANGE_ENDIAN(wOut[0]); output+= 2; return output;}staticLPBYTE Pack1WordAndSkip1(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = wOut[0]; output+= 4; return output;}staticLPBYTE Pack1WordAndSkip1SwapFirst(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ output += 2; *(LPWORD) output = wOut[0]; output+= 2; return output;}staticLPBYTE Pack1WordAndSkip1BigEndian(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ *(LPWORD) output = CHANGE_ENDIAN(wOut[0]); output+= 4; return output;}// Unencoded Float values -- don't try optimize speedstaticLPBYTE PackLabDouble(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ if (T_PLANAR(Info -> OutputFormat)) { cmsCIELab Lab; double* Out = (double*) output; cmsLabEncoded2Float(&Lab, wOut); Out[0] = Lab.L; Out[Info ->StrideOut] = Lab.a; Out[Info ->StrideOut*2] = Lab.b; return output + sizeof(double); } else { if (Info ->lOutputV4Lab) cmsLabEncoded2Float4((LPcmsCIELab) output, wOut); else cmsLabEncoded2Float((LPcmsCIELab) output, wOut); output += sizeof(cmsCIELab); return output; }}staticLPBYTE PackXYZDouble(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ if (T_PLANAR(Info -> OutputFormat)) { cmsCIEXYZ XYZ; double* Out = (double*) output; cmsXYZEncoded2Float(&XYZ, wOut); Out[0] = XYZ.X; Out[Info ->StrideOut] = XYZ.Y; Out[Info ->StrideOut*2] = XYZ.Z; return output + sizeof(double); } else { cmsXYZEncoded2Float((LPcmsCIEXYZ) output, wOut); output += sizeof(cmsCIEXYZ); return output; }}staticLPBYTE PackInkDouble(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ double* Inks = (double*) output; int nChan = T_CHANNELS(Info -> OutputFormat); int i; if (T_PLANAR(Info -> OutputFormat)) { for (i=0; i < nChan; i++) { Inks[i*Info ->StrideOut] = wOut[i] / 655.35; } return output + sizeof(double); } else { for (i=0; i < nChan; i++) { Inks[i] = wOut[i] / 655.35; } return output + (nChan + T_EXTRA(Info ->OutputFormat)) * sizeof(double); }}staticLPBYTE PackDouble(register _LPcmsTRANSFORM Info, register WORD wOut[], register LPBYTE output){ double* Inks = (double*) output; int nChan = T_CHANNELS(Info -> OutputFormat); int i; if (T_PLANAR(Info -> OutputFormat)) { for (i=0; i < nChan; i++) { Inks[i*Info ->StrideOut] = wOut[i] / 65535.0; } return output + sizeof(double); } else { for (i=0; i < nChan; i++) { Inks[i] = wOut[i] / 65535.0; } return output + (nChan + T_EXTRA(Info ->OutputFormat)) * sizeof(double); }}// choose routine from Input identifier_cmsFIXFN _cmsIdentifyInputFormat(_LPcmsTRANSFORM xform, DWORD dwInput){ _cmsFIXFN FromInput = NULL; // Check Named Color if (xform) { if (xform ->InputProfile) { if (cmsGetDeviceClass(xform ->InputProfile) == icSigNamedColorClass) { if (dwInput != TYPE_NAMED_COLOR_INDEX) { cmsSignalError(LCMS_ERRC_ABORTED, "Named color needs TYPE_NAMED_COLOR_INDEX"); return NULL; } } } } // Unencoded modes if (T_BYTES(dwInput) == 0) { switch (T_COLORSPACE(dwInput)) { case PT_Lab: FromInput = UnrollLabDouble; break; case PT_XYZ: FromInput = UnrollXYZDouble; break; // 0.0 .. 1.0 range case PT_GRAY: case PT_RGB: case PT_YCbCr: case PT_YUV: case PT_YUVK: case PT_HSV: case PT_HLS: case PT_Yxy: FromInput = UnrollDouble; break; // Inks (%) 0.0 .. 100.0 default: FromInput = UnrollInkDouble; break; } } else { if (T_PLANAR(dwInput)) { switch (T_BYTES(dwInput)) { case 1: FromInput = UnrollPlanarBytes; break; case 2: if (T_ENDIAN16(dwInput)) FromInput = UnrollPlanarWordsBigEndian; else FromInput = UnrollPlanarWords; break; default:; } } else { switch (T_BYTES(dwInput)) { case 1: // 1 byte per channel switch (T_CHANNELS(dwInput) + T_EXTRA(dwInput)) { case 1: if (T_FLAVOR(dwInput)) FromInput = Unroll1ByteReversed; else FromInput = Unroll1Byte; break; case 2: if (T_SWAPFIRST(dwInput)) FromInput = Unroll2ByteSwapFirst; else FromInput = Unroll2Byte; break; case 3: if (T_DOSWAP(dwInput)) FromInput = Unroll3BytesSwap; else { if (T_EXTRA(dwInput) == 2) FromInput = Unroll1ByteSkip2; else if (T_COLORSPACE(dwInput) == PT_Lab) FromInput = Unroll3BytesLab; else FromInput = Unroll3Bytes; } break; case 4: // TODO: ALab8 must be fixed to match v2 encoding if (T_DOSWAP(dwInput)) { if (T_SWAPFIRST(dwInput)) FromInput = Unroll4BytesSwapSwapFirst; else FromInput = Unroll4BytesSwap; } else { if (T_SWAPFIRST(dwInput)) FromInput = Unroll4BytesSwapFirst; else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -