Consolidate code into CPDF_Image::CreateXObjectImageDict(). Add a helper method for creating basic image dictionaries. Change-Id: I16bffd7c100deadef4356ef70d65cd8a1160f652 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65831 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp index 5fbb154..ce46538 100644 --- a/core/fpdfapi/page/cpdf_image.cpp +++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -94,11 +94,8 @@ return nullptr; } - auto pDict = m_pDocument->New<CPDF_Dictionary>(); - pDict->SetNewFor<CPDF_Name>("Type", "XObject"); - pDict->SetNewFor<CPDF_Name>("Subtype", "Image"); - pDict->SetNewFor<CPDF_Number>("Width", info.width); - pDict->SetNewFor<CPDF_Number>("Height", info.height); + RetainPtr<CPDF_Dictionary> pDict = + CreateXObjectImageDict(info.width, info.height); const char* csname = nullptr; if (info.num_components == 1) { csname = "DeviceGray"; @@ -173,12 +170,8 @@ if (BitmapWidth < 1 || BitmapHeight < 1) return; - auto pDict = m_pDocument->New<CPDF_Dictionary>(); - pDict->SetNewFor<CPDF_Name>("Type", "XObject"); - pDict->SetNewFor<CPDF_Name>("Subtype", "Image"); - pDict->SetNewFor<CPDF_Number>("Width", BitmapWidth); - pDict->SetNewFor<CPDF_Number>("Height", BitmapHeight); - + RetainPtr<CPDF_Dictionary> pDict = + CreateXObjectImageDict(BitmapWidth, BitmapHeight); const int32_t bpp = pBitmap->GetBPP(); size_t dest_pitch = 0; bool bCopyWithoutAlpha = true; @@ -270,11 +263,8 @@ int32_t maskHeight = pMaskBitmap->GetHeight(); std::unique_ptr<uint8_t, FxFreeDeleter> mask_buf; int32_t mask_size = 0; - auto pMaskDict = m_pDocument->New<CPDF_Dictionary>(); - pMaskDict->SetNewFor<CPDF_Name>("Type", "XObject"); - pMaskDict->SetNewFor<CPDF_Name>("Subtype", "Image"); - pMaskDict->SetNewFor<CPDF_Number>("Width", maskWidth); - pMaskDict->SetNewFor<CPDF_Number>("Height", maskHeight); + RetainPtr<CPDF_Dictionary> pMaskDict = + CreateXObjectImageDict(maskWidth, maskHeight); pMaskDict->SetNewFor<CPDF_Name>("ColorSpace", "DeviceGray"); pMaskDict->SetNewFor<CPDF_Number>("BitsPerComponent", 8); if (pMaskBitmap->GetFormat() != FXDIB_1bppMask) { @@ -398,3 +388,13 @@ } return false; } + +RetainPtr<CPDF_Dictionary> CPDF_Image::CreateXObjectImageDict(int width, + int height) { + auto dict = m_pDocument->New<CPDF_Dictionary>(); + dict->SetNewFor<CPDF_Name>("Type", "XObject"); + dict->SetNewFor<CPDF_Name>("Subtype", "Image"); + dict->SetNewFor<CPDF_Number>("Width", width); + dict->SetNewFor<CPDF_Number>("Height", height); + return dict; +}
diff --git a/core/fpdfapi/page/cpdf_image.h b/core/fpdfapi/page/cpdf_image.h index f8d0d00..4194d49 100644 --- a/core/fpdfapi/page/cpdf_image.h +++ b/core/fpdfapi/page/cpdf_image.h
@@ -79,6 +79,8 @@ void FinishInitialization(CPDF_Dictionary* pStreamDict); RetainPtr<CPDF_Dictionary> InitJPEG(pdfium::span<uint8_t> src_span); + RetainPtr<CPDF_Dictionary> CreateXObjectImageDict(int width, int height); + int32_t m_Height = 0; int32_t m_Width = 0; bool m_bIsInline = false;