OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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/fpdfapi/page/cpdf_image.h" | 7 #include "core/fpdfapi/page/cpdf_image.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 | 54 |
55 void CPDF_Image::FinishInitialization() { | 55 void CPDF_Image::FinishInitialization() { |
56 m_pOC = m_pDict->GetDictFor("OC"); | 56 m_pOC = m_pDict->GetDictFor("OC"); |
57 m_bIsMask = | 57 m_bIsMask = |
58 !m_pDict->KeyExist("ColorSpace") || m_pDict->GetIntegerFor("ImageMask"); | 58 !m_pDict->KeyExist("ColorSpace") || m_pDict->GetIntegerFor("ImageMask"); |
59 m_bInterpolate = !!m_pDict->GetIntegerFor("Interpolate"); | 59 m_bInterpolate = !!m_pDict->GetIntegerFor("Interpolate"); |
60 m_Height = m_pDict->GetIntegerFor("Height"); | 60 m_Height = m_pDict->GetIntegerFor("Height"); |
61 m_Width = m_pDict->GetIntegerFor("Width"); | 61 m_Width = m_pDict->GetIntegerFor("Width"); |
62 } | 62 } |
63 | 63 |
64 CPDF_Image* CPDF_Image::Clone() { | |
65 CPDF_Image* pImage = new CPDF_Image(m_pDocument); | |
66 pImage->m_bIsInline = m_bIsInline; | |
67 if (m_pOwnedStream) { | |
68 pImage->m_pOwnedStream = ToStream(m_pOwnedStream->Clone()); | |
69 pImage->m_pStream = pImage->m_pOwnedStream.get(); | |
70 } else { | |
71 pImage->m_pStream = m_pStream; | |
72 } | |
73 if (m_pOwnedDict) { | |
74 pImage->m_pOwnedDict = ToDictionary(m_pOwnedDict->Clone()); | |
75 pImage->m_pDict = pImage->m_pOwnedDict.get(); | |
76 } else { | |
77 pImage->m_pDict = m_pDict; | |
78 } | |
79 return pImage; | |
80 } | |
81 | |
82 void CPDF_Image::ConvertStreamToIndirectObject() { | 64 void CPDF_Image::ConvertStreamToIndirectObject() { |
83 if (!m_pStream->IsInline()) | 65 if (!m_pStream->IsInline()) |
84 return; | 66 return; |
85 | 67 |
86 ASSERT(m_pOwnedStream); | 68 ASSERT(m_pOwnedStream); |
87 m_pDocument->AddIndirectObject(std::move(m_pOwnedStream)); | 69 m_pDocument->AddIndirectObject(std::move(m_pOwnedStream)); |
88 } | 70 } |
89 | 71 |
90 std::unique_ptr<CPDF_Dictionary> CPDF_Image::InitJPEG(uint8_t* pData, | 72 std::unique_ptr<CPDF_Dictionary> CPDF_Image::InitJPEG(uint8_t* pData, |
91 uint32_t size) { | 73 uint32_t size) { |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 | 304 |
323 void CPDF_Image::ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pBitmap) { | 305 void CPDF_Image::ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pBitmap) { |
324 pPage->GetRenderCache()->ResetBitmap(m_pStream, pBitmap); | 306 pPage->GetRenderCache()->ResetBitmap(m_pStream, pBitmap); |
325 } | 307 } |
326 | 308 |
327 CFX_DIBSource* CPDF_Image::LoadDIBSource(CFX_DIBSource** ppMask, | 309 CFX_DIBSource* CPDF_Image::LoadDIBSource(CFX_DIBSource** ppMask, |
328 uint32_t* pMatteColor, | 310 uint32_t* pMatteColor, |
329 bool bStdCS, | 311 bool bStdCS, |
330 uint32_t GroupFamily, | 312 uint32_t GroupFamily, |
331 bool bLoadMask) const { | 313 bool bLoadMask) const { |
332 std::unique_ptr<CPDF_DIBSource> source(new CPDF_DIBSource); | 314 auto source = pdfium::MakeUnique<CPDF_DIBSource>(); |
333 if (source->Load(m_pDocument, m_pStream, | 315 if (source->Load(m_pDocument, m_pStream, |
334 reinterpret_cast<CPDF_DIBSource**>(ppMask), pMatteColor, | 316 reinterpret_cast<CPDF_DIBSource**>(ppMask), pMatteColor, |
335 nullptr, nullptr, bStdCS, GroupFamily, bLoadMask)) { | 317 nullptr, nullptr, bStdCS, GroupFamily, bLoadMask)) { |
336 return source.release(); | 318 return source.release(); |
337 } | 319 } |
338 return nullptr; | 320 return nullptr; |
339 } | 321 } |
340 | 322 |
341 CFX_DIBSource* CPDF_Image::DetachBitmap() { | 323 CFX_DIBSource* CPDF_Image::DetachBitmap() { |
342 CFX_DIBSource* pBitmap = m_pDIBSource; | 324 CFX_DIBSource* pBitmap = m_pDIBSource; |
343 m_pDIBSource = nullptr; | 325 m_pDIBSource = nullptr; |
344 return pBitmap; | 326 return pBitmap; |
345 } | 327 } |
346 | 328 |
347 CFX_DIBSource* CPDF_Image::DetachMask() { | 329 CFX_DIBSource* CPDF_Image::DetachMask() { |
348 CFX_DIBSource* pBitmap = m_pMask; | 330 CFX_DIBSource* pBitmap = m_pMask; |
349 m_pMask = nullptr; | 331 m_pMask = nullptr; |
350 return pBitmap; | 332 return pBitmap; |
351 } | 333 } |
352 | 334 |
353 bool CPDF_Image::StartLoadDIBSource(CPDF_Dictionary* pFormResource, | 335 bool CPDF_Image::StartLoadDIBSource(CPDF_Dictionary* pFormResource, |
354 CPDF_Dictionary* pPageResource, | 336 CPDF_Dictionary* pPageResource, |
355 bool bStdCS, | 337 bool bStdCS, |
356 uint32_t GroupFamily, | 338 uint32_t GroupFamily, |
357 bool bLoadMask) { | 339 bool bLoadMask) { |
358 std::unique_ptr<CPDF_DIBSource> source(new CPDF_DIBSource); | 340 auto source = pdfium::MakeUnique<CPDF_DIBSource>(); |
359 int ret = | 341 int ret = |
360 source->StartLoadDIBSource(m_pDocument, m_pStream, true, pFormResource, | 342 source->StartLoadDIBSource(m_pDocument, m_pStream, true, pFormResource, |
361 pPageResource, bStdCS, GroupFamily, bLoadMask); | 343 pPageResource, bStdCS, GroupFamily, bLoadMask); |
362 if (ret == 2) { | 344 if (ret == 2) { |
363 m_pDIBSource = source.release(); | 345 m_pDIBSource = source.release(); |
364 return true; | 346 return true; |
365 } | 347 } |
366 if (!ret) { | 348 if (!ret) { |
367 m_pDIBSource = nullptr; | 349 m_pDIBSource = nullptr; |
368 return false; | 350 return false; |
(...skipping 12 matching lines...) Expand all Loading... |
381 } | 363 } |
382 if (!ret) { | 364 if (!ret) { |
383 delete m_pDIBSource; | 365 delete m_pDIBSource; |
384 m_pDIBSource = nullptr; | 366 m_pDIBSource = nullptr; |
385 return false; | 367 return false; |
386 } | 368 } |
387 m_pMask = pSource->DetachMask(); | 369 m_pMask = pSource->DetachMask(); |
388 m_MatteColor = pSource->GetMatteColor(); | 370 m_MatteColor = pSource->GetMatteColor(); |
389 return false; | 371 return false; |
390 } | 372 } |
OLD | NEW |