1 // Copyright 2017 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "core/fpdfapi/page/cpdf_iccprofile.h"
8
9 #include "core/fpdfapi/cpdf_modulemgr.h"
10 #include "core/fpdfapi/parser/cpdf_stream.h"
11 #include "core/fxcodec/codec/ccodec_iccmodule.h"
12
13 namespace {
14
DetectSRGB(const uint8_t * pData,uint32_t dwSize)15 bool DetectSRGB(const uint8_t* pData, uint32_t dwSize) {
16 return dwSize == 3144 && memcmp(pData + 0x190, "sRGB IEC61966-2.1", 17) == 0;
17 }
18
19 } // namespace
20
CPDF_IccProfile(CPDF_Stream * pStream,const uint8_t * pData,uint32_t dwSize)21 CPDF_IccProfile::CPDF_IccProfile(CPDF_Stream* pStream,
22 const uint8_t* pData,
23 uint32_t dwSize)
24 : m_bsRGB(DetectSRGB(pData, dwSize)), m_pStream(pStream) {
25 if (m_bsRGB) {
26 m_nSrcComponents = 3;
27 return;
28 }
29
30 uint32_t nSrcComps = 0;
31 auto* pIccModule = CPDF_ModuleMgr::Get()->GetIccModule();
32 m_Transform = pIccModule->CreateTransform_sRGB(pData, dwSize, &nSrcComps);
33 if (m_Transform)
34 m_nSrcComponents = nSrcComps;
35 }
36
~CPDF_IccProfile()37 CPDF_IccProfile::~CPDF_IccProfile() {}
38