FX_BOOL CPDF_ImageCache::GetCachedBitmap(CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor, CPDF_Dictionary* pPageResources, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus, FX_INT32 downsampleWidth, FX_INT32 downsampleHeight) { if (m_pCachedBitmap) { pBitmap = m_pCachedBitmap; pMask = m_pCachedMask; MatteColor = m_MatteColor; return TRUE; } if (!pRenderStatus) { return FALSE; } CPDF_RenderContext*pContext = pRenderStatus->GetContext(); CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache; m_dwTimeCount = pPageRenderCache->GetTimeCount(); CPDF_DIBSource* pSrc = FX_NEW CPDF_DIBSource; CPDF_DIBSource* pMaskSrc = NULL; if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor, pRenderStatus->m_pFormResource, pPageResources, bStdCS, GroupFamily, bLoadMask)) { delete pSrc; pBitmap = NULL; return FALSE; } m_MatteColor = MatteColor; #if !defined(_FPDFAPI_MINI_) if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) { m_pCachedBitmap = pSrc->Clone(); delete pSrc; } else { m_pCachedBitmap = pSrc; } if (pMaskSrc) { m_pCachedMask = pMaskSrc->Clone(); delete pMaskSrc; } #else if (pSrc->GetFormat() == FXDIB_8bppRgb && pSrc->GetPalette() && pSrc->GetHeight() * pSrc->GetWidth() * 3 < 1024) { #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ m_pCachedBitmap = pSrc->CloneConvert(FXDIB_Rgb32); #else m_pCachedBitmap = pSrc->CloneConvert(FXDIB_Rgb); #endif delete pSrc; } else if (pSrc->GetPitch() * pSrc->GetHeight() < 102400) { m_pCachedBitmap = pSrc->Clone(); delete pSrc; } else { m_pCachedBitmap = pSrc; } m_pCachedMask = pMaskSrc; #endif pBitmap = m_pCachedBitmap; pMask = m_pCachedMask; CalcSize(); return FALSE; }
bool CPDF_ImageCacheEntry::GetCachedBitmap(CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, uint32_t& MatteColor, CPDF_Dictionary* pPageResources, bool bStdCS, uint32_t GroupFamily, bool bLoadMask, CPDF_RenderStatus* pRenderStatus, int32_t downsampleWidth, int32_t downsampleHeight) { if (m_pCachedBitmap) { pBitmap = m_pCachedBitmap; pMask = m_pCachedMask; MatteColor = m_MatteColor; return true; } if (!pRenderStatus) { return false; } CPDF_RenderContext* pContext = pRenderStatus->GetContext(); CPDF_PageRenderCache* pPageRenderCache = pContext->GetPageCache(); m_dwTimeCount = pPageRenderCache->GetTimeCount(); CPDF_DIBSource* pSrc = new CPDF_DIBSource; CPDF_DIBSource* pMaskSrc = nullptr; if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor, pRenderStatus->m_pFormResource, pPageResources, bStdCS, GroupFamily, bLoadMask)) { delete pSrc; pBitmap = nullptr; return false; } m_MatteColor = MatteColor; if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) { m_pCachedBitmap = pSrc->Clone(); delete pSrc; } else { m_pCachedBitmap = pSrc; } if (pMaskSrc) { m_pCachedMask = pMaskSrc->Clone(); delete pMaskSrc; } pBitmap = m_pCachedBitmap; pMask = m_pCachedMask; CalcSize(); return false; }
FX_BOOL CPDF_RenderStatus::ProcessInlines(CPDF_InlineImages* pInlines, const CFX_AffineMatrix* pObj2Device) { int bitmap_alpha = 255; if (!pInlines->m_GeneralState.IsNull()) { bitmap_alpha = FXSYS_round(pInlines->m_GeneralState.GetObject()->m_FillAlpha * 255); } if (pInlines->m_pStream) { CPDF_DIBSource dibsrc; if (!dibsrc.Load(m_pContext->m_pDocument, pInlines->m_pStream, NULL, NULL, NULL, NULL)) { return TRUE; } pInlines->m_pBitmap = dibsrc.Clone(); pInlines->m_pStream->Release(); pInlines->m_pStream = NULL; } if (pInlines->m_pBitmap == NULL) { return TRUE; } FX_ARGB fill_argb = 0; if (pInlines->m_pBitmap->IsAlphaMask()) { fill_argb = GetFillArgb(pInlines); } int flags = 0; if (m_Options.m_Flags & RENDER_FORCE_DOWNSAMPLE) { flags |= RENDER_FORCE_DOWNSAMPLE; } else if (m_Options.m_Flags & RENDER_FORCE_HALFTONE) { flags = 0; } for (int i = 0; i < pInlines->m_Matrices.GetSize(); i ++) { CFX_AffineMatrix image_matrix = pInlines->m_Matrices.GetAt(i); image_matrix.Concat(*pObj2Device); CPDF_ImageRenderer renderer; if (renderer.Start(this, pInlines->m_pBitmap, fill_argb, bitmap_alpha, &image_matrix, flags, FALSE, m_curBlend)) { renderer.Continue(NULL); } } return TRUE; }
FX_BOOL CPDF_Type3Char::LoadBitmap(CPDF_RenderContext* pContext) { if (m_pBitmap != NULL || m_pForm == NULL) { return TRUE; } if (m_pForm->CountObjects() == 1 && !m_bColored) { CPDF_PageObject *pPageObj = m_pForm->GetObjectAt(m_pForm->GetFirstObjectPosition()); if (pPageObj->m_Type == PDFPAGE_IMAGE) { CPDF_ImageObject* pImage = (CPDF_ImageObject*)pPageObj; m_ImageMatrix = pImage->m_Matrix; const CFX_DIBSource* pSource = pImage->m_pImage->LoadDIBSource(); if (pSource) { m_pBitmap = pSource->Clone(); delete pSource; } delete m_pForm; m_pForm = NULL; return TRUE; } if (pPageObj->m_Type == PDFPAGE_INLINES) { CPDF_InlineImages *pInlines = (CPDF_InlineImages *)pPageObj; if (pInlines->m_pStream) { m_ImageMatrix = pInlines->m_Matrices[0]; CPDF_DIBSource dibsrc; if (!dibsrc.Load(pContext->m_pDocument, pInlines->m_pStream, NULL, NULL, NULL, NULL)) { return FALSE; } m_pBitmap = dibsrc.Clone(); delete m_pForm; m_pForm = NULL; return TRUE; } } } return FALSE; }