Chromium Code Reviews| 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/include/fx_codec.h" | 8 #include "core/fxcodec/include/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 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 91 | 91 |
| 92 void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, | 92 void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, |
| 93 uint32_t dwSrcProfileSize, | 93 uint32_t dwSrcProfileSize, |
| 94 uint32_t& nSrcComponents, | 94 uint32_t& nSrcComponents, |
| 95 const unsigned char* pDstProfileData, | 95 const unsigned char* pDstProfileData, |
| 96 uint32_t dwDstProfileSize, | 96 uint32_t dwDstProfileSize, |
| 97 int32_t nDstComponents, | 97 int32_t nDstComponents, |
| 98 int intent, | 98 int intent, |
| 99 uint32_t dwSrcFormat = Icc_FORMAT_DEFAULT, | 99 uint32_t dwSrcFormat = Icc_FORMAT_DEFAULT, |
| 100 uint32_t dwDstFormat = Icc_FORMAT_DEFAULT) { | 100 uint32_t dwDstFormat = Icc_FORMAT_DEFAULT) { |
| 101 cmsHPROFILE srcProfile = NULL; | 101 cmsHPROFILE srcProfile = nullptr; |
|
Tom Sepez
2016/06/02 20:09:49
nit:combine with 106.
Lei Zhang
2016/06/07 07:33:23
Done.
| |
| 102 cmsHPROFILE dstProfile = NULL; | 102 cmsHPROFILE dstProfile = nullptr; |
| 103 cmsHTRANSFORM hTransform = NULL; | 103 cmsHTRANSFORM hTransform = nullptr; |
| 104 CLcmsCmm* pCmm = NULL; | 104 CLcmsCmm* pCmm = nullptr; |
| 105 nSrcComponents = 0; | 105 nSrcComponents = 0; |
| 106 srcProfile = cmsOpenProfileFromMem((void*)pSrcProfileData, dwSrcProfileSize); | 106 srcProfile = cmsOpenProfileFromMem((void*)pSrcProfileData, dwSrcProfileSize); |
| 107 if (!srcProfile) { | 107 if (!srcProfile) { |
| 108 return NULL; | 108 return nullptr; |
| 109 } | 109 } |
| 110 if (!pDstProfileData && dwDstProfileSize == 0 && nDstComponents == 3) { | 110 if (!pDstProfileData && dwDstProfileSize == 0 && nDstComponents == 3) { |
| 111 dstProfile = cmsCreate_sRGBProfile(); | 111 dstProfile = cmsCreate_sRGBProfile(); |
| 112 } else { | 112 } else { |
| 113 dstProfile = | 113 dstProfile = |
| 114 cmsOpenProfileFromMem((void*)pDstProfileData, dwDstProfileSize); | 114 cmsOpenProfileFromMem((void*)pDstProfileData, dwDstProfileSize); |
| 115 } | 115 } |
| 116 if (!dstProfile) { | 116 if (!dstProfile) { |
| 117 cmsCloseProfile(srcProfile); | 117 cmsCloseProfile(srcProfile); |
| 118 return NULL; | 118 return nullptr; |
| 119 } | 119 } |
| 120 int srcFormat; | 120 int srcFormat; |
| 121 FX_BOOL bLab = FALSE; | 121 FX_BOOL bLab = FALSE; |
| 122 cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile); | 122 cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile); |
| 123 nSrcComponents = GetCSComponents(srcCS); | 123 nSrcComponents = GetCSComponents(srcCS); |
| 124 if (srcCS == cmsSigLabData) { | 124 if (srcCS == cmsSigLabData) { |
| 125 srcFormat = | 125 srcFormat = |
| 126 COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); | 126 COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); |
| 127 bLab = TRUE; | 127 bLab = TRUE; |
| 128 } else { | 128 } else { |
| 129 srcFormat = | 129 srcFormat = |
| 130 COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); | 130 COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); |
| 131 if (srcCS == cmsSigRgbData && T_DOSWAP(dwSrcFormat)) { | 131 if (srcCS == cmsSigRgbData && T_DOSWAP(dwSrcFormat)) { |
| 132 srcFormat |= DOSWAP_SH(1); | 132 srcFormat |= DOSWAP_SH(1); |
| 133 } | 133 } |
| 134 } | 134 } |
| 135 cmsColorSpaceSignature dstCS = cmsGetColorSpace(dstProfile); | 135 cmsColorSpaceSignature dstCS = cmsGetColorSpace(dstProfile); |
| 136 if (!CheckComponents(dstCS, nDstComponents, TRUE)) { | 136 if (!CheckComponents(dstCS, nDstComponents, TRUE)) { |
| 137 cmsCloseProfile(srcProfile); | 137 cmsCloseProfile(srcProfile); |
| 138 cmsCloseProfile(dstProfile); | 138 cmsCloseProfile(dstProfile); |
| 139 return NULL; | 139 return nullptr; |
| 140 } | 140 } |
| 141 switch (dstCS) { | 141 switch (dstCS) { |
| 142 case cmsSigGrayData: | 142 case cmsSigGrayData: |
| 143 hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, | 143 hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, |
| 144 TYPE_GRAY_8, intent, 0); | 144 TYPE_GRAY_8, intent, 0); |
| 145 break; | 145 break; |
| 146 case cmsSigRgbData: | 146 case cmsSigRgbData: |
| 147 hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, | 147 hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, |
| 148 TYPE_BGR_8, intent, 0); | 148 TYPE_BGR_8, intent, 0); |
| 149 break; | 149 break; |
| 150 case cmsSigCmykData: | 150 case cmsSigCmykData: |
| 151 hTransform = cmsCreateTransform( | 151 hTransform = cmsCreateTransform( |
| 152 srcProfile, srcFormat, dstProfile, | 152 srcProfile, srcFormat, dstProfile, |
| 153 T_DOSWAP(dwDstFormat) ? TYPE_KYMC_8 : TYPE_CMYK_8, intent, 0); | 153 T_DOSWAP(dwDstFormat) ? TYPE_KYMC_8 : TYPE_CMYK_8, intent, 0); |
| 154 break; | 154 break; |
| 155 default: | 155 default: |
| 156 break; | 156 break; |
| 157 } | 157 } |
| 158 if (!hTransform) { | 158 if (!hTransform) { |
| 159 cmsCloseProfile(srcProfile); | 159 cmsCloseProfile(srcProfile); |
| 160 cmsCloseProfile(dstProfile); | 160 cmsCloseProfile(dstProfile); |
| 161 return NULL; | 161 return nullptr; |
| 162 } | 162 } |
| 163 pCmm = new CLcmsCmm; | 163 pCmm = new CLcmsCmm; |
| 164 pCmm->m_nSrcComponents = nSrcComponents; | 164 pCmm->m_nSrcComponents = nSrcComponents; |
| 165 pCmm->m_nDstComponents = nDstComponents; | 165 pCmm->m_nDstComponents = nDstComponents; |
| 166 pCmm->m_hTransform = hTransform; | 166 pCmm->m_hTransform = hTransform; |
| 167 pCmm->m_bLab = bLab; | 167 pCmm->m_bLab = bLab; |
| 168 cmsCloseProfile(srcProfile); | 168 cmsCloseProfile(srcProfile); |
| 169 cmsCloseProfile(dstProfile); | 169 cmsCloseProfile(dstProfile); |
| 170 return pCmm; | 170 return pCmm; |
| 171 } | 171 } |
| 172 void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData, | 172 void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData, |
| 173 uint32_t dwProfileSize, | 173 uint32_t dwProfileSize, |
| 174 uint32_t& nComponents, | 174 uint32_t& nComponents, |
| 175 int32_t intent, | 175 int32_t intent, |
| 176 uint32_t dwSrcFormat) { | 176 uint32_t dwSrcFormat) { |
| 177 return IccLib_CreateTransform(pProfileData, dwProfileSize, nComponents, NULL, | 177 return IccLib_CreateTransform(pProfileData, dwProfileSize, nComponents, |
| 178 0, 3, intent, dwSrcFormat); | 178 nullptr, 0, 3, intent, dwSrcFormat); |
| 179 } | 179 } |
| 180 void IccLib_DestroyTransform(void* pTransform) { | 180 void IccLib_DestroyTransform(void* pTransform) { |
| 181 if (!pTransform) { | 181 if (!pTransform) { |
| 182 return; | 182 return; |
| 183 } | 183 } |
| 184 cmsDeleteTransform(((CLcmsCmm*)pTransform)->m_hTransform); | 184 cmsDeleteTransform(((CLcmsCmm*)pTransform)->m_hTransform); |
| 185 delete (CLcmsCmm*)pTransform; | 185 delete (CLcmsCmm*)pTransform; |
| 186 } | 186 } |
| 187 void IccLib_Translate(void* pTransform, | 187 void IccLib_Translate(void* pTransform, |
| 188 uint32_t nSrcComponents, | 188 uint32_t nSrcComponents, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 234 void IccLib_TranslateImage(void* pTransform, | 234 void IccLib_TranslateImage(void* pTransform, |
| 235 unsigned char* pDest, | 235 unsigned char* pDest, |
| 236 const unsigned char* pSrc, | 236 const unsigned char* pSrc, |
| 237 int32_t pixels) { | 237 int32_t pixels) { |
| 238 cmsDoTransform(((CLcmsCmm*)pTransform)->m_hTransform, (void*)pSrc, pDest, | 238 cmsDoTransform(((CLcmsCmm*)pTransform)->m_hTransform, (void*)pSrc, pDest, |
| 239 pixels); | 239 pixels); |
| 240 } | 240 } |
| 241 void* CreateProfile_Gray(double gamma) { | 241 void* CreateProfile_Gray(double gamma) { |
| 242 cmsCIExyY* D50 = (cmsCIExyY*)cmsD50_xyY(); | 242 cmsCIExyY* D50 = (cmsCIExyY*)cmsD50_xyY(); |
| 243 if (!cmsWhitePointFromTemp(D50, 6504)) { | 243 if (!cmsWhitePointFromTemp(D50, 6504)) { |
| 244 return NULL; | 244 return nullptr; |
| 245 } | 245 } |
| 246 cmsToneCurve* curve = cmsBuildGamma(NULL, gamma); | 246 cmsToneCurve* curve = cmsBuildGamma(nullptr, gamma); |
| 247 if (!curve) { | 247 if (!curve) { |
| 248 return NULL; | 248 return nullptr; |
| 249 } | 249 } |
| 250 void* profile = cmsCreateGrayProfile(D50, curve); | 250 void* profile = cmsCreateGrayProfile(D50, curve); |
| 251 cmsFreeToneCurve(curve); | 251 cmsFreeToneCurve(curve); |
| 252 return profile; | 252 return profile; |
| 253 } | 253 } |
| 254 CCodec_IccModule::IccCS GetProfileCSFromHandle(void* pProfile) { | 254 CCodec_IccModule::IccCS GetProfileCSFromHandle(void* pProfile) { |
| 255 if (!pProfile) { | 255 if (!pProfile) { |
| 256 return CCodec_IccModule::IccCS_Unknown; | 256 return CCodec_IccModule::IccCS_Unknown; |
| 257 } | 257 } |
| 258 switch (cmsGetColorSpace(pProfile)) { | 258 switch (cmsGetColorSpace(pProfile)) { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 358 public: | 358 public: |
| 359 CFX_IccProfileCache(); | 359 CFX_IccProfileCache(); |
| 360 ~CFX_IccProfileCache(); | 360 ~CFX_IccProfileCache(); |
| 361 void* m_pProfile; | 361 void* m_pProfile; |
| 362 uint32_t m_dwRate; | 362 uint32_t m_dwRate; |
| 363 | 363 |
| 364 protected: | 364 protected: |
| 365 void Purge(); | 365 void Purge(); |
| 366 }; | 366 }; |
| 367 CFX_IccProfileCache::CFX_IccProfileCache() { | 367 CFX_IccProfileCache::CFX_IccProfileCache() { |
| 368 m_pProfile = NULL; | 368 m_pProfile = nullptr; |
| 369 m_dwRate = 1; | 369 m_dwRate = 1; |
| 370 } | 370 } |
| 371 CFX_IccProfileCache::~CFX_IccProfileCache() { | 371 CFX_IccProfileCache::~CFX_IccProfileCache() { |
| 372 if (m_pProfile) { | 372 if (m_pProfile) { |
| 373 cmsCloseProfile(m_pProfile); | 373 cmsCloseProfile(m_pProfile); |
| 374 } | 374 } |
| 375 } | 375 } |
| 376 void CFX_IccProfileCache::Purge() {} | 376 void CFX_IccProfileCache::Purge() {} |
| 377 class CFX_IccTransformCache { | 377 class CFX_IccTransformCache { |
| 378 public: | 378 public: |
| 379 CFX_IccTransformCache(CLcmsCmm* pCmm = NULL); | 379 CFX_IccTransformCache(CLcmsCmm* pCmm = nullptr); |
| 380 ~CFX_IccTransformCache(); | 380 ~CFX_IccTransformCache(); |
| 381 void* m_pIccTransform; | 381 void* m_pIccTransform; |
| 382 uint32_t m_dwRate; | 382 uint32_t m_dwRate; |
| 383 CLcmsCmm* m_pCmm; | 383 CLcmsCmm* m_pCmm; |
| 384 | 384 |
| 385 protected: | 385 protected: |
| 386 void Purge(); | 386 void Purge(); |
| 387 }; | 387 }; |
| 388 CFX_IccTransformCache::CFX_IccTransformCache(CLcmsCmm* pCmm) { | 388 CFX_IccTransformCache::CFX_IccTransformCache(CLcmsCmm* pCmm) { |
| 389 m_pIccTransform = NULL; | 389 m_pIccTransform = nullptr; |
| 390 m_dwRate = 1; | 390 m_dwRate = 1; |
| 391 m_pCmm = pCmm; | 391 m_pCmm = pCmm; |
| 392 } | 392 } |
| 393 CFX_IccTransformCache::~CFX_IccTransformCache() { | 393 CFX_IccTransformCache::~CFX_IccTransformCache() { |
| 394 if (m_pIccTransform) { | 394 if (m_pIccTransform) { |
| 395 cmsDeleteTransform(m_pIccTransform); | 395 cmsDeleteTransform(m_pIccTransform); |
| 396 } | 396 } |
| 397 FX_Free(m_pCmm); | 397 FX_Free(m_pCmm); |
| 398 } | 398 } |
| 399 void CFX_IccTransformCache::Purge() {} | 399 void CFX_IccTransformCache::Purge() {} |
| 400 class CFX_ByteStringKey : public CFX_BinaryBuf { | 400 class CFX_ByteStringKey : public CFX_BinaryBuf { |
| 401 public: | 401 public: |
| 402 CFX_ByteStringKey() : CFX_BinaryBuf() {} | 402 CFX_ByteStringKey() : CFX_BinaryBuf() {} |
| 403 CFX_ByteStringKey& operator<<(uint32_t i); | 403 CFX_ByteStringKey& operator<<(uint32_t i); |
| 404 }; | 404 }; |
| 405 CFX_ByteStringKey& CFX_ByteStringKey::operator<<(uint32_t i) { | 405 CFX_ByteStringKey& CFX_ByteStringKey::operator<<(uint32_t i) { |
| 406 AppendBlock(&i, sizeof(uint32_t)); | 406 AppendBlock(&i, sizeof(uint32_t)); |
| 407 return *this; | 407 return *this; |
| 408 } | 408 } |
| 409 void* CCodec_IccModule::CreateProfile(CCodec_IccModule::IccParam* pIccParam, | 409 void* CCodec_IccModule::CreateProfile(CCodec_IccModule::IccParam* pIccParam, |
| 410 Icc_CLASS ic, | 410 Icc_CLASS ic, |
| 411 CFX_BinaryBuf* pTransformKey) { | 411 CFX_BinaryBuf* pTransformKey) { |
| 412 CFX_IccProfileCache* pCache = NULL; | 412 CFX_IccProfileCache* pCache = nullptr; |
| 413 CFX_ByteStringKey key; | 413 CFX_ByteStringKey key; |
| 414 CFX_ByteString text; | 414 CFX_ByteString text; |
| 415 key << pIccParam->ColorSpace << (pIccParam->dwProfileType | ic << 8); | 415 key << pIccParam->ColorSpace << (pIccParam->dwProfileType | ic << 8); |
| 416 uint8_t ID[16]; | 416 uint8_t ID[16]; |
| 417 switch (pIccParam->dwProfileType) { | 417 switch (pIccParam->dwProfileType) { |
| 418 case Icc_PARAMTYPE_NONE: | 418 case Icc_PARAMTYPE_NONE: |
| 419 return NULL; | 419 return nullptr; |
| 420 case Icc_PARAMTYPE_BUFFER: | 420 case Icc_PARAMTYPE_BUFFER: |
| 421 MD5ComputeID(pIccParam->pProfileData, pIccParam->dwProfileSize, ID); | 421 MD5ComputeID(pIccParam->pProfileData, pIccParam->dwProfileSize, ID); |
| 422 break; | 422 break; |
| 423 case Icc_PARAMTYPE_PARAM: | 423 case Icc_PARAMTYPE_PARAM: |
| 424 FXSYS_memset(ID, 0, 16); | 424 FXSYS_memset(ID, 0, 16); |
| 425 switch (pIccParam->ColorSpace) { | 425 switch (pIccParam->ColorSpace) { |
| 426 case IccCS_Gray: | 426 case IccCS_Gray: |
| 427 text.Format("%lf", pIccParam->Gamma); | 427 text.Format("%lf", pIccParam->Gamma); |
| 428 break; | 428 break; |
| 429 default: | 429 default: |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 469 return pCache->m_pProfile; | 469 return pCache->m_pProfile; |
| 470 } | 470 } |
| 471 void* CCodec_IccModule::CreateTransform( | 471 void* CCodec_IccModule::CreateTransform( |
| 472 CCodec_IccModule::IccParam* pInputParam, | 472 CCodec_IccModule::IccParam* pInputParam, |
| 473 CCodec_IccModule::IccParam* pOutputParam, | 473 CCodec_IccModule::IccParam* pOutputParam, |
| 474 CCodec_IccModule::IccParam* pProofParam, | 474 CCodec_IccModule::IccParam* pProofParam, |
| 475 uint32_t dwIntent, | 475 uint32_t dwIntent, |
| 476 uint32_t dwFlag, | 476 uint32_t dwFlag, |
| 477 uint32_t dwPrfIntent, | 477 uint32_t dwPrfIntent, |
| 478 uint32_t dwPrfFlag) { | 478 uint32_t dwPrfFlag) { |
| 479 CLcmsCmm* pCmm = NULL; | 479 CLcmsCmm* pCmm = nullptr; |
| 480 ASSERT(pInputParam && pOutputParam); | 480 ASSERT(pInputParam && pOutputParam); |
| 481 CFX_ByteStringKey key; | 481 CFX_ByteStringKey key; |
| 482 void* pInputProfile = CreateProfile(pInputParam, Icc_CLASS_INPUT, &key); | 482 void* pInputProfile = CreateProfile(pInputParam, Icc_CLASS_INPUT, &key); |
| 483 if (!pInputProfile) { | 483 if (!pInputProfile) { |
| 484 return NULL; | 484 return nullptr; |
| 485 } | 485 } |
| 486 void* pOutputProfile = CreateProfile(pOutputParam, Icc_CLASS_OUTPUT, &key); | 486 void* pOutputProfile = CreateProfile(pOutputParam, Icc_CLASS_OUTPUT, &key); |
| 487 if (!pOutputProfile) { | 487 if (!pOutputProfile) { |
| 488 return NULL; | 488 return nullptr; |
| 489 } | 489 } |
| 490 uint32_t dwInputProfileType = | 490 uint32_t dwInputProfileType = |
| 491 TransferProfileType(pInputProfile, pInputParam->dwFormat); | 491 TransferProfileType(pInputProfile, pInputParam->dwFormat); |
| 492 uint32_t dwOutputProfileType = | 492 uint32_t dwOutputProfileType = |
| 493 TransferProfileType(pOutputProfile, pOutputParam->dwFormat); | 493 TransferProfileType(pOutputProfile, pOutputParam->dwFormat); |
| 494 if (dwInputProfileType == 0 || dwOutputProfileType == 0) { | 494 if (dwInputProfileType == 0 || dwOutputProfileType == 0) { |
| 495 return NULL; | 495 return nullptr; |
| 496 } | 496 } |
| 497 void* pProofProfile = NULL; | 497 void* pProofProfile = nullptr; |
| 498 if (pProofParam) { | 498 if (pProofParam) { |
| 499 pProofProfile = CreateProfile(pProofParam, Icc_CLASS_PROOF, &key); | 499 pProofProfile = CreateProfile(pProofParam, Icc_CLASS_PROOF, &key); |
| 500 } | 500 } |
| 501 key << dwInputProfileType << dwOutputProfileType << dwIntent << dwFlag | 501 key << dwInputProfileType << dwOutputProfileType << dwIntent << dwFlag |
| 502 << (pProofProfile != NULL) << dwPrfIntent << dwPrfFlag; | 502 << !!pProofProfile << dwPrfIntent << dwPrfFlag; |
| 503 CFX_ByteString TransformKey(key.GetBuffer(), key.GetSize()); | 503 CFX_ByteString TransformKey(key.GetBuffer(), key.GetSize()); |
| 504 CFX_IccTransformCache* pTransformCache; | 504 CFX_IccTransformCache* pTransformCache; |
| 505 auto it = m_MapTranform.find(TransformKey); | 505 auto it = m_MapTranform.find(TransformKey); |
| 506 if (it == m_MapTranform.end()) { | 506 if (it == m_MapTranform.end()) { |
| 507 pCmm = FX_Alloc(CLcmsCmm, 1); | 507 pCmm = FX_Alloc(CLcmsCmm, 1); |
| 508 pCmm->m_nSrcComponents = T_CHANNELS(dwInputProfileType); | 508 pCmm->m_nSrcComponents = T_CHANNELS(dwInputProfileType); |
| 509 pCmm->m_nDstComponents = T_CHANNELS(dwOutputProfileType); | 509 pCmm->m_nDstComponents = T_CHANNELS(dwOutputProfileType); |
| 510 pCmm->m_bLab = T_COLORSPACE(pInputParam->dwFormat) == PT_Lab; | 510 pCmm->m_bLab = T_COLORSPACE(pInputParam->dwFormat) == PT_Lab; |
| 511 pTransformCache = new CFX_IccTransformCache(pCmm); | 511 pTransformCache = new CFX_IccTransformCache(pCmm); |
| 512 if (pProofProfile) { | 512 if (pProofProfile) { |
| (...skipping 1464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1977 uint8_t c1 = FXSYS_round(c * 255); | 1977 uint8_t c1 = FXSYS_round(c * 255); |
| 1978 uint8_t m1 = FXSYS_round(m * 255); | 1978 uint8_t m1 = FXSYS_round(m * 255); |
| 1979 uint8_t y1 = FXSYS_round(y * 255); | 1979 uint8_t y1 = FXSYS_round(y * 255); |
| 1980 uint8_t k1 = FXSYS_round(k * 255); | 1980 uint8_t k1 = FXSYS_round(k * 255); |
| 1981 uint8_t r, g, b; | 1981 uint8_t r, g, b; |
| 1982 AdobeCMYK_to_sRGB1(c1, m1, y1, k1, r, g, b); | 1982 AdobeCMYK_to_sRGB1(c1, m1, y1, k1, r, g, b); |
| 1983 R = 1.0f * r / 255; | 1983 R = 1.0f * r / 255; |
| 1984 G = 1.0f * g / 255; | 1984 G = 1.0f * g / 255; |
| 1985 B = 1.0f * b / 255; | 1985 B = 1.0f * b / 255; |
| 1986 } | 1986 } |
| OLD | NEW |