Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: core/fpdfapi/fpdf_render/fpdf_render_image.cpp

Issue 2032613003: Get rid of NULLs in core/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: Fix a bad merge Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 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/fpdf_render/render_int.h" 7 #include "core/fpdfapi/fpdf_render/render_int.h"
8 8
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 13 matching lines...) Expand all
24 #include "core/fpdfapi/fpdf_render/include/cpdf_renderoptions.h" 24 #include "core/fpdfapi/fpdf_render/include/cpdf_renderoptions.h"
25 #include "core/fpdfdoc/include/fpdf_doc.h" 25 #include "core/fpdfdoc/include/fpdf_doc.h"
26 #include "core/fxcodec/include/fx_codec.h" 26 #include "core/fxcodec/include/fx_codec.h"
27 #include "core/fxcrt/include/fx_safe_types.h" 27 #include "core/fxcrt/include/fx_safe_types.h"
28 #include "core/fxge/include/fx_ge.h" 28 #include "core/fxge/include/fx_ge.h"
29 29
30 FX_BOOL CPDF_RenderStatus::ProcessImage(const CPDF_ImageObject* pImageObj, 30 FX_BOOL CPDF_RenderStatus::ProcessImage(const CPDF_ImageObject* pImageObj,
31 const CFX_Matrix* pObj2Device) { 31 const CFX_Matrix* pObj2Device) {
32 CPDF_ImageRenderer render; 32 CPDF_ImageRenderer render;
33 if (render.Start(this, pImageObj, pObj2Device, m_bStdCS, m_curBlend)) { 33 if (render.Start(this, pImageObj, pObj2Device, m_bStdCS, m_curBlend)) {
34 render.Continue(NULL); 34 render.Continue(nullptr);
35 } 35 }
36 return render.m_Result; 36 return render.m_Result;
37 } 37 }
38 void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, 38 void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap,
39 int left, 39 int left,
40 int top, 40 int top,
41 FX_ARGB mask_argb, 41 FX_ARGB mask_argb,
42 int bitmap_alpha, 42 int bitmap_alpha,
43 int blend_mode, 43 int blend_mode,
44 int Transparency) { 44 int Transparency) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 if (bGetBackGround) { 82 if (bGetBackGround) {
83 if (bIsolated || !bGroup) { 83 if (bIsolated || !bGroup) {
84 if (pDIBitmap->IsAlphaMask()) { 84 if (pDIBitmap->IsAlphaMask()) {
85 return; 85 return;
86 } 86 }
87 m_pDevice->SetDIBitsWithBlend(pDIBitmap, left, top, blend_mode); 87 m_pDevice->SetDIBitsWithBlend(pDIBitmap, left, top, blend_mode);
88 } else { 88 } else {
89 FX_RECT rect(left, top, left + pDIBitmap->GetWidth(), 89 FX_RECT rect(left, top, left + pDIBitmap->GetWidth(),
90 top + pDIBitmap->GetHeight()); 90 top + pDIBitmap->GetHeight());
91 rect.Intersect(m_pDevice->GetClipBox()); 91 rect.Intersect(m_pDevice->GetClipBox());
92 CFX_DIBitmap* pClone = NULL; 92 CFX_DIBitmap* pClone = nullptr;
93 FX_BOOL bClone = FALSE; 93 FX_BOOL bClone = FALSE;
94 if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) { 94 if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) {
95 bClone = TRUE; 95 bClone = TRUE;
96 pClone = m_pDevice->GetBackDrop()->Clone(&rect); 96 pClone = m_pDevice->GetBackDrop()->Clone(&rect);
97 CFX_DIBitmap* pForeBitmap = m_pDevice->GetBitmap(); 97 CFX_DIBitmap* pForeBitmap = m_pDevice->GetBitmap();
98 pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(), 98 pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(),
99 pForeBitmap, rect.left, rect.top); 99 pForeBitmap, rect.left, rect.top);
100 left = left >= 0 ? 0 : left; 100 left = left >= 0 ? 0 : left;
101 top = top >= 0 ? 0 : top; 101 top = top >= 0 ? 0 : top;
102 if (!pDIBitmap->IsAlphaMask()) 102 if (!pDIBitmap->IsAlphaMask())
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 *dest_buf++ = m_RampG[*(src_buf++)]; 308 *dest_buf++ = m_RampG[*(src_buf++)];
309 *dest_buf++ = m_RampR[*(src_buf++)]; 309 *dest_buf++ = m_RampR[*(src_buf++)];
310 *dest_buf++ = *(src_buf++); 310 *dest_buf++ = *(src_buf++);
311 } 311 }
312 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 312 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
313 } 313 }
314 #endif 314 #endif
315 } 315 }
316 } 316 }
317 CPDF_ImageRenderer::CPDF_ImageRenderer() { 317 CPDF_ImageRenderer::CPDF_ImageRenderer() {
318 m_pRenderStatus = NULL; 318 m_pRenderStatus = nullptr;
319 m_pImageObject = NULL; 319 m_pImageObject = nullptr;
320 m_Result = TRUE; 320 m_Result = TRUE;
321 m_Status = 0; 321 m_Status = 0;
322 m_pTransformer = NULL; 322 m_pTransformer = nullptr;
323 m_DeviceHandle = NULL; 323 m_DeviceHandle = nullptr;
324 m_LoadHandle = NULL; 324 m_LoadHandle = nullptr;
325 m_pClone = NULL; 325 m_pClone = nullptr;
326 m_bStdCS = FALSE; 326 m_bStdCS = FALSE;
327 m_bPatternColor = FALSE; 327 m_bPatternColor = FALSE;
328 m_BlendType = FXDIB_BLEND_NORMAL; 328 m_BlendType = FXDIB_BLEND_NORMAL;
329 m_pPattern = NULL; 329 m_pPattern = nullptr;
330 m_pObj2Device = NULL; 330 m_pObj2Device = nullptr;
331 } 331 }
332 CPDF_ImageRenderer::~CPDF_ImageRenderer() { 332 CPDF_ImageRenderer::~CPDF_ImageRenderer() {
333 delete m_pTransformer; 333 delete m_pTransformer;
334 if (m_DeviceHandle) { 334 if (m_DeviceHandle) {
335 m_pRenderStatus->m_pDevice->CancelDIBits(m_DeviceHandle); 335 m_pRenderStatus->m_pDevice->CancelDIBits(m_DeviceHandle);
336 } 336 }
337 delete m_LoadHandle; 337 delete m_LoadHandle;
338 delete m_pClone; 338 delete m_pClone;
339 } 339 }
340 FX_BOOL CPDF_ImageRenderer::StartLoadDIBSource() { 340 FX_BOOL CPDF_ImageRenderer::StartLoadDIBSource() {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 pGeneralState->m_pTransferFunc->TranslateImage(m_Loader.m_pBitmap, 385 pGeneralState->m_pTransferFunc->TranslateImage(m_Loader.m_pBitmap,
386 !m_Loader.m_bCached); 386 !m_Loader.m_bCached);
387 if (m_Loader.m_bCached && m_Loader.m_pMask) { 387 if (m_Loader.m_bCached && m_Loader.m_pMask) {
388 m_Loader.m_pMask = m_Loader.m_pMask->Clone(); 388 m_Loader.m_pMask = m_Loader.m_pMask->Clone();
389 } 389 }
390 m_Loader.m_bCached = FALSE; 390 m_Loader.m_bCached = FALSE;
391 } 391 }
392 } 392 }
393 m_FillArgb = 0; 393 m_FillArgb = 0;
394 m_bPatternColor = FALSE; 394 m_bPatternColor = FALSE;
395 m_pPattern = NULL; 395 m_pPattern = nullptr;
396 if (m_pDIBSource->IsAlphaMask()) { 396 if (m_pDIBSource->IsAlphaMask()) {
397 CPDF_Color* pColor = m_pImageObject->m_ColorState.GetFillColor(); 397 CPDF_Color* pColor = m_pImageObject->m_ColorState.GetFillColor();
398 if (pColor && pColor->IsPattern()) { 398 if (pColor && pColor->IsPattern()) {
399 m_pPattern = pColor->GetPattern(); 399 m_pPattern = pColor->GetPattern();
400 if (m_pPattern) { 400 if (m_pPattern) {
401 m_bPatternColor = TRUE; 401 m_bPatternColor = TRUE;
402 } 402 }
403 } 403 }
404 m_FillArgb = m_pRenderStatus->GetFillArgb(m_pImageObject); 404 m_FillArgb = m_pRenderStatus->GetFillArgb(m_pImageObject);
405 } else if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_GRAY) { 405 } else if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 if (m_Loader.m_pMask) { 443 if (m_Loader.m_pMask) {
444 return DrawMaskedImage(); 444 return DrawMaskedImage();
445 } 445 }
446 if (m_bPatternColor) { 446 if (m_bPatternColor) {
447 return DrawPatternImage(m_pObj2Device); 447 return DrawPatternImage(m_pObj2Device);
448 } 448 }
449 if (m_BitmapAlpha == 255 && pGeneralState && pGeneralState->m_FillOP && 449 if (m_BitmapAlpha == 255 && pGeneralState && pGeneralState->m_FillOP &&
450 pGeneralState->m_OPMode == 0 && 450 pGeneralState->m_OPMode == 0 &&
451 pGeneralState->m_BlendType == FXDIB_BLEND_NORMAL && 451 pGeneralState->m_BlendType == FXDIB_BLEND_NORMAL &&
452 pGeneralState->m_StrokeAlpha == 1 && pGeneralState->m_FillAlpha == 1) { 452 pGeneralState->m_StrokeAlpha == 1 && pGeneralState->m_FillAlpha == 1) {
453 CPDF_Document* pDocument = NULL; 453 CPDF_Document* pDocument = nullptr;
454 CPDF_Page* pPage = NULL; 454 CPDF_Page* pPage = nullptr;
455 if (m_pRenderStatus->m_pContext->GetPageCache()) { 455 if (m_pRenderStatus->m_pContext->GetPageCache()) {
456 pPage = m_pRenderStatus->m_pContext->GetPageCache()->GetPage(); 456 pPage = m_pRenderStatus->m_pContext->GetPageCache()->GetPage();
457 pDocument = pPage->m_pDocument; 457 pDocument = pPage->m_pDocument;
458 } else { 458 } else {
459 pDocument = m_pImageObject->m_pImage->GetDocument(); 459 pDocument = m_pImageObject->m_pImage->GetDocument();
460 } 460 }
461 CPDF_Dictionary* pPageResources = pPage ? pPage->m_pPageResources : NULL; 461 CPDF_Dictionary* pPageResources = pPage ? pPage->m_pPageResources : nullptr;
462 CPDF_Object* pCSObj = 462 CPDF_Object* pCSObj =
463 m_pImageObject->m_pImage->GetStream()->GetDict()->GetDirectObjectBy( 463 m_pImageObject->m_pImage->GetStream()->GetDict()->GetDirectObjectBy(
464 "ColorSpace"); 464 "ColorSpace");
465 CPDF_ColorSpace* pColorSpace = 465 CPDF_ColorSpace* pColorSpace =
466 pDocument->LoadColorSpace(pCSObj, pPageResources); 466 pDocument->LoadColorSpace(pCSObj, pPageResources);
467 if (pColorSpace) { 467 if (pColorSpace) {
468 int format = pColorSpace->GetFamily(); 468 int format = pColorSpace->GetFamily();
469 if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION || 469 if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION ||
470 format == PDFCS_DEVICEN) { 470 format == PDFCS_DEVICEN) {
471 m_BlendType = FXDIB_BLEND_DARKEN; 471 m_BlendType = FXDIB_BLEND_DARKEN;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 new_matrix.TranslateI(-rect.left, -rect.top); 530 new_matrix.TranslateI(-rect.left, -rect.top);
531 int width = rect.Width(); 531 int width = rect.Width();
532 int height = rect.Height(); 532 int height = rect.Height();
533 CFX_FxgeDevice bitmap_device1; 533 CFX_FxgeDevice bitmap_device1;
534 if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32, nullptr)) 534 if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32, nullptr))
535 return TRUE; 535 return TRUE;
536 536
537 bitmap_device1.GetBitmap()->Clear(0xffffff); 537 bitmap_device1.GetBitmap()->Clear(0xffffff);
538 { 538 {
539 CPDF_RenderStatus bitmap_render; 539 CPDF_RenderStatus bitmap_render;
540 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, NULL, 540 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1,
541 NULL, NULL, NULL, &m_pRenderStatus->m_Options, 0, 541 nullptr, nullptr, nullptr, nullptr,
542 m_pRenderStatus->m_bDropObjects, NULL, TRUE); 542 &m_pRenderStatus->m_Options, 0,
543 m_pRenderStatus->m_bDropObjects, nullptr, TRUE);
543 CFX_Matrix patternDevice = *pObj2Device; 544 CFX_Matrix patternDevice = *pObj2Device;
544 patternDevice.Translate((FX_FLOAT)-rect.left, (FX_FLOAT)-rect.top); 545 patternDevice.Translate((FX_FLOAT)-rect.left, (FX_FLOAT)-rect.top);
545 if (CPDF_TilingPattern* pTilingPattern = m_pPattern->AsTilingPattern()) { 546 if (CPDF_TilingPattern* pTilingPattern = m_pPattern->AsTilingPattern()) {
546 bitmap_render.DrawTilingPattern(pTilingPattern, m_pImageObject, 547 bitmap_render.DrawTilingPattern(pTilingPattern, m_pImageObject,
547 &patternDevice, FALSE); 548 &patternDevice, FALSE);
548 } else if (CPDF_ShadingPattern* pShadingPattern = 549 } else if (CPDF_ShadingPattern* pShadingPattern =
549 m_pPattern->AsShadingPattern()) { 550 m_pPattern->AsShadingPattern()) {
550 bitmap_render.DrawShadingPattern(pShadingPattern, m_pImageObject, 551 bitmap_render.DrawShadingPattern(pShadingPattern, m_pImageObject,
551 &patternDevice, FALSE); 552 &patternDevice, FALSE);
552 } 553 }
553 } 554 }
554 { 555 {
555 CFX_FxgeDevice bitmap_device2; 556 CFX_FxgeDevice bitmap_device2;
556 if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb, 557 if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb,
557 nullptr)) { 558 nullptr)) {
558 return TRUE; 559 return TRUE;
559 } 560 }
560 bitmap_device2.GetBitmap()->Clear(0); 561 bitmap_device2.GetBitmap()->Clear(0);
561 CPDF_RenderStatus bitmap_render; 562 CPDF_RenderStatus bitmap_render;
562 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, NULL, 563 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2,
563 NULL, NULL, NULL, NULL, 0, 564 nullptr, nullptr, nullptr, nullptr, nullptr, 0,
564 m_pRenderStatus->m_bDropObjects, NULL, TRUE); 565 m_pRenderStatus->m_bDropObjects, nullptr, TRUE);
565 CPDF_ImageRenderer image_render; 566 CPDF_ImageRenderer image_render;
566 if (image_render.Start(&bitmap_render, m_pDIBSource, 0xffffffff, 255, 567 if (image_render.Start(&bitmap_render, m_pDIBSource, 0xffffffff, 255,
567 &new_matrix, m_Flags, TRUE)) { 568 &new_matrix, m_Flags, TRUE)) {
568 image_render.Continue(NULL); 569 image_render.Continue(nullptr);
569 } 570 }
570 if (m_Loader.m_MatteColor != 0xffffffff) { 571 if (m_Loader.m_MatteColor != 0xffffffff) {
571 int matte_r = FXARGB_R(m_Loader.m_MatteColor); 572 int matte_r = FXARGB_R(m_Loader.m_MatteColor);
572 int matte_g = FXARGB_G(m_Loader.m_MatteColor); 573 int matte_g = FXARGB_G(m_Loader.m_MatteColor);
573 int matte_b = FXARGB_B(m_Loader.m_MatteColor); 574 int matte_b = FXARGB_B(m_Loader.m_MatteColor);
574 for (int row = 0; row < height; row++) { 575 for (int row = 0; row < height; row++) {
575 uint8_t* dest_scan = 576 uint8_t* dest_scan =
576 (uint8_t*)bitmap_device1.GetBitmap()->GetScanline(row); 577 (uint8_t*)bitmap_device1.GetBitmap()->GetScanline(row);
577 const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanline(row); 578 const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanline(row);
578 for (int col = 0; col < width; col++) { 579 for (int col = 0; col < width; col++) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 new_matrix.TranslateI(-rect.left, -rect.top); 630 new_matrix.TranslateI(-rect.left, -rect.top);
630 int width = rect.Width(); 631 int width = rect.Width();
631 int height = rect.Height(); 632 int height = rect.Height();
632 CFX_FxgeDevice bitmap_device1; 633 CFX_FxgeDevice bitmap_device1;
633 if (!bitmap_device1.Create(width, height, FXDIB_Rgb32, nullptr)) 634 if (!bitmap_device1.Create(width, height, FXDIB_Rgb32, nullptr))
634 return TRUE; 635 return TRUE;
635 636
636 bitmap_device1.GetBitmap()->Clear(0xffffff); 637 bitmap_device1.GetBitmap()->Clear(0xffffff);
637 { 638 {
638 CPDF_RenderStatus bitmap_render; 639 CPDF_RenderStatus bitmap_render;
639 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, NULL, 640 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1,
640 NULL, NULL, NULL, NULL, 0, 641 nullptr, nullptr, nullptr, nullptr, nullptr, 0,
641 m_pRenderStatus->m_bDropObjects, NULL, TRUE); 642 m_pRenderStatus->m_bDropObjects, nullptr, TRUE);
642 CPDF_ImageRenderer image_render; 643 CPDF_ImageRenderer image_render;
643 if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix, 644 if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix,
644 m_Flags, TRUE)) { 645 m_Flags, TRUE)) {
645 image_render.Continue(NULL); 646 image_render.Continue(nullptr);
646 } 647 }
647 } 648 }
648 { 649 {
649 CFX_FxgeDevice bitmap_device2; 650 CFX_FxgeDevice bitmap_device2;
650 if (!bitmap_device2.Create(width, height, FXDIB_8bppRgb, nullptr)) 651 if (!bitmap_device2.Create(width, height, FXDIB_8bppRgb, nullptr))
651 return TRUE; 652 return TRUE;
652 653
653 bitmap_device2.GetBitmap()->Clear(0); 654 bitmap_device2.GetBitmap()->Clear(0);
654 CPDF_RenderStatus bitmap_render; 655 CPDF_RenderStatus bitmap_render;
655 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, NULL, 656 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2,
656 NULL, NULL, NULL, NULL, 0, 657 nullptr, nullptr, nullptr, nullptr, nullptr, 0,
657 m_pRenderStatus->m_bDropObjects, NULL, TRUE); 658 m_pRenderStatus->m_bDropObjects, nullptr, TRUE);
658 CPDF_ImageRenderer image_render; 659 CPDF_ImageRenderer image_render;
659 if (image_render.Start(&bitmap_render, m_Loader.m_pMask, 0xffffffff, 255, 660 if (image_render.Start(&bitmap_render, m_Loader.m_pMask, 0xffffffff, 255,
660 &new_matrix, m_Flags, TRUE)) { 661 &new_matrix, m_Flags, TRUE)) {
661 image_render.Continue(NULL); 662 image_render.Continue(nullptr);
662 } 663 }
663 if (m_Loader.m_MatteColor != 0xffffffff) { 664 if (m_Loader.m_MatteColor != 0xffffffff) {
664 int matte_r = FXARGB_R(m_Loader.m_MatteColor); 665 int matte_r = FXARGB_R(m_Loader.m_MatteColor);
665 int matte_g = FXARGB_G(m_Loader.m_MatteColor); 666 int matte_g = FXARGB_G(m_Loader.m_MatteColor);
666 int matte_b = FXARGB_B(m_Loader.m_MatteColor); 667 int matte_b = FXARGB_B(m_Loader.m_MatteColor);
667 for (int row = 0; row < height; row++) { 668 for (int row = 0; row < height; row++) {
668 uint8_t* dest_scan = 669 uint8_t* dest_scan =
669 (uint8_t*)bitmap_device1.GetBitmap()->GetScanline(row); 670 (uint8_t*)bitmap_device1.GetBitmap()->GetScanline(row);
670 const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanline(row); 671 const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanline(row);
671 for (int col = 0; col < width; col++) { 672 for (int col = 0; col < width; col++) {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 return FALSE; 797 return FALSE;
797 } 798 }
798 799
799 FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha() { 800 FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha() {
800 if (m_pDIBSource->IsOpaqueImage()) { 801 if (m_pDIBSource->IsOpaqueImage()) {
801 CFX_PathData path; 802 CFX_PathData path;
802 path.AppendRect(0, 0, 1, 1); 803 path.AppendRect(0, 0, 1, 1);
803 path.Transform(&m_ImageMatrix); 804 path.Transform(&m_ImageMatrix);
804 uint32_t fill_color = 805 uint32_t fill_color =
805 ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha); 806 ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha);
806 m_pRenderStatus->m_pDevice->DrawPath(&path, NULL, NULL, fill_color, 0, 807 m_pRenderStatus->m_pDevice->DrawPath(&path, nullptr, nullptr, fill_color, 0,
807 FXFILL_WINDING); 808 FXFILL_WINDING);
808 } else { 809 } else {
809 const CFX_DIBSource* pAlphaMask = m_pDIBSource->IsAlphaMask() 810 const CFX_DIBSource* pAlphaMask = m_pDIBSource->IsAlphaMask()
810 ? m_pDIBSource 811 ? m_pDIBSource
811 : m_pDIBSource->GetAlphaMask(); 812 : m_pDIBSource->GetAlphaMask();
812 if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || 813 if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f ||
813 FXSYS_fabs(m_ImageMatrix.c) >= 0.5f) { 814 FXSYS_fabs(m_ImageMatrix.c) >= 0.5f) {
814 int left, top; 815 int left, top;
815 std::unique_ptr<CFX_DIBitmap> pTransformed( 816 std::unique_ptr<CFX_DIBitmap> pTransformed(
816 pAlphaMask->TransformTo(&m_ImageMatrix, left, top)); 817 pAlphaMask->TransformTo(&m_ImageMatrix, left, top));
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 FXDIB_Format format; 916 FXDIB_Format format;
916 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 917 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
917 format = bLuminosity ? FXDIB_Rgb32 : FXDIB_8bppMask; 918 format = bLuminosity ? FXDIB_Rgb32 : FXDIB_8bppMask;
918 #else 919 #else
919 format = bLuminosity ? FXDIB_Rgb : FXDIB_8bppMask; 920 format = bLuminosity ? FXDIB_Rgb : FXDIB_8bppMask;
920 #endif 921 #endif
921 if (!bitmap_device.Create(width, height, format, nullptr)) 922 if (!bitmap_device.Create(width, height, format, nullptr))
922 return nullptr; 923 return nullptr;
923 924
924 CFX_DIBitmap& bitmap = *bitmap_device.GetBitmap(); 925 CFX_DIBitmap& bitmap = *bitmap_device.GetBitmap();
925 CPDF_Object* pCSObj = NULL; 926 CPDF_Object* pCSObj = nullptr;
926 CPDF_ColorSpace* pCS = NULL; 927 CPDF_ColorSpace* pCS = nullptr;
927 if (bLuminosity) { 928 if (bLuminosity) {
928 CPDF_Array* pBC = pSMaskDict->GetArrayBy("BC"); 929 CPDF_Array* pBC = pSMaskDict->GetArrayBy("BC");
929 FX_ARGB back_color = 0xff000000; 930 FX_ARGB back_color = 0xff000000;
930 if (pBC) { 931 if (pBC) {
931 CPDF_Dictionary* pDict = pGroup->GetDict(); 932 CPDF_Dictionary* pDict = pGroup->GetDict();
932 if (pDict && pDict->GetDictBy("Group")) 933 if (pDict && pDict->GetDictBy("Group"))
933 pCSObj = pDict->GetDictBy("Group")->GetDirectObjectBy("CS"); 934 pCSObj = pDict->GetDictBy("Group")->GetDirectObjectBy("CS");
934 else 935 else
935 pCSObj = NULL; 936 pCSObj = nullptr;
936 pCS = m_pContext->GetDocument()->LoadColorSpace(pCSObj); 937 pCS = m_pContext->GetDocument()->LoadColorSpace(pCSObj);
937 if (pCS) { 938 if (pCS) {
938 FX_FLOAT R, G, B; 939 FX_FLOAT R, G, B;
939 uint32_t comps = 8; 940 uint32_t comps = 8;
940 if (pCS->CountComponents() > comps) { 941 if (pCS->CountComponents() > comps) {
941 comps = pCS->CountComponents(); 942 comps = pCS->CountComponents();
942 } 943 }
943 CFX_FixedBufGrow<FX_FLOAT, 8> float_array(comps); 944 CFX_FixedBufGrow<FX_FLOAT, 8> float_array(comps);
944 FX_FLOAT* pFloats = float_array; 945 FX_FLOAT* pFloats = float_array;
945 FX_SAFE_UINT32 num_floats = comps; 946 FX_SAFE_UINT32 num_floats = comps;
946 num_floats *= sizeof(FX_FLOAT); 947 num_floats *= sizeof(FX_FLOAT);
947 if (!num_floats.IsValid()) { 948 if (!num_floats.IsValid()) {
948 return NULL; 949 return nullptr;
949 } 950 }
950 FXSYS_memset(pFloats, 0, num_floats.ValueOrDie()); 951 FXSYS_memset(pFloats, 0, num_floats.ValueOrDie());
951 size_t count = pBC->GetCount() > 8 ? 8 : pBC->GetCount(); 952 size_t count = pBC->GetCount() > 8 ? 8 : pBC->GetCount();
952 for (size_t i = 0; i < count; i++) { 953 for (size_t i = 0; i < count; i++) {
953 pFloats[i] = pBC->GetNumberAt(i); 954 pFloats[i] = pBC->GetNumberAt(i);
954 } 955 }
955 pCS->GetRGB(pFloats, R, G, B); 956 pCS->GetRGB(pFloats, R, G, B);
956 back_color = 0xff000000 | ((int32_t)(R * 255) << 16) | 957 back_color = 0xff000000 | ((int32_t)(R * 255) << 16) |
957 ((int32_t)(G * 255) << 8) | (int32_t)(B * 255); 958 ((int32_t)(G * 255) << 8) | (int32_t)(B * 255);
958 m_pContext->GetDocument()->GetPageData()->ReleaseColorSpace(pCSObj); 959 m_pContext->GetDocument()->GetPageData()->ReleaseColorSpace(pCSObj);
959 } 960 }
960 } 961 }
961 bitmap.Clear(back_color); 962 bitmap.Clear(back_color);
962 } else { 963 } else {
963 bitmap.Clear(0); 964 bitmap.Clear(0);
964 } 965 }
965 CPDF_Dictionary* pFormResource = NULL; 966 CPDF_Dictionary* pFormResource = nullptr;
966 if (form.m_pFormDict) { 967 if (form.m_pFormDict) {
967 pFormResource = form.m_pFormDict->GetDictBy("Resources"); 968 pFormResource = form.m_pFormDict->GetDictBy("Resources");
968 } 969 }
969 CPDF_RenderOptions options; 970 CPDF_RenderOptions options;
970 options.m_ColorMode = bLuminosity ? RENDER_COLOR_NORMAL : RENDER_COLOR_ALPHA; 971 options.m_ColorMode = bLuminosity ? RENDER_COLOR_NORMAL : RENDER_COLOR_ALPHA;
971 CPDF_RenderStatus status; 972 CPDF_RenderStatus status;
972 status.Initialize(m_pContext, &bitmap_device, NULL, NULL, NULL, NULL, 973 status.Initialize(m_pContext, &bitmap_device, nullptr, nullptr, nullptr,
973 &options, 0, m_bDropObjects, pFormResource, TRUE, NULL, 0, 974 nullptr, &options, 0, m_bDropObjects, pFormResource, TRUE,
974 pCS ? pCS->GetFamily() : 0, bLuminosity); 975 nullptr, 0, pCS ? pCS->GetFamily() : 0, bLuminosity);
975 status.RenderObjectList(&form, &matrix); 976 status.RenderObjectList(&form, &matrix);
976 std::unique_ptr<CFX_DIBitmap> pMask(new CFX_DIBitmap); 977 std::unique_ptr<CFX_DIBitmap> pMask(new CFX_DIBitmap);
977 if (!pMask->Create(width, height, FXDIB_8bppMask)) 978 if (!pMask->Create(width, height, FXDIB_8bppMask))
978 return nullptr; 979 return nullptr;
979 980
980 uint8_t* dest_buf = pMask->GetBuffer(); 981 uint8_t* dest_buf = pMask->GetBuffer();
981 int dest_pitch = pMask->GetPitch(); 982 int dest_pitch = pMask->GetPitch();
982 uint8_t* src_buf = bitmap.GetBuffer(); 983 uint8_t* src_buf = bitmap.GetBuffer();
983 int src_pitch = bitmap.GetPitch(); 984 int src_pitch = bitmap.GetPitch();
984 std::vector<uint8_t> transfers(256); 985 std::vector<uint8_t> transfers(256);
(...skipping 23 matching lines...) Expand all
1008 } else if (pFunc) { 1009 } else if (pFunc) {
1009 int size = dest_pitch * height; 1010 int size = dest_pitch * height;
1010 for (int i = 0; i < size; i++) { 1011 for (int i = 0; i < size; i++) {
1011 dest_buf[i] = transfers[src_buf[i]]; 1012 dest_buf[i] = transfers[src_buf[i]];
1012 } 1013 }
1013 } else { 1014 } else {
1014 FXSYS_memcpy(dest_buf, src_buf, dest_pitch * height); 1015 FXSYS_memcpy(dest_buf, src_buf, dest_pitch * height);
1015 } 1016 }
1016 return pMask.release(); 1017 return pMask.release();
1017 } 1018 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_render/fpdf_render_cache.cpp ('k') | core/fpdfapi/fpdf_render/fpdf_render_pattern.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698