diff options
Diffstat (limited to 'core/src/fpdfapi/fpdf_edit')
-rw-r--r-- | core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp index a5a91ebc53..9096bf938e 100644 --- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp +++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp @@ -190,8 +190,10 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, FX_INT32 iCompress, IFX_F } } const CFX_DIBitmap* pMaskBitmap = NULL; + FX_BOOL bDeleteMask = FALSE; if (pBitmap->HasAlpha()) { pMaskBitmap = pBitmap->GetAlphaMask(); + bDeleteMask = TRUE; } if (!pMaskBitmap && pMask) { FXDIB_Format maskFormat = pMask->GetFormat(); @@ -204,7 +206,6 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, FX_INT32 iCompress, IFX_F FX_INT32 maskHeight = pMaskBitmap->GetHeight(); FX_LPBYTE mask_buf = NULL; FX_STRSIZE mask_size; - FX_BOOL bDeleteMask = TRUE; CPDF_Dictionary* pMaskDict = new CPDF_Dictionary; pMaskDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("XObject")); pMaskDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image")); @@ -223,24 +224,20 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, FX_INT32 iCompress, IFX_F FXSYS_memcpy32(mask_buf + a * maskWidth, pMaskBitmap->GetScanline(a), maskWidth); } } - if (pMaskDict) { - pMaskDict->SetAtInteger(FX_BSTRC("Length"), mask_size); - CPDF_Stream* pMaskStream = NULL; - if (bUseMatte) { - int a, r, g, b; - ArgbDecode(*(pParam->pMatteColor), a, r, g, b); - CPDF_Array* pMatte = new CPDF_Array; - pMatte->AddInteger(r); - pMatte->AddInteger(g); - pMatte->AddInteger(b); - pMaskDict->SetAt(FX_BSTRC("Matte"), pMatte); - } - pMaskStream = new CPDF_Stream(mask_buf, mask_size, pMaskDict); - m_pDocument->AddIndirectObject(pMaskStream); - bDeleteMask = FALSE; - pDict->SetAtReference(FX_BSTRC("SMask"), m_pDocument, pMaskStream); + pMaskDict->SetAtInteger(FX_BSTRC("Length"), mask_size); + if (bUseMatte) { + int a, r, g, b; + ArgbDecode(*(pParam->pMatteColor), a, r, g, b); + CPDF_Array* pMatte = new CPDF_Array; + pMatte->AddInteger(r); + pMatte->AddInteger(g); + pMatte->AddInteger(b); + pMaskDict->SetAt(FX_BSTRC("Matte"), pMatte); } - if (pBitmap->HasAlpha()) { + CPDF_Stream* pMaskStream = new CPDF_Stream(mask_buf, mask_size, pMaskDict); + m_pDocument->AddIndirectObject(pMaskStream); + pDict->SetAtReference(FX_BSTRC("SMask"), m_pDocument, pMaskStream); + if (bDeleteMask) { delete pMaskBitmap; } } |