summaryrefslogtreecommitdiff
path: root/core/fpdfapi/render/cpdf_dibsource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/render/cpdf_dibsource.cpp')
-rw-r--r--core/fpdfapi/render/cpdf_dibsource.cpp95
1 files changed, 21 insertions, 74 deletions
diff --git a/core/fpdfapi/render/cpdf_dibsource.cpp b/core/fpdfapi/render/cpdf_dibsource.cpp
index c84adfe1ec..33a8d930a5 100644
--- a/core/fpdfapi/render/cpdf_dibsource.cpp
+++ b/core/fpdfapi/render/cpdf_dibsource.cpp
@@ -134,23 +134,15 @@ CPDF_DIBSource::~CPDF_DIBSource() {
}
}
-bool CPDF_DIBSource::Load(CPDF_Document* pDoc,
- const CPDF_Stream* pStream,
- CPDF_DIBSource** ppMask,
- uint32_t* pMatteColor,
- CPDF_Dictionary* pFormResources,
- CPDF_Dictionary* pPageResources,
- bool bStdCS,
- uint32_t GroupFamily,
- bool bLoadMask) {
- if (!pStream) {
+bool CPDF_DIBSource::Load(CPDF_Document* pDoc, const CPDF_Stream* pStream) {
+ if (!pStream)
return false;
- }
+
m_pDocument = pDoc;
m_pDict = pStream->GetDict();
- if (!m_pDict) {
+ if (!m_pDict)
return false;
- }
+
m_pStream = pStream;
m_Width = m_pDict->GetIntegerFor("Width");
m_Height = m_pDict->GetIntegerFor("Height");
@@ -158,28 +150,27 @@ bool CPDF_DIBSource::Load(CPDF_Document* pDoc,
m_Height > kMaxImageDimension) {
return false;
}
- m_GroupFamily = GroupFamily;
- m_bLoadMask = bLoadMask;
- if (!LoadColorInfo(m_pStream->IsInline() ? pFormResources : nullptr,
- pPageResources)) {
+ m_GroupFamily = 0;
+ m_bLoadMask = false;
+ if (!LoadColorInfo(nullptr, nullptr))
return false;
- }
- if (m_bDoBpcCheck && (m_bpc == 0 || m_nComponents == 0)) {
+
+ if (m_bDoBpcCheck && (m_bpc == 0 || m_nComponents == 0))
return false;
- }
+
FX_SAFE_UINT32 src_size =
CalculatePitch8(m_bpc, m_nComponents, m_Width) * m_Height;
- if (!src_size.IsValid()) {
+ if (!src_size.IsValid())
return false;
- }
+
m_pStreamAcc = pdfium::MakeUnique<CPDF_StreamAcc>();
m_pStreamAcc->LoadAllData(pStream, false, src_size.ValueOrDie(), true);
- if (m_pStreamAcc->GetSize() == 0 || !m_pStreamAcc->GetData()) {
+ if (m_pStreamAcc->GetSize() == 0 || !m_pStreamAcc->GetData())
return false;
- }
- if (!CreateDecoder()) {
+
+ if (!CreateDecoder())
return false;
- }
+
if (m_bImageMask) {
m_bpp = 1;
m_bpc = 1;
@@ -193,30 +184,21 @@ bool CPDF_DIBSource::Load(CPDF_Document* pDoc,
m_bpp = 24;
}
FX_SAFE_UINT32 pitch = CalculatePitch32(m_bpp, m_Width);
- if (!pitch.IsValid()) {
+ if (!pitch.IsValid())
return false;
- }
+
m_pLineBuf = FX_Alloc(uint8_t, pitch.ValueOrDie());
- if (m_pColorSpace && bStdCS) {
- m_pColorSpace->EnableStdConversion(true);
- }
LoadPalette();
if (m_bColorKey) {
m_bpp = 32;
m_AlphaFlag = 2;
pitch = CalculatePitch32(m_bpp, m_Width);
- if (!pitch.IsValid()) {
+ if (!pitch.IsValid())
return false;
- }
+
m_pMaskedLine = FX_Alloc(uint8_t, pitch.ValueOrDie());
}
m_Pitch = pitch.ValueOrDie();
- if (ppMask) {
- *ppMask = LoadMask(*pMatteColor);
- }
- if (m_pColorSpace && bStdCS) {
- m_pColorSpace->EnableStdConversion(false);
- }
return true;
}
@@ -710,31 +692,6 @@ void CPDF_DIBSource::LoadJpxBitmap() {
m_bpc = 8;
}
-CPDF_DIBSource* CPDF_DIBSource::LoadMask(uint32_t& MatteColor) {
- MatteColor = 0xFFFFFFFF;
- CPDF_Stream* pSoftMask = m_pDict->GetStreamFor("SMask");
- if (pSoftMask) {
- CPDF_Array* pMatte = pSoftMask->GetDict()->GetArrayFor("Matte");
- if (pMatte && m_pColorSpace &&
- m_pColorSpace->CountComponents() <= m_nComponents) {
- std::vector<FX_FLOAT> colors(m_nComponents);
- for (uint32_t i = 0; i < m_nComponents; i++) {
- colors[i] = pMatte->GetFloatAt(i);
- }
- FX_FLOAT R, G, B;
- m_pColorSpace->GetRGB(colors.data(), R, G, B);
- MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255),
- FXSYS_round(B * 255));
- }
- return LoadMaskDIB(pSoftMask);
- }
-
- if (CPDF_Stream* pStream = ToStream(m_pDict->GetDirectObjectFor("Mask")))
- return LoadMaskDIB(pStream);
-
- return nullptr;
-}
-
int CPDF_DIBSource::StratLoadMask() {
m_MatteColor = 0XFFFFFFFF;
m_pMaskStream = m_pDict->GetStreamFor("SMask");
@@ -783,16 +740,6 @@ CPDF_DIBSource* CPDF_DIBSource::DetachMask() {
return pDIBSource;
}
-CPDF_DIBSource* CPDF_DIBSource::LoadMaskDIB(CPDF_Stream* pMask) {
- CPDF_DIBSource* pMaskSource = new CPDF_DIBSource;
- if (!pMaskSource->Load(m_pDocument, pMask, nullptr, nullptr, nullptr, nullptr,
- true)) {
- delete pMaskSource;
- return nullptr;
- }
- return pMaskSource;
-}
-
int CPDF_DIBSource::StartLoadMaskDIB() {
m_pMask = new CPDF_DIBSource;
int ret = m_pMask->StartLoadDIBSource(m_pDocument, m_pMaskStream, false,