CFX_ByteStringC CPDF_Array::GetConstString(FX_DWORD i) const { if (this && i < (FX_DWORD)m_Objects.GetSize()) { CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); return p->GetConstString(); } return CFX_ByteStringC(); }
CFX_ByteStringC CPDF_Dictionary::GetConstString( const CFX_ByteStringC& key) const { CPDF_Object* p = GetElement(key); if (p) { return p->GetConstString(); } return CFX_ByteStringC(); }
CFX_ByteStringC CPDF_Dictionary::GetConstString(FX_BSTR key, FX_BSTR def) const { CPDF_Object* p = NULL; m_Map.Lookup(key, (void*&)p); if (p) return p->GetConstString(); else return CFX_ByteStringC(def); }
CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key, const CFX_ByteStringC& def) const { CPDF_Object* p = NULL; m_Map.Lookup(key, (void*&)p); if (p) { return p->GetConstString(); } return CFX_ByteStringC(def); }
CFX_ByteStringC CPDF_Dictionary::GetConstString(FX_BSTR key) const { if (this) { CPDF_Object* p = NULL; m_Map.Lookup(key, (void*&)p); if (p) { return p->GetConstString(); } } return CFX_ByteStringC(); }
CFX_ByteStringC CPDF_Object::GetConstString() const { switch (m_Type) { case PDFOBJ_STRING: return CFX_ByteStringC((FX_LPCBYTE)((CPDF_String*)this)->m_String, ((CPDF_String*)this)->m_String.GetLength()); case PDFOBJ_NAME: return CFX_ByteStringC((FX_LPCBYTE)((CPDF_Name*)this)->m_Name, ((CPDF_Name*)this)->m_Name.GetLength()); case PDFOBJ_REFERENCE: { CPDF_Reference* pRef = (CPDF_Reference*)(FX_LPVOID)this; if (pRef->m_pObjList == NULL) { break; } CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum); if (pObj == NULL) { return CFX_ByteStringC(); } return pObj->GetConstString(); } } return CFX_ByteStringC(); }
CFX_ByteStringC CPDF_Object::GetConstString() const { switch (m_Type) { case PDFOBJ_STRING: { CFX_ByteString str = AsString()->m_String; return CFX_ByteStringC((const uint8_t*)str, str.GetLength()); } case PDFOBJ_NAME: { CFX_ByteString name = AsName()->m_Name; return CFX_ByteStringC((const uint8_t*)name, name.GetLength()); } case PDFOBJ_REFERENCE: { const CPDF_Reference* pRef = AsReference(); if (!pRef->m_pObjList) break; CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->GetRefObjNum(), nullptr); return pObj ? pObj->GetConstString() : CFX_ByteStringC(); } } return CFX_ByteStringC(); }
FX_BOOL CPDF_ImageRenderer::StartRenderDIBSource() { if (m_Loader.m_pBitmap == NULL) { return FALSE; } m_BitmapAlpha = 255; const CPDF_GeneralStateData* pGeneralState = m_pImageObject->m_GeneralState; if (pGeneralState) { m_BitmapAlpha = FXSYS_round(pGeneralState->m_FillAlpha * 255); } m_pDIBSource = m_Loader.m_pBitmap; if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_ALPHA && m_Loader.m_pMask == NULL) { return StartBitmapAlpha(); } if (pGeneralState && pGeneralState->m_pTR) { if (!pGeneralState->m_pTransferFunc) { ((CPDF_GeneralStateData*)pGeneralState)->m_pTransferFunc = m_pRenderStatus->GetTransferFunc(pGeneralState->m_pTR); } if (pGeneralState->m_pTransferFunc && !pGeneralState->m_pTransferFunc->m_bIdentity) { m_pDIBSource = m_Loader.m_pBitmap = pGeneralState->m_pTransferFunc->TranslateImage(m_Loader.m_pBitmap, !m_Loader.m_bCached); if (m_Loader.m_bCached && m_Loader.m_pMask) { m_Loader.m_pMask = m_Loader.m_pMask->Clone(); } m_Loader.m_bCached = FALSE; } } m_FillArgb = 0; m_bPatternColor = FALSE; m_pPattern = NULL; if (m_pDIBSource->IsAlphaMask()) { CPDF_Color* pColor = m_pImageObject->m_ColorState.GetFillColor(); if (pColor && pColor->IsPattern()) { m_pPattern = pColor->GetPattern(); if (m_pPattern != NULL) { m_bPatternColor = TRUE; } } m_FillArgb = m_pRenderStatus->GetFillArgb(m_pImageObject); } else if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_GRAY) { m_pClone = m_pDIBSource->Clone(); m_pClone->ConvertColorScale(m_pRenderStatus->m_Options.m_BackColor, m_pRenderStatus->m_Options.m_ForeColor); m_pDIBSource = m_pClone; } m_Flags = 0; if (m_pRenderStatus->m_Options.m_Flags & RENDER_FORCE_DOWNSAMPLE) { m_Flags |= RENDER_FORCE_DOWNSAMPLE; } else if (m_pRenderStatus->m_Options.m_Flags & RENDER_FORCE_HALFTONE) { m_Flags |= RENDER_FORCE_HALFTONE; } if (m_pRenderStatus->m_pDevice->GetDeviceClass() != FXDC_DISPLAY) { CPDF_Object* pFilters = m_pImageObject->m_pImage->GetStream()->GetDict()->GetElementValue( FX_BSTRC("Filter")); if (pFilters) { if (pFilters->IsName()) { CFX_ByteStringC bsDecodeType = pFilters->GetConstString(); if (bsDecodeType == FX_BSTRC("DCTDecode") || bsDecodeType == FX_BSTRC("JPXDecode")) { m_Flags |= FXRENDER_IMAGE_LOSSY; } } else if (CPDF_Array* pArray = pFilters->AsArray()) { for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { CFX_ByteStringC bsDecodeType = pArray->GetConstString(i); if (bsDecodeType == FX_BSTRC("DCTDecode") || bsDecodeType == FX_BSTRC("JPXDecode")) { m_Flags |= FXRENDER_IMAGE_LOSSY; break; } } } } } if (m_pRenderStatus->m_Options.m_Flags & RENDER_NOIMAGESMOOTH) { m_Flags |= FXDIB_NOSMOOTH; } else if (m_pImageObject->m_pImage->IsInterpol()) { m_Flags |= FXDIB_INTERPOL; } if (m_Loader.m_pMask) { return DrawMaskedImage(); } if (m_bPatternColor) { return DrawPatternImage(m_pObj2Device); } if (m_BitmapAlpha == 255 && pGeneralState && pGeneralState->m_FillOP && pGeneralState->m_OPMode == 0 && pGeneralState->m_BlendType == FXDIB_BLEND_NORMAL && pGeneralState->m_StrokeAlpha == 1 && pGeneralState->m_FillAlpha == 1) { CPDF_Document* pDocument = NULL; CPDF_Page* pPage = NULL; if (m_pRenderStatus->m_pContext->m_pPageCache) { pPage = m_pRenderStatus->m_pContext->m_pPageCache->GetPage(); pDocument = pPage->m_pDocument; } else { pDocument = m_pImageObject->m_pImage->GetDocument(); } CPDF_Dictionary* pPageResources = pPage ? pPage->m_pPageResources : NULL; CPDF_Object* pCSObj = m_pImageObject->m_pImage->GetStream()->GetDict()->GetElementValue( FX_BSTRC("ColorSpace")); CPDF_ColorSpace* pColorSpace = pDocument->LoadColorSpace(pCSObj, pPageResources); if (pColorSpace) { int format = pColorSpace->GetFamily(); if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION || format == PDFCS_DEVICEN) { m_BlendType = FXDIB_BLEND_DARKEN; } pDocument->GetPageData()->ReleaseColorSpace(pCSObj); } } return StartDIBSource(); }