📄 cmspack.c
字号:
if (T_FLAVOR(dwInput)) FromInput = Unroll4BytesReverse; else FromInput = Unroll4Bytes; } } break; case 5: case 6: case 7: case 8: if (!T_DOSWAP(dwInput) && !T_SWAPFIRST(dwInput)) FromInput = UnrollAnyBytes; break; default:; } break; case 2: // 1 word per channel switch (T_CHANNELS(dwInput) + T_EXTRA(dwInput)) { case 1: if (T_ENDIAN16(dwInput)) FromInput = Unroll1WordBigEndian; else if (T_FLAVOR(dwInput)) FromInput = Unroll1WordReversed; else FromInput = Unroll1Word; break; case 2: if (T_ENDIAN16(dwInput)) FromInput = Unroll2WordBigEndian; else { if (T_SWAPFIRST(dwInput)) FromInput = Unroll2WordSwapFirst; else FromInput = Unroll2Word; } break; case 3: if (T_DOSWAP(dwInput)) { if (T_ENDIAN16(dwInput)) FromInput = Unroll3WordsSwapBigEndian; else FromInput = Unroll3WordsSwap; } else { if (T_ENDIAN16(dwInput)) FromInput = Unroll3WordsBigEndian; else FromInput = Unroll3Words; } break; case 4: if (T_DOSWAP(dwInput)) { if (T_ENDIAN16(dwInput)) FromInput = Unroll4WordsSwapBigEndian; else { if (T_SWAPFIRST(dwInput)) FromInput = Unroll4WordsSwapSwapFirst; else FromInput = Unroll4WordsSwap; } } else { if (T_EXTRA(dwInput) == 3) FromInput = Unroll1WordSkip3; else if (T_ENDIAN16(dwInput)) { if (T_FLAVOR(dwInput)) FromInput = Unroll4WordsBigEndianReverse; else FromInput = Unroll4WordsBigEndian; } else { if (T_SWAPFIRST(dwInput)) FromInput = Unroll4WordsSwapFirst; else { if (T_FLAVOR(dwInput)) FromInput = Unroll4WordsReverse; else FromInput = Unroll4Words; } } } break; case 5: case 6: case 7: case 8: if (!T_DOSWAP(dwInput) && !T_SWAPFIRST(dwInput)) FromInput = UnrollAnyWords; break; } break; default:; } } } if (!FromInput) cmsSignalError(LCMS_ERRC_ABORTED, "Unknown input format"); return FromInput;}// choose routine from Input identifier_cmsFIXFN _cmsIdentifyOutputFormat(_LPcmsTRANSFORM xform, DWORD dwOutput){ _cmsFIXFN ToOutput = NULL; if (T_BYTES(dwOutput) == 0) { switch (T_COLORSPACE(dwOutput)) { case PT_Lab: ToOutput = PackLabDouble; break; case PT_XYZ: ToOutput = PackXYZDouble; 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: ToOutput = PackDouble; break; // Inks (%) 0.0 .. 100.0 default: ToOutput = PackInkDouble; break; } } else if (T_PLANAR(dwOutput)) { switch (T_BYTES(dwOutput)) { case 1: ToOutput = PackPlanarBytes; break; case 2:if (!T_ENDIAN16(dwOutput)) ToOutput = PackPlanarWords; break; default:; } } else { switch (T_BYTES(dwOutput)) { case 1: switch (T_CHANNELS(dwOutput)) { case 1: ToOutput = Pack1Byte; if (T_EXTRA(dwOutput) == 1) { if (T_SWAPFIRST(dwOutput)) ToOutput = Pack1ByteAndSkip1SwapFirst; else ToOutput = Pack1ByteAndSkip1; } break; case 3: switch (T_EXTRA(dwOutput)) { case 0: if (T_DOSWAP(dwOutput)) ToOutput = Pack3BytesSwap; else if (T_COLORSPACE(dwOutput) == PT_Lab) ToOutput = Pack3BytesLab; else ToOutput = Pack3Bytes; break; case 1: // TODO: ALab8 should be handled here if (T_DOSWAP(dwOutput)) { if (T_SWAPFIRST(dwOutput)) ToOutput = Pack3BytesAndSkip1SwapSwapFirst; else ToOutput = Pack3BytesAndSkip1Swap; } else { if (T_SWAPFIRST(dwOutput)) ToOutput = Pack3BytesAndSkip1SwapFirst; else ToOutput = Pack3BytesAndSkip1; } break; default:; } break; case 4: if (T_EXTRA(dwOutput) == 0) { if (T_DOSWAP(dwOutput)) { if (T_SWAPFIRST(dwOutput)) ToOutput = Pack4BytesSwapSwapFirst; else ToOutput = Pack4BytesSwap; } else { if (T_SWAPFIRST(dwOutput)) ToOutput = Pack4BytesSwapFirst; else { if (T_FLAVOR(dwOutput)) ToOutput = Pack4BytesReverse; else ToOutput = Pack4Bytes; } } } else { if (!T_DOSWAP(dwOutput) && !T_SWAPFIRST(dwOutput)) ToOutput = PackNBytes; } break; // Hexachrome separations. case 6: if (T_EXTRA(dwOutput) == 0) { if( T_DOSWAP(dwOutput)) ToOutput = Pack6BytesSwap; else ToOutput = Pack6Bytes; } else { if (!T_DOSWAP(dwOutput) && !T_SWAPFIRST(dwOutput)) ToOutput = PackNBytes; } break; case 2: case 5: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: if ((T_EXTRA(dwOutput) == 0) && (T_SWAPFIRST(dwOutput) == 0)) { if (T_DOSWAP(dwOutput)) ToOutput = PackNBytesSwap; else ToOutput = PackNBytes; } break; default:; } break; case 2: switch (T_CHANNELS(dwOutput)) { case 1: if (T_ENDIAN16(dwOutput)) ToOutput = Pack1WordBigEndian; else ToOutput = Pack1Word; if (T_EXTRA(dwOutput) == 1) { if (T_ENDIAN16(dwOutput)) ToOutput = Pack1WordAndSkip1BigEndian; else { if (T_SWAPFIRST(dwOutput)) ToOutput = Pack1WordAndSkip1SwapFirst; else ToOutput = Pack1WordAndSkip1; } } break; case 3: switch (T_EXTRA(dwOutput)) { case 0: if (T_DOSWAP(dwOutput)) { if (T_ENDIAN16(dwOutput)) ToOutput = Pack3WordsSwapBigEndian; else ToOutput = Pack3WordsSwap; } else { if (T_ENDIAN16(dwOutput)) ToOutput = Pack3WordsBigEndian; else ToOutput = Pack3Words; } break; case 1: if (T_DOSWAP(dwOutput)) { if (T_ENDIAN16(dwOutput)) ToOutput = Pack3WordsAndSkip1SwapBigEndian; else { if (T_SWAPFIRST(dwOutput)) ToOutput = Pack3WordsAndSkip1SwapSwapFirst; else ToOutput = Pack3WordsAndSkip1Swap; } } else { if (T_ENDIAN16(dwOutput)) ToOutput = Pack3WordsAndSkip1BigEndian; else ToOutput = Pack3WordsAndSkip1; } default:; } break; case 4: if (T_EXTRA(dwOutput) == 0) { if (T_DOSWAP(dwOutput)) { if (T_ENDIAN16(dwOutput)) ToOutput = Pack4WordsSwapBigEndian; else ToOutput = Pack4WordsSwap; } else { if (T_ENDIAN16(dwOutput)) { if (T_FLAVOR(dwOutput)) ToOutput = Pack4WordsBigEndianReverse; else ToOutput = Pack4WordsBigEndian; } else { if (T_FLAVOR(dwOutput)) ToOutput = Pack4WordsReverse; else ToOutput = Pack4Words; } } } else { if (!T_DOSWAP(dwOutput) && !T_SWAPFIRST(dwOutput)) ToOutput = PackNWords; } break; case 6: if (T_EXTRA(dwOutput) == 0) { if (T_DOSWAP(dwOutput)) { if (T_ENDIAN16(dwOutput)) ToOutput = Pack6WordsSwapBigEndian; else ToOutput = Pack6WordsSwap; } else { if (T_ENDIAN16(dwOutput)) ToOutput = Pack6WordsBigEndian; else ToOutput = Pack6Words; } } else { if (!T_DOSWAP(dwOutput) && !T_SWAPFIRST(dwOutput)) ToOutput = PackNWords; } break; case 2: case 5: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: if ((T_EXTRA(dwOutput) == 0) && (T_SWAPFIRST(dwOutput) == 0)) { if (T_DOSWAP(dwOutput)) { if (T_ENDIAN16(dwOutput)) ToOutput = PackNWordsSwapBigEndian; else ToOutput = PackNWordsSwap; } else { if (T_ENDIAN16(dwOutput)) ToOutput = PackNWordsBigEndian; else ToOutput = PackNWords; } } break; default:; } break; default:; } } if (!ToOutput) cmsSignalError(LCMS_ERRC_ABORTED, "Unknown output format"); return ToOutput;}// User formatters for (weird) cases not already includedvoid LCMSEXPORT cmsSetUserFormatters(cmsHTRANSFORM hTransform, DWORD dwInput, cmsFORMATTER Input, DWORD dwOutput, cmsFORMATTER Output){ _LPcmsTRANSFORM xform = (_LPcmsTRANSFORM) (LPSTR) hTransform; if (Input != NULL) { xform ->FromInput = (_cmsFIXFN) Input; xform ->InputFormat = dwInput; } if (Output != NULL) { xform ->ToOutput = (_cmsFIXFN) Output; xform ->OutputFormat = dwOutput; }}void LCMSEXPORT cmsGetUserFormatters(cmsHTRANSFORM hTransform, LPDWORD InputFormat, cmsFORMATTER* Input, LPDWORD OutputFormat, cmsFORMATTER* Output){ _LPcmsTRANSFORM xform = (_LPcmsTRANSFORM) (LPSTR) hTransform; *Input = (cmsFORMATTER) xform ->FromInput; *InputFormat = xform -> InputFormat; *Output = (cmsFORMATTER) xform ->ToOutput; *OutputFormat = xform -> OutputFormat;}// Change format of yet existing transform. No colorspace checking is performedvoid LCMSEXPORT cmsChangeBuffersFormat(cmsHTRANSFORM hTransform, DWORD dwInputFormat, DWORD dwOutputFormat){ cmsSetUserFormatters(hTransform, dwInputFormat, (cmsFORMATTER) _cmsIdentifyInputFormat((_LPcmsTRANSFORM ) hTransform, dwInputFormat), dwOutputFormat, (cmsFORMATTER) _cmsIdentifyOutputFormat((_LPcmsTRANSFORM ) hTransform, dwOutputFormat));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -