| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fpdfapi/page/cpdf_image.h" | 7 #include "core/fpdfapi/page/cpdf_image.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 pDict->SetIntegerFor("BitsPerComponent", 1); | 197 pDict->SetIntegerFor("BitsPerComponent", 1); |
| 198 dest_pitch = (BitmapWidth + 7) / 8; | 198 dest_pitch = (BitmapWidth + 7) / 8; |
| 199 if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) { | 199 if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) { |
| 200 opType = 1; | 200 opType = 1; |
| 201 } else { | 201 } else { |
| 202 opType = 0; | 202 opType = 0; |
| 203 } | 203 } |
| 204 } else if (bpp == 8) { | 204 } else if (bpp == 8) { |
| 205 int32_t iPalette = pBitmap->GetPaletteSize(); | 205 int32_t iPalette = pBitmap->GetPaletteSize(); |
| 206 if (iPalette > 0) { | 206 if (iPalette > 0) { |
| 207 CPDF_Array* pCS = new CPDF_Array; | 207 UniqueArray pCS(new CPDF_Array); |
| 208 pCS->AddName("Indexed"); | 208 pCS->AddName("Indexed"); |
| 209 pCS->AddName("DeviceRGB"); | 209 pCS->AddName("DeviceRGB"); |
| 210 pCS->AddInteger(iPalette - 1); | 210 pCS->AddInteger(iPalette - 1); |
| 211 uint8_t* pColorTable = FX_Alloc2D(uint8_t, iPalette, 3); | 211 uint8_t* pColorTable = FX_Alloc2D(uint8_t, iPalette, 3); |
| 212 uint8_t* ptr = pColorTable; | 212 uint8_t* ptr = pColorTable; |
| 213 for (int32_t i = 0; i < iPalette; i++) { | 213 for (int32_t i = 0; i < iPalette; i++) { |
| 214 uint32_t argb = pBitmap->GetPaletteArgb(i); | 214 uint32_t argb = pBitmap->GetPaletteArgb(i); |
| 215 ptr[0] = (uint8_t)(argb >> 16); | 215 ptr[0] = (uint8_t)(argb >> 16); |
| 216 ptr[1] = (uint8_t)(argb >> 8); | 216 ptr[1] = (uint8_t)(argb >> 8); |
| 217 ptr[2] = (uint8_t)argb; | 217 ptr[2] = (uint8_t)argb; |
| 218 ptr += 3; | 218 ptr += 3; |
| 219 } | 219 } |
| 220 CPDF_Stream* pCTS = new CPDF_Stream( | 220 CPDF_Stream* pCTS = m_pDocument->AddIndirectStream( |
| 221 pColorTable, iPalette * 3, | 221 pColorTable, iPalette * 3, |
| 222 new CPDF_Dictionary(m_pDocument->GetByteStringPool())); | 222 new CPDF_Dictionary(m_pDocument->GetByteStringPool())); |
| 223 pCS->AddReference(m_pDocument, m_pDocument->AddIndirectObject(pCTS)); | 223 pCS->AddReference(m_pDocument, pCTS->GetObjNum()); |
| 224 pDict->SetReferenceFor("ColorSpace", m_pDocument, | 224 pDict->SetReferenceFor("ColorSpace", m_pDocument, |
| 225 m_pDocument->AddIndirectObject(pCS)); | 225 m_pDocument->AddIndirectObject(std::move(pCS))); |
| 226 } else { | 226 } else { |
| 227 pDict->SetNameFor("ColorSpace", "DeviceGray"); | 227 pDict->SetNameFor("ColorSpace", "DeviceGray"); |
| 228 } | 228 } |
| 229 pDict->SetIntegerFor("BitsPerComponent", 8); | 229 pDict->SetIntegerFor("BitsPerComponent", 8); |
| 230 if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) { | 230 if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) { |
| 231 dest_pitch = BitmapWidth; | 231 dest_pitch = BitmapWidth; |
| 232 opType = 1; | 232 opType = 1; |
| 233 } else { | 233 } else { |
| 234 opType = 0; | 234 opType = 0; |
| 235 } | 235 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 } else if (pMaskBitmap->GetFormat() == FXDIB_1bppMask) { | 267 } else if (pMaskBitmap->GetFormat() == FXDIB_1bppMask) { |
| 268 } else { | 268 } else { |
| 269 mask_buf = FX_Alloc2D(uint8_t, maskHeight, maskWidth); | 269 mask_buf = FX_Alloc2D(uint8_t, maskHeight, maskWidth); |
| 270 mask_size = maskHeight * maskWidth; // Safe since checked alloc returned. | 270 mask_size = maskHeight * maskWidth; // Safe since checked alloc returned. |
| 271 for (int32_t a = 0; a < maskHeight; a++) { | 271 for (int32_t a = 0; a < maskHeight; a++) { |
| 272 FXSYS_memcpy(mask_buf + a * maskWidth, pMaskBitmap->GetScanline(a), | 272 FXSYS_memcpy(mask_buf + a * maskWidth, pMaskBitmap->GetScanline(a), |
| 273 maskWidth); | 273 maskWidth); |
| 274 } | 274 } |
| 275 } | 275 } |
| 276 pMaskDict->SetIntegerFor("Length", mask_size); | 276 pMaskDict->SetIntegerFor("Length", mask_size); |
| 277 pDict->SetReferenceFor("SMask", m_pDocument, | 277 pDict->SetReferenceFor( |
| 278 m_pDocument->AddIndirectObject(new CPDF_Stream( | 278 "SMask", m_pDocument, |
| 279 mask_buf, mask_size, pMaskDict))); | 279 m_pDocument->AddIndirectStream(mask_buf, mask_size, pMaskDict)); |
| 280 if (bDeleteMask) | 280 if (bDeleteMask) |
| 281 delete pMaskBitmap; | 281 delete pMaskBitmap; |
| 282 } | 282 } |
| 283 if (opType == 0) { | 283 if (opType == 0) { |
| 284 if (iCompress & PDF_IMAGE_LOSSLESS_COMPRESS) { | 284 if (iCompress & PDF_IMAGE_LOSSLESS_COMPRESS) { |
| 285 } else { | 285 } else { |
| 286 if (pBitmap->GetBPP() == 1) { | 286 if (pBitmap->GetBPP() == 1) { |
| 287 } else if (pBitmap->GetBPP() >= 8 && pBitmap->GetPalette()) { | 287 } else if (pBitmap->GetBPP() >= 8 && pBitmap->GetPalette()) { |
| 288 CFX_DIBitmap* pNewBitmap = new CFX_DIBitmap(); | 288 CFX_DIBitmap* pNewBitmap = new CFX_DIBitmap(); |
| 289 pNewBitmap->Copy(pBitmap); | 289 pNewBitmap->Copy(pBitmap); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 } | 403 } |
| 404 if (!ret) { | 404 if (!ret) { |
| 405 delete m_pDIBSource; | 405 delete m_pDIBSource; |
| 406 m_pDIBSource = nullptr; | 406 m_pDIBSource = nullptr; |
| 407 return FALSE; | 407 return FALSE; |
| 408 } | 408 } |
| 409 m_pMask = pSource->DetachMask(); | 409 m_pMask = pSource->DetachMask(); |
| 410 m_MatteColor = pSource->GetMatteColor(); | 410 m_MatteColor = pSource->GetMatteColor(); |
| 411 return FALSE; | 411 return FALSE; |
| 412 } | 412 } |
| OLD | NEW |