| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fxcodec/codec/codec_int.h" | 7 #include "core/fxcodec/codec/codec_int.h" |
| 8 #include "core/fxcodec/fx_codec.h" | 8 #include "core/fxcodec/fx_codec.h" |
| 9 #include "third_party/lcms2-2.6/include/lcms2.h" | 9 #include "third_party/lcms2-2.6/include/lcms2.h" |
| 10 | 10 |
| 11 const uint32_t N_COMPONENT_LAB = 3; |
| 12 const uint32_t N_COMPONENT_GRAY = 1; |
| 13 const uint32_t N_COMPONENT_RGB = 3; |
| 14 const uint32_t N_COMPONENT_CMYK = 4; |
| 15 const uint32_t N_COMPONENT_DEFAULT = 3; |
| 16 |
| 11 struct CLcmsCmm { | 17 struct CLcmsCmm { |
| 12 cmsHTRANSFORM m_hTransform; | 18 cmsHTRANSFORM m_hTransform; |
| 13 int m_nSrcComponents; | 19 int m_nSrcComponents; |
| 14 int m_nDstComponents; | 20 int m_nDstComponents; |
| 15 bool m_bLab; | 21 bool m_bLab; |
| 16 }; | 22 }; |
| 17 bool CheckComponents(cmsColorSpaceSignature cs, int nComponents, bool bDst) { | 23 bool CheckComponents(cmsColorSpaceSignature cs, int nComponents, bool bDst) { |
| 18 if (nComponents <= 0 || nComponents > 15) { | 24 if (nComponents <= 0 || nComponents > 15) { |
| 19 return false; | 25 return false; |
| 20 } | 26 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 44 break; | 50 break; |
| 45 default: | 51 default: |
| 46 if (nComponents != 3) { | 52 if (nComponents != 3) { |
| 47 return false; | 53 return false; |
| 48 } | 54 } |
| 49 break; | 55 break; |
| 50 } | 56 } |
| 51 return true; | 57 return true; |
| 52 } | 58 } |
| 53 | 59 |
| 60 uint32_t GetCSComponents(cmsColorSpaceSignature cs) { |
| 61 uint32_t components; |
| 62 switch (cs) { |
| 63 case cmsSigLabData: |
| 64 components = N_COMPONENT_LAB; |
| 65 break; |
| 66 case cmsSigGrayData: |
| 67 components = N_COMPONENT_GRAY; |
| 68 break; |
| 69 case cmsSigRgbData: |
| 70 components = N_COMPONENT_RGB; |
| 71 break; |
| 72 case cmsSigCmykData: |
| 73 components = N_COMPONENT_CMYK; |
| 74 break; |
| 75 default: |
| 76 components = N_COMPONENT_DEFAULT; |
| 77 break; |
| 78 } |
| 79 return components; |
| 80 } |
| 81 |
| 54 void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, | 82 void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, |
| 55 uint32_t dwSrcProfileSize, | 83 uint32_t dwSrcProfileSize, |
| 56 uint32_t& nSrcComponents, | 84 uint32_t& nSrcComponents, |
| 57 const unsigned char* pDstProfileData, | 85 const unsigned char* pDstProfileData, |
| 58 uint32_t dwDstProfileSize, | 86 uint32_t dwDstProfileSize, |
| 59 int32_t nDstComponents, | 87 int32_t nDstComponents, |
| 60 int intent, | 88 int intent, |
| 61 uint32_t dwSrcFormat = Icc_FORMAT_DEFAULT, | 89 uint32_t dwSrcFormat = Icc_FORMAT_DEFAULT, |
| 62 uint32_t dwDstFormat = Icc_FORMAT_DEFAULT) { | 90 uint32_t dwDstFormat = Icc_FORMAT_DEFAULT) { |
| 63 nSrcComponents = 0; | 91 nSrcComponents = 0; |
| 64 cmsHPROFILE srcProfile = | 92 cmsHPROFILE srcProfile = |
| 65 cmsOpenProfileFromMem((void*)pSrcProfileData, dwSrcProfileSize); | 93 cmsOpenProfileFromMem((void*)pSrcProfileData, dwSrcProfileSize); |
| 66 if (!srcProfile) | 94 if (!srcProfile) |
| 67 return nullptr; | 95 return nullptr; |
| 68 | 96 |
| 69 cmsHPROFILE dstProfile; | 97 cmsHPROFILE dstProfile; |
| 70 if (!pDstProfileData && dwDstProfileSize == 0 && nDstComponents == 3) { | 98 if (!pDstProfileData && dwDstProfileSize == 0 && nDstComponents == 3) { |
| 71 dstProfile = cmsCreate_sRGBProfile(); | 99 dstProfile = cmsCreate_sRGBProfile(); |
| 72 } else { | 100 } else { |
| 73 dstProfile = | 101 dstProfile = |
| 74 cmsOpenProfileFromMem((void*)pDstProfileData, dwDstProfileSize); | 102 cmsOpenProfileFromMem((void*)pDstProfileData, dwDstProfileSize); |
| 75 } | 103 } |
| 76 if (!dstProfile) { | 104 if (!dstProfile) { |
| 77 cmsCloseProfile(srcProfile); | 105 cmsCloseProfile(srcProfile); |
| 78 return nullptr; | 106 return nullptr; |
| 79 } | 107 } |
| 80 int srcFormat; | 108 int srcFormat; |
| 81 bool bLab = false; | 109 bool bLab = false; |
| 82 cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile); | 110 cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile); |
| 83 nSrcComponents = cmsChannelsOf(srcCS); | 111 nSrcComponents = GetCSComponents(srcCS); |
| 84 if (srcCS == cmsSigLabData) { | 112 if (srcCS == cmsSigLabData) { |
| 85 srcFormat = | 113 srcFormat = |
| 86 COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); | 114 COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); |
| 87 bLab = true; | 115 bLab = true; |
| 88 } else { | 116 } else { |
| 89 srcFormat = | 117 srcFormat = |
| 90 COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); | 118 COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); |
| 91 if (srcCS == cmsSigRgbData && T_DOSWAP(dwSrcFormat)) { | 119 if (srcCS == cmsSigRgbData && T_DOSWAP(dwSrcFormat)) { |
| 92 srcFormat |= DOSWAP_SH(1); | 120 srcFormat |= DOSWAP_SH(1); |
| 93 } | 121 } |
| (...skipping 1557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1651 ASSERT(k1 == FXSYS_round(k * 255)); | 1679 ASSERT(k1 == FXSYS_round(k * 255)); |
| 1652 | 1680 |
| 1653 uint8_t r, g, b; | 1681 uint8_t r, g, b; |
| 1654 AdobeCMYK_to_sRGB1(c1, m1, y1, k1, r, g, b); | 1682 AdobeCMYK_to_sRGB1(c1, m1, y1, k1, r, g, b); |
| 1655 // Multiply by a constant rather than dividing because division is much | 1683 // Multiply by a constant rather than dividing because division is much |
| 1656 // more expensive. | 1684 // more expensive. |
| 1657 R = r * (1.0f / 255); | 1685 R = r * (1.0f / 255); |
| 1658 G = g * (1.0f / 255); | 1686 G = g * (1.0f / 255); |
| 1659 B = b * (1.0f / 255); | 1687 B = b * (1.0f / 255); |
| 1660 } | 1688 } |
| OLD | NEW |