Index: core/fpdfapi/page/cpdf_image.cpp |
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp |
index 1c3aa89ff2f16f2d5a3103b53d315cdad29635a0..8ded34e6306bdd3dba9628190946a5fe92fa867f 100644 |
--- a/core/fpdfapi/page/cpdf_image.cpp |
+++ b/core/fpdfapi/page/cpdf_image.cpp |
@@ -8,6 +8,7 @@ |
#include <algorithm> |
#include <memory> |
+#include <utility> |
#include <vector> |
#include "core/fpdfapi/cpdf_modulemgr.h" |
@@ -97,10 +98,10 @@ CPDF_Dictionary* CPDF_Image::InitJPEG(uint8_t* pData, uint32_t size) { |
CPDF_Dictionary* pDict = |
new CPDF_Dictionary(m_pDocument->GetByteStringPool()); |
- pDict->SetNameFor("Type", "XObject"); |
- pDict->SetNameFor("Subtype", "Image"); |
- pDict->SetIntegerFor("Width", width); |
- pDict->SetIntegerFor("Height", height); |
+ pDict->SetNewFor<CPDF_Name>("Type", "XObject"); |
+ pDict->SetNewFor<CPDF_Name>("Subtype", "Image"); |
+ pDict->SetNewFor<CPDF_Number>("Width", width); |
+ pDict->SetNewFor<CPDF_Number>("Height", height); |
const FX_CHAR* csname = nullptr; |
if (num_comps == 1) { |
csname = "DeviceGray"; |
@@ -108,21 +109,18 @@ CPDF_Dictionary* CPDF_Image::InitJPEG(uint8_t* pData, uint32_t size) { |
csname = "DeviceRGB"; |
} else if (num_comps == 4) { |
csname = "DeviceCMYK"; |
- CPDF_Array* pDecode = new CPDF_Array; |
+ CPDF_Array* pDecode = pDict->SetNewFor<CPDF_Array>("Decode"); |
for (int n = 0; n < 4; n++) { |
pDecode->AddNew<CPDF_Number>(1); |
pDecode->AddNew<CPDF_Number>(0); |
} |
- pDict->SetFor("Decode", pDecode); |
} |
- pDict->SetNameFor("ColorSpace", csname); |
- pDict->SetIntegerFor("BitsPerComponent", bits); |
- pDict->SetNameFor("Filter", "DCTDecode"); |
+ pDict->SetNewFor<CPDF_Name>("ColorSpace", csname); |
+ pDict->SetNewFor<CPDF_Number>("BitsPerComponent", bits); |
+ pDict->SetNewFor<CPDF_Name>("Filter", "DCTDecode"); |
if (!color_trans) { |
- CPDF_Dictionary* pParms = |
- new CPDF_Dictionary(m_pDocument->GetByteStringPool()); |
- pDict->SetFor("DecodeParms", pParms); |
- pParms->SetIntegerFor("ColorTransform", 0); |
+ CPDF_Dictionary* pParms = pDict->SetNewFor<CPDF_Dictionary>("DecodeParms"); |
+ pParms->SetNewFor<CPDF_Number>("ColorTransform", 0); |
} |
m_bIsMask = false; |
m_Width = width; |
@@ -166,10 +164,10 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) { |
CPDF_Dictionary* pDict = |
new CPDF_Dictionary(m_pDocument->GetByteStringPool()); |
- pDict->SetNameFor("Type", "XObject"); |
- pDict->SetNameFor("Subtype", "Image"); |
- pDict->SetIntegerFor("Width", BitmapWidth); |
- pDict->SetIntegerFor("Height", BitmapHeight); |
+ pDict->SetNewFor<CPDF_Name>("Type", "XObject"); |
+ pDict->SetNewFor<CPDF_Name>("Subtype", "Image"); |
+ pDict->SetNewFor<CPDF_Number>("Width", BitmapWidth); |
+ pDict->SetNewFor<CPDF_Number>("Height", BitmapHeight); |
uint8_t* dest_buf = nullptr; |
FX_STRSIZE dest_pitch = 0, dest_size = 0, opType = -1; |
if (bpp == 1) { |
@@ -181,15 +179,14 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) { |
ArgbDecode(pBitmap->GetPaletteArgb(1), set_a, set_r, set_g, set_b); |
} |
if (set_a == 0 || reset_a == 0) { |
- pDict->SetFor("ImageMask", new CPDF_Boolean(true)); |
+ pDict->SetNewFor<CPDF_Boolean>("ImageMask", true); |
if (reset_a == 0) { |
- CPDF_Array* pArray = new CPDF_Array; |
+ CPDF_Array* pArray = pDict->SetNewFor<CPDF_Array>("Decode"); |
pArray->AddNew<CPDF_Number>(1); |
pArray->AddNew<CPDF_Number>(0); |
- pDict->SetFor("Decode", pArray); |
} |
} else { |
- CPDF_Array* pCS = new CPDF_Array; |
+ CPDF_Array* pCS = pDict->SetNewFor<CPDF_Array>("ColorSpace"); |
pCS->AddNew<CPDF_Name>("Indexed"); |
pCS->AddNew<CPDF_Name>("DeviceRGB"); |
pCS->AddNew<CPDF_Number>(1); |
@@ -203,9 +200,8 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) { |
pBuf[5] = (FX_CHAR)set_b; |
ct.ReleaseBuffer(6); |
pCS->AddNew<CPDF_String>(ct, true); |
- pDict->SetFor("ColorSpace", pCS); |
} |
- pDict->SetIntegerFor("BitsPerComponent", 1); |
+ pDict->SetNewFor<CPDF_Number>("BitsPerComponent", 1); |
dest_pitch = (BitmapWidth + 7) / 8; |
if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) { |
opType = 1; |
@@ -232,11 +228,12 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) { |
pColorTable, iPalette * 3, |
new CPDF_Dictionary(m_pDocument->GetByteStringPool())); |
pCS->AddNew<CPDF_Reference>(m_pDocument, pCTS->GetObjNum()); |
- pDict->SetReferenceFor("ColorSpace", m_pDocument, pCS); |
+ pDict->SetNewFor<CPDF_Reference>("ColorSpace", m_pDocument, |
+ pCS->GetObjNum()); |
} else { |
- pDict->SetNameFor("ColorSpace", "DeviceGray"); |
+ pDict->SetNewFor<CPDF_Name>("ColorSpace", "DeviceGray"); |
} |
- pDict->SetIntegerFor("BitsPerComponent", 8); |
+ pDict->SetNewFor<CPDF_Number>("BitsPerComponent", 8); |
if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) { |
dest_pitch = BitmapWidth; |
opType = 1; |
@@ -244,8 +241,8 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) { |
opType = 0; |
} |
} else { |
- pDict->SetNameFor("ColorSpace", "DeviceRGB"); |
- pDict->SetIntegerFor("BitsPerComponent", 8); |
+ pDict->SetNewFor<CPDF_Name>("ColorSpace", "DeviceRGB"); |
+ pDict->SetNewFor<CPDF_Number>("BitsPerComponent", 8); |
if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) { |
dest_pitch = BitmapWidth * 3; |
opType = 2; |
@@ -266,12 +263,12 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) { |
FX_STRSIZE mask_size = 0; |
CPDF_Dictionary* pMaskDict = |
new CPDF_Dictionary(m_pDocument->GetByteStringPool()); |
- pMaskDict->SetNameFor("Type", "XObject"); |
- pMaskDict->SetNameFor("Subtype", "Image"); |
- pMaskDict->SetIntegerFor("Width", maskWidth); |
- pMaskDict->SetIntegerFor("Height", maskHeight); |
- pMaskDict->SetNameFor("ColorSpace", "DeviceGray"); |
- pMaskDict->SetIntegerFor("BitsPerComponent", 8); |
+ pMaskDict->SetNewFor<CPDF_Name>("Type", "XObject"); |
+ pMaskDict->SetNewFor<CPDF_Name>("Subtype", "Image"); |
+ pMaskDict->SetNewFor<CPDF_Number>("Width", maskWidth); |
+ pMaskDict->SetNewFor<CPDF_Number>("Height", maskHeight); |
+ pMaskDict->SetNewFor<CPDF_Name>("ColorSpace", "DeviceGray"); |
+ pMaskDict->SetNewFor<CPDF_Number>("BitsPerComponent", 8); |
if (pMaskBitmap->GetBPP() == 8 && |
(iCompress & PDF_IMAGE_MASK_LOSSY_COMPRESS) != 0) { |
} else if (pMaskBitmap->GetFormat() == FXDIB_1bppMask) { |
@@ -283,10 +280,11 @@ void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress) { |
maskWidth); |
} |
} |
- pMaskDict->SetIntegerFor("Length", mask_size); |
- pDict->SetReferenceFor( |
+ pMaskDict->SetNewFor<CPDF_Number>("Length", mask_size); |
+ pDict->SetNewFor<CPDF_Reference>( |
"SMask", m_pDocument, |
- m_pDocument->NewIndirect<CPDF_Stream>(mask_buf, mask_size, pMaskDict)); |
+ m_pDocument->NewIndirect<CPDF_Stream>(mask_buf, mask_size, pMaskDict) |
+ ->GetObjNum()); |
if (bDeleteMask) |
delete pMaskBitmap; |
} |