1 // Copyright 2016 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 #ifndef CORE_FPDFAPI_PAGE_CPDF_IMAGE_H_ 8 #define CORE_FPDFAPI_PAGE_CPDF_IMAGE_H_ 9 10 #include <memory> 11 12 #include "core/fpdfapi/parser/cpdf_stream.h" 13 #include "core/fxcrt/cfx_maybe_owned.h" 14 #include "core/fxcrt/fx_system.h" 15 16 class CFX_DIBSource; 17 class CFX_DIBitmap; 18 class CPDF_Document; 19 class CPDF_Page; 20 class IFX_Pause; 21 class IFX_SeekableReadStream; 22 23 class CPDF_Image { 24 public: 25 explicit CPDF_Image(CPDF_Document* pDoc); 26 CPDF_Image(CPDF_Document* pDoc, std::unique_ptr<CPDF_Stream> pStream); 27 CPDF_Image(CPDF_Document* pDoc, uint32_t dwStreamObjNum); 28 ~CPDF_Image(); 29 30 void ConvertStreamToIndirectObject(); 31 GetInlineDict()32 CPDF_Dictionary* GetInlineDict() const { return m_pDict.Get(); } GetStream()33 CPDF_Stream* GetStream() const { return m_pStream.Get(); } GetDict()34 CPDF_Dictionary* GetDict() const { 35 return m_pStream ? m_pStream->GetDict() : nullptr; 36 } GetOC()37 CPDF_Dictionary* GetOC() const { return m_pOC; } GetDocument()38 CPDF_Document* GetDocument() const { return m_pDocument; } 39 GetPixelHeight()40 int32_t GetPixelHeight() const { return m_Height; } GetPixelWidth()41 int32_t GetPixelWidth() const { return m_Width; } 42 IsInline()43 bool IsInline() const { return m_bIsInline; } IsMask()44 bool IsMask() const { return m_bIsMask; } IsInterpol()45 bool IsInterpol() const { return m_bInterpolate; } 46 47 std::unique_ptr<CFX_DIBSource> LoadDIBSource() const; 48 49 void SetImage(const CFX_DIBitmap* pDIBitmap); 50 void SetJpegImage(const CFX_RetainPtr<IFX_SeekableReadStream>& pFile); 51 void SetJpegImageInline(const CFX_RetainPtr<IFX_SeekableReadStream>& pFile); 52 53 void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap); 54 55 bool StartLoadDIBSource(CPDF_Dictionary* pFormResource, 56 CPDF_Dictionary* pPageResource, 57 bool bStdCS = false, 58 uint32_t GroupFamily = 0, 59 bool bLoadMask = false); 60 bool Continue(IFX_Pause* pPause); 61 CFX_DIBSource* DetachBitmap(); 62 CFX_DIBSource* DetachMask(); 63 64 CFX_DIBSource* m_pDIBSource = nullptr; 65 CFX_DIBSource* m_pMask = nullptr; 66 uint32_t m_MatteColor = 0; 67 68 private: 69 void FinishInitialization(); 70 std::unique_ptr<CPDF_Dictionary> InitJPEG(uint8_t* pData, uint32_t size); 71 72 int32_t m_Height = 0; 73 int32_t m_Width = 0; 74 bool m_bIsInline = false; 75 bool m_bIsMask = false; 76 bool m_bInterpolate = false; 77 CPDF_Document* const m_pDocument; 78 CFX_MaybeOwned<CPDF_Stream> m_pStream; 79 CFX_MaybeOwned<CPDF_Dictionary> m_pDict; 80 CPDF_Dictionary* m_pOC = nullptr; 81 }; 82 83 #endif // CORE_FPDFAPI_PAGE_CPDF_IMAGE_H_ 84