// Copyright 2014 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 _FPDF_PAGEOBJ_H_ | |
#include "../../../include/fpdfapi/fpdf_pageobj.h" | |
#endif | |
class CPDF_QuickStretcher; | |
#define TYPE3_MAX_BLUES 16 | |
class CPDF_Type3Glyphs : public CFX_Object | |
{ | |
public: | |
CPDF_Type3Glyphs() | |
{ | |
m_GlyphMap.InitHashTable(253); | |
m_TopBlueCount = m_BottomBlueCount = 0; | |
} | |
~CPDF_Type3Glyphs(); | |
CFX_MapPtrToPtr m_GlyphMap; | |
void AdjustBlue(FX_FLOAT top, FX_FLOAT bottom, int& top_line, int& bottom_line); | |
int m_TopBlue[TYPE3_MAX_BLUES], m_BottomBlue[TYPE3_MAX_BLUES]; | |
int m_TopBlueCount, m_BottomBlueCount; | |
}; | |
class CFX_GlyphBitmap; | |
class CPDF_Type3Cache : public CFX_Object | |
{ | |
public: | |
CPDF_Type3Cache(CPDF_Type3Font* pFont) | |
{ | |
m_pFont = pFont; | |
} | |
~CPDF_Type3Cache(); | |
CFX_GlyphBitmap* LoadGlyph(FX_DWORD charcode, const CFX_AffineMatrix* pMatrix, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f); | |
protected: | |
CFX_GlyphBitmap* RenderGlyph(CPDF_Type3Glyphs* pSize, FX_DWORD charcode, const CFX_AffineMatrix* pMatrix, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f); | |
CPDF_Type3Font* m_pFont; | |
CFX_MapByteStringToPtr m_SizeMap; | |
}; | |
class CPDF_TransferFunc : public CFX_Object | |
{ | |
public: | |
CPDF_Document* m_pPDFDoc; | |
FX_BYTE m_Samples[256 * 3]; | |
FX_BOOL m_bIdentity; | |
CFX_DIBSource* TranslateImage(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc); | |
FX_COLORREF TranslateColor(FX_COLORREF src); | |
}; | |
typedef CFX_MapPtrTemplate<CPDF_Font*, CPDF_CountedObject<CPDF_Type3Cache*>*> CPDF_Type3CacheMap; | |
typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedObject<CPDF_TransferFunc*>*> CPDF_TransferFuncMap; | |
class CPDF_DocRenderData : public CFX_Object | |
{ | |
public: | |
CPDF_DocRenderData(CPDF_Document* pPDFDoc = NULL); | |
~CPDF_DocRenderData(); | |
FX_BOOL Initialize(); | |
CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont); | |
CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObj); | |
CFX_FontCache* GetFontCache() | |
{ | |
return m_pFontCache; | |
} | |
void Clear(FX_BOOL bRelease = FALSE); | |
void ReleaseCachedType3(CPDF_Type3Font* pFont); | |
void ReleaseTransferFunc(CPDF_Object* pObj); | |
private: | |
CPDF_Document* m_pPDFDoc; | |
CFX_FontCache* m_pFontCache; | |
CPDF_Type3CacheMap m_Type3FaceMap; | |
CPDF_TransferFuncMap m_TransferFuncMap; | |
}; | |
struct _PDF_RenderItem { | |
public: | |
CPDF_PageObjects* m_pObjectList; | |
CFX_AffineMatrix m_Matrix; | |
}; | |
typedef CFX_ArrayTemplate<_PDF_RenderItem> CPDF_RenderLayer; | |
class IPDF_ObjectRenderer : public CFX_Object | |
{ | |
public: | |
static IPDF_ObjectRenderer* Create(int type); | |
virtual ~IPDF_ObjectRenderer() {} | |
virtual FX_BOOL Start(CPDF_RenderStatus* pRenderStatus, const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL) = 0; | |
virtual FX_BOOL Continue(IFX_Pause* pPause) = 0; | |
FX_BOOL m_Result; | |
}; | |
class CPDF_RenderStatus : public CFX_Object | |
{ | |
public: | |
CPDF_RenderStatus(); | |
~CPDF_RenderStatus(); | |
FX_BOOL Initialize(int level, class CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pDeviceMatrix, | |
const CPDF_PageObject* pStopObj, const CPDF_RenderStatus* pParentStatus, | |
const CPDF_GraphicStates* pInitialStates, const CPDF_RenderOptions* pOptions, | |
int transparency, FX_BOOL bDropObjects, CPDF_Dictionary* pFormResource = NULL, | |
FX_BOOL bStdCS = FALSE, CPDF_Type3Char* pType3Char = NULL, FX_ARGB fill_color = 0, | |
FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); | |
void RenderObjectList(const CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObj2Device); | |
void RenderSingleObject(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device); | |
FX_BOOL ContinueSingleObject(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, IFX_Pause* pPause); | |
CPDF_RenderOptions m_Options; | |
CPDF_Dictionary* m_pFormResource; | |
CPDF_Dictionary* m_pPageResource; | |
CFX_PtrArray m_Type3FontCache; | |
CPDF_RenderContext* GetContext() | |
{ | |
return m_pContext; | |
} | |
protected: | |
friend class CPDF_ImageRenderer; | |
friend class CPDF_RenderContext; | |
void ProcessClipPath(CPDF_ClipPath ClipPath, const CFX_AffineMatrix* pObj2Device); | |
void DrawClipPath(CPDF_ClipPath ClipPath, const CFX_AffineMatrix* pObj2Device); | |
FX_BOOL ProcessTransparency(const CPDF_PageObject* PageObj, const CFX_AffineMatrix* pObj2Device); | |
void ProcessObjectNoClip(const CPDF_PageObject* PageObj, const CFX_AffineMatrix* pObj2Device); | |
void DrawObjWithBackground(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device); | |
FX_BOOL DrawObjWithBlend(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device); | |
FX_BOOL ProcessPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device); | |
void ProcessPathPattern(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, int& filltype, FX_BOOL& bStroke); | |
void DrawPathWithPattern(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, CPDF_Color* pColor, FX_BOOL bStroke); | |
void DrawTilingPattern(CPDF_TilingPattern* pPattern, CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke); | |
void DrawShadingPattern(CPDF_ShadingPattern* pPattern, CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke); | |
FX_BOOL SelectClipPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke); | |
FX_BOOL ProcessImage(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pObj2Device); | |
FX_BOOL OutputBitmapAlpha(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pImage2Device); | |
FX_BOOL OutputImage(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pImage2Device); | |
FX_BOOL OutputDIBSource(const CFX_DIBSource* pOutputBitmap, FX_ARGB fill_argb, int bitmap_alpha, | |
const CFX_AffineMatrix* pImage2Device, CPDF_ImageCache* pImageCache, FX_DWORD flags); | |
void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, int left, int top, FX_ARGB mask_argb, | |
int bitmap_alpha, int blend_mode, int bIsolated); | |
FX_BOOL ProcessInlines(CPDF_InlineImages* pInlines, const CFX_AffineMatrix* pObj2Device); | |
FX_BOOL ProcessShading(CPDF_ShadingObject* pShadingObj, const CFX_AffineMatrix* pObj2Device); | |
void DrawShading(CPDF_ShadingPattern* pPattern, CFX_AffineMatrix* pMatrix, FX_RECT& clip_rect, | |
int alpha, FX_BOOL bAlphaMode); | |
FX_BOOL ProcessType3Text(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device); | |
FX_BOOL ProcessText(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device, CFX_PathData* pClippingPath); | |
void DrawTextPathWithPattern(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device, | |
CPDF_Font* pFont, FX_FLOAT font_size, | |
const CFX_AffineMatrix* pTextMatrix, FX_BOOL bFill, FX_BOOL bStroke); | |
FX_BOOL ProcessForm(CPDF_FormObject* pFormObj, const CFX_AffineMatrix* pObj2Device); | |
CFX_DIBitmap* GetBackdrop(const CPDF_PageObject* pObj, const FX_RECT& rect, int& left, int& top, | |
FX_BOOL bBackAlphaRequired); | |
CFX_DIBitmap* LoadSMask(CPDF_Dictionary* pSMaskDict, FX_RECT* pClipRect, const CFX_AffineMatrix* pMatrix); | |
void Init(CPDF_RenderContext* pParent); | |
static class CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont); | |
static CPDF_GraphicStates* CloneObjStates(const CPDF_GraphicStates* pPathObj, FX_BOOL bStroke); | |
CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObject) const; | |
FX_ARGB GetFillArgb(const CPDF_PageObject* pObj, FX_BOOL bType3 = FALSE) const; | |
FX_ARGB GetStrokeArgb(const CPDF_PageObject* pObj) const; | |
CPDF_RenderContext* m_pContext; | |
FX_BOOL m_bStopped; | |
void DitherObjectArea(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device); | |
FX_BOOL GetObjectClippedRect(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bLogical, FX_RECT &rect) const; | |
void GetScaledMatrix(CFX_Matrix &matrix) const; | |
protected: | |
int m_Level; | |
CFX_RenderDevice* m_pDevice; | |
CFX_AffineMatrix m_DeviceMatrix; | |
CPDF_ClipPath m_LastClipPath; | |
const CPDF_PageObject* m_pCurObj; | |
const CPDF_PageObject* m_pStopObj; | |
CPDF_GraphicStates m_InitialStates; | |
int m_HalftoneLimit; | |
IPDF_ObjectRenderer* m_pObjectRenderer; | |
FX_BOOL m_bPrint; | |
int m_Transparency; | |
int m_DitherBits; | |
FX_BOOL m_bDropObjects; | |
FX_BOOL m_bStdCS; | |
FX_DWORD m_GroupFamily; | |
FX_BOOL m_bLoadMask; | |
CPDF_Type3Char * m_pType3Char; | |
FX_ARGB m_T3FillColor; | |
int m_curBlend; | |
}; | |
class CPDF_ImageLoader : public CFX_Object | |
{ | |
public: | |
CPDF_ImageLoader() | |
{ | |
m_pBitmap = NULL; | |
m_pMask = NULL; | |
m_MatteColor = 0; | |
m_bCached = FALSE; | |
m_nDownsampleWidth = 0; | |
m_nDownsampleHeight = 0; | |
} | |
FX_BOOL Load(const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL); | |
FX_BOOL StartLoadImage(const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_LPVOID& LoadHandle, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 nDownsampleWidth = 0, FX_INT32 nDownsampleHeight = 0); | |
FX_BOOL Continue(FX_LPVOID LoadHandle, IFX_Pause* pPause); | |
~CPDF_ImageLoader(); | |
CFX_DIBSource* m_pBitmap; | |
CFX_DIBSource* m_pMask; | |
FX_DWORD m_MatteColor; | |
FX_BOOL m_bCached; | |
protected: | |
FX_INT32 m_nDownsampleWidth; | |
FX_INT32 m_nDownsampleHeight; | |
}; | |
class CPDF_ProgressiveImageLoaderHandle : public CFX_Object | |
{ | |
public: | |
CPDF_ProgressiveImageLoaderHandle(); | |
~CPDF_ProgressiveImageLoaderHandle(); | |
FX_BOOL Start(CPDF_ImageLoader* pImageLoader, const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 nDownsampleWidth = 0, FX_INT32 nDownsampleHeight = 0); | |
FX_BOOL Continue(IFX_Pause* pPause); | |
protected: | |
CPDF_ImageLoader* m_pImageLoader; | |
CPDF_PageRenderCache* m_pCache; | |
CPDF_ImageObject* m_pImage; | |
FX_INT32 m_nDownsampleWidth; | |
FX_INT32 m_nDownsampleHeight; | |
}; | |
class CFX_ImageTransformer; | |
class CPDF_ImageRenderer : public IPDF_ObjectRenderer | |
{ | |
public: | |
CPDF_ImageRenderer(); | |
~CPDF_ImageRenderer(); | |
FX_BOOL Start(CPDF_RenderStatus* pStatus, const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL); | |
FX_BOOL Start(CPDF_RenderStatus* pStatus, const CFX_DIBSource* pDIBSource, FX_ARGB bitmap_argb, | |
int bitmap_alpha, const CFX_AffineMatrix* pImage2Device, FX_DWORD flags, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL); | |
FX_BOOL Continue(IFX_Pause* pPause); | |
protected: | |
CPDF_RenderStatus* m_pRenderStatus; | |
CPDF_ImageObject* m_pImageObject; | |
int m_Status; | |
const CFX_AffineMatrix* m_pObj2Device; | |
CFX_AffineMatrix m_ImageMatrix; | |
CPDF_ImageLoader m_Loader; | |
const CFX_DIBSource* m_pDIBSource; | |
CFX_DIBitmap* m_pClone; | |
int m_BitmapAlpha; | |
FX_BOOL m_bPatternColor; | |
CPDF_Pattern* m_pPattern; | |
FX_ARGB m_FillArgb; | |
FX_DWORD m_Flags; | |
CPDF_QuickStretcher* m_pQuickStretcher; | |
CFX_ImageTransformer* m_pTransformer; | |
CPDF_ImageRenderer* m_pRenderer2; | |
FX_LPVOID m_DeviceHandle; | |
FX_LPVOID m_LoadHandle; | |
FX_BOOL m_bStdCS; | |
int m_BlendType; | |
FX_BOOL StartBitmapAlpha(); | |
FX_BOOL StartDIBSource(); | |
FX_BOOL StartRenderDIBSource(); | |
FX_BOOL StartLoadDIBSource(); | |
FX_BOOL DrawMaskedImage(); | |
FX_BOOL DrawPatternImage(const CFX_Matrix* pObj2Device); | |
}; | |
class CPDF_ScaledRenderBuffer : public CFX_Object | |
{ | |
public: | |
CPDF_ScaledRenderBuffer(); | |
~CPDF_ScaledRenderBuffer(); | |
FX_BOOL Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, FX_RECT* pRect, | |
const CPDF_PageObject* pObj, const CPDF_RenderOptions *pOptions = NULL, int max_dpi = 0); | |
CFX_RenderDevice* GetDevice() | |
{ | |
return m_pBitmapDevice ? m_pBitmapDevice : m_pDevice; | |
} | |
CFX_AffineMatrix* GetMatrix() | |
{ | |
return &m_Matrix; | |
} | |
void OutputToDevice(); | |
private: | |
CFX_RenderDevice* m_pDevice; | |
CPDF_RenderContext* m_pContext; | |
FX_RECT m_Rect; | |
const CPDF_PageObject* m_pObject; | |
CFX_FxgeDevice* m_pBitmapDevice; | |
CFX_AffineMatrix m_Matrix; | |
}; | |
class ICodec_ScanlineDecoder; | |
class CPDF_QuickStretcher : public CFX_Object | |
{ | |
public: | |
CPDF_QuickStretcher(); | |
~CPDF_QuickStretcher(); | |
FX_BOOL Start(CPDF_ImageObject* pImageObj, CFX_AffineMatrix* pImage2Device, const FX_RECT* pClipBox); | |
FX_BOOL Continue(IFX_Pause* pPause); | |
CFX_DIBitmap* m_pBitmap; | |
int m_ResultLeft, m_ResultTop, m_ClipLeft, m_ClipTop; | |
int m_DestWidth, m_DestHeight, m_ResultWidth, m_ResultHeight; | |
int m_Bpp, m_SrcWidth, m_SrcHeight; | |
FX_BOOL m_bFlipX, m_bFlipY; | |
CPDF_ColorSpace* m_pCS; | |
ICodec_ScanlineDecoder* m_pDecoder; | |
CPDF_StreamAcc m_StreamAcc; | |
int m_LineIndex; | |
}; | |
class CPDF_DeviceBuffer : public CFX_Object | |
{ | |
public: | |
CPDF_DeviceBuffer(); | |
~CPDF_DeviceBuffer(); | |
FX_BOOL Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, FX_RECT* pRect, | |
const CPDF_PageObject* pObj, int max_dpi = 0); | |
void OutputToDevice(); | |
CFX_DIBitmap* GetBitmap() const | |
{ | |
return m_pBitmap; | |
} | |
const CFX_AffineMatrix* GetMatrix() const | |
{ | |
return &m_Matrix; | |
} | |
private: | |
CFX_RenderDevice* m_pDevice; | |
CPDF_RenderContext* m_pContext; | |
FX_RECT m_Rect; | |
const CPDF_PageObject* m_pObject; | |
CFX_DIBitmap* m_pBitmap; | |
CFX_AffineMatrix m_Matrix; | |
}; | |
class CPDF_ImageCache : public CFX_Object | |
{ | |
public: | |
CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream); | |
~CPDF_ImageCache(); | |
void ClearImageData(); | |
void Reset(const CFX_DIBitmap* pBitmap); | |
FX_BOOL GetCachedBitmap(CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor, CPDF_Dictionary* pPageResources, | |
FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, | |
CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 downsampleWidth = 0, FX_INT32 downsampleHeight = 0); | |
FX_DWORD EstimateSize() const | |
{ | |
return m_dwCacheSize; | |
} | |
FX_DWORD GetTimeCount() const | |
{ | |
return m_dwTimeCount; | |
} | |
CPDF_Stream* GetStream() const | |
{ | |
return m_pStream; | |
} | |
void SetTimeCount(FX_DWORD dwTimeCount) | |
{ | |
m_dwTimeCount = dwTimeCount; | |
} | |
int m_dwTimeCount; | |
public: | |
int StartGetCachedBitmap(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, | |
FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, | |
FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 downsampleWidth = 0, FX_INT32 downsampleHeight = 0); | |
int Continue(IFX_Pause* pPause); | |
int ContinueGetCachedBitmap(); | |
CFX_DIBSource* DetachBitmap(); | |
CFX_DIBSource* DetachMask(); | |
CFX_DIBSource* m_pCurBitmap; | |
CFX_DIBSource* m_pCurMask; | |
FX_DWORD m_MatteColor; | |
CPDF_RenderStatus* m_pRenderStatus; | |
protected: | |
CPDF_Document* m_pDocument; | |
CPDF_Stream* m_pStream; | |
CFX_DIBSource* m_pCachedBitmap; | |
CFX_DIBSource* m_pCachedMask; | |
FX_DWORD m_dwCacheSize; | |
void CalcSize(); | |
}; | |
typedef struct { | |
FX_FLOAT m_DecodeMin; | |
FX_FLOAT m_DecodeStep; | |
int m_ColorKeyMin; | |
int m_ColorKeyMax; | |
} DIB_COMP_DATA; | |
class CPDF_DIBSource : public CFX_DIBSource | |
{ | |
public: | |
CPDF_DIBSource(); | |
virtual ~CPDF_DIBSource(); | |
FX_BOOL Load(CPDF_Document* pDoc, const CPDF_Stream* pStream, | |
CPDF_DIBSource** ppMask, FX_DWORD* pMatteColor, | |
CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, | |
FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); | |
virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const; | |
virtual FX_LPBYTE GetBuffer() const; | |
virtual FX_LPCBYTE GetScanline(int line) const; | |
virtual void DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest_bpp, | |
int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const; | |
virtual void SetDownSampleSize(int dest_width, int dest_height) const; | |
CFX_DIBitmap* GetBitmap() const; | |
void ReleaseBitmap(CFX_DIBitmap*) const; | |
void ClearImageData(); | |
public: | |
int StartLoadDIBSource(CPDF_Document* pDoc, const CPDF_Stream* pStream, FX_BOOL bHasMask, | |
CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, | |
FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); | |
int ContinueLoadDIBSource(IFX_Pause* pPause); | |
int StratLoadMask(); | |
int StartLoadMaskDIB(); | |
int ContinueLoadMaskDIB(IFX_Pause* pPause); | |
int ContinueToLoadMask(); | |
CPDF_DIBSource* DetachMask(); | |
CPDF_DIBSource* m_pMask; | |
FX_DWORD m_MatteColor; | |
FX_LPVOID m_pJbig2Context; | |
CPDF_StreamAcc* m_pGlobalStream; | |
FX_BOOL m_bStdCS; | |
int m_Status; | |
CPDF_Object* m_pMaskStream; | |
FX_BOOL m_bHasMask; | |
protected: | |
FX_BOOL LoadColorInfo(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources); | |
CPDF_DIBSource* LoadMask(FX_DWORD& MatteColor); | |
CPDF_DIBSource* LoadMaskDIB(CPDF_Stream* pMask); | |
void LoadJpxBitmap(); | |
void LoadJbig2Bitmap(); | |
void LoadPalette(); | |
FX_BOOL CreateDecoder(); | |
void TranslateScanline24bpp(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan) const; | |
FX_DWORD GetValidBpp() const; | |
CPDF_Document* m_pDocument; | |
const CPDF_Stream* m_pStream; | |
CPDF_StreamAcc* m_pStreamAcc; | |
const CPDF_Dictionary* m_pDict; | |
CPDF_ColorSpace* m_pColorSpace; | |
FX_DWORD m_Family, m_bpc, m_nComponents, m_GroupFamily; | |
FX_BOOL m_bLoadMask; | |
FX_BOOL m_bDefaultDecode, m_bImageMask, m_bColorKey; | |
DIB_COMP_DATA* m_pCompData; | |
FX_LPBYTE m_pLineBuf; | |
FX_LPBYTE m_pMaskedLine; | |
CFX_DIBitmap* m_pCachedBitmap; | |
ICodec_ScanlineDecoder* m_pDecoder; | |
}; | |
#ifdef _FPDFAPI_MINI_ | |
#define FPDF_HUGE_IMAGE_SIZE 3000000 | |
#else | |
#define FPDF_HUGE_IMAGE_SIZE 60000000 | |
#endif | |
class CPDF_DIBTransferFunc : public CFX_FilteredDIB | |
{ | |
public: | |
CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc); | |
virtual FXDIB_Format GetDestFormat(); | |
virtual FX_ARGB* GetDestPalette() | |
{ | |
return NULL; | |
} | |
virtual void TranslateScanline(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf) const; | |
virtual void TranslateDownSamples(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels, int Bpp) const; | |
FX_LPCBYTE m_RampR; | |
FX_LPCBYTE m_RampG; | |
FX_LPCBYTE m_RampB; | |
}; | |
struct _CPDF_UniqueKeyGen { | |
void Generate(int count, ...); | |
FX_CHAR m_Key[128]; | |
int m_KeyLen; | |
}; |