// Copyright 2016 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_IMAGE_H_ #define CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_IMAGE_H_ #include "core/fpdfapi/fpdf_parser/include/cpdf_stream.h" #include "core/fxcrt/include/fx_system.h" #define PDF_IMAGE_NO_COMPRESS 0x0000 #define PDF_IMAGE_LOSSY_COMPRESS 0x0001 #define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002 #define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008 class CFX_DIBitmap; class CFX_DIBSource; class CPDF_Dictionay; class CPDF_Document; class CPDF_Page; class IFX_FileRead; class IFX_FileWrite; class IFX_Pause; class CPDF_Image { public: explicit CPDF_Image(CPDF_Document* pDoc); ~CPDF_Image(); FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline); void Release(); CPDF_Image* Clone(); CPDF_Dictionary* GetInlineDict() const { return m_pInlineDict; } CPDF_Stream* GetStream() const { return m_pStream; } CPDF_Dictionary* GetDict() const { return m_pStream ? m_pStream->GetDict() : NULL; } CPDF_Dictionary* GetOC() const { return m_pOC; } CPDF_Document* GetDocument() const { return m_pDocument; } int32_t GetPixelHeight() const { return m_Height; } int32_t GetPixelWidth() const { return m_Width; } FX_BOOL IsInline() { return m_bInline; } FX_BOOL IsMask() const { return m_bIsMask; } FX_BOOL IsInterpol() const { return m_bInterpolate; } CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, uint32_t* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, uint32_t GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const; void SetInlineDict(CPDF_Dictionary* pDict) { m_pInlineDict = pDict; } void SetImage(const CFX_DIBitmap* pDIBitmap, int32_t iCompress); void SetJpegImage(uint8_t* pImageData, uint32_t size); void SetJpegImage(IFX_FileRead* pFile); void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap); FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, uint32_t GroupFamily = 0, FX_BOOL bLoadMask = FALSE); FX_BOOL Continue(IFX_Pause* pPause); CFX_DIBSource* DetachBitmap(); CFX_DIBSource* DetachMask(); CFX_DIBSource* m_pDIBSource; CFX_DIBSource* m_pMask; uint32_t m_MatteColor; private: CPDF_Dictionary* InitJPEG(uint8_t* pData, uint32_t size); CPDF_Stream* m_pStream; FX_BOOL m_bInline; CPDF_Dictionary* m_pInlineDict; int32_t m_Height; int32_t m_Width; FX_BOOL m_bIsMask; FX_BOOL m_bInterpolate; CPDF_Document* m_pDocument; CPDF_Dictionary* m_pOC; }; #endif // CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_IMAGE_H_