| Index: core/fpdfapi/render/cpdf_imagerenderer.cpp
|
| diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
|
| index 5ca7ea842f0d86440ca3d14b50092f9add9f3cb9..a5b1238eafd1aee10d9d2fc1c6ce9662aab81548 100644
|
| --- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
|
| +++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
|
| @@ -25,6 +25,7 @@
|
| #include "core/fpdfapi/render/cpdf_transferfunc.h"
|
| #include "core/fpdfapi/render/render_int.h"
|
| #include "core/fpdfdoc/cpdf_occontext.h"
|
| +#include "core/fxcrt/cfx_maybe_owned.h"
|
| #include "core/fxcrt/fx_safe_types.h"
|
| #include "core/fxge/cfx_fxgedevice.h"
|
| #include "core/fxge/cfx_pathdata.h"
|
| @@ -499,34 +500,37 @@ bool CPDF_ImageRenderer::StartBitmapAlpha() {
|
| FXFILL_WINDING);
|
| return false;
|
| }
|
| - const CFX_DIBSource* pAlphaMask =
|
| - m_pDIBSource->IsAlphaMask() ? m_pDIBSource : m_pDIBSource->GetAlphaMask();
|
| + CFX_MaybeOwned<CFX_DIBSource> pAlphaMask;
|
| + if (m_pDIBSource->IsAlphaMask())
|
| + pAlphaMask = const_cast<CFX_DIBSource*>(m_pDIBSource);
|
| + else
|
| + pAlphaMask = m_pDIBSource->CloneAlphaMask();
|
| +
|
| if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f ||
|
| FXSYS_fabs(m_ImageMatrix.c) >= 0.5f) {
|
| - int left, top;
|
| - std::unique_ptr<CFX_DIBitmap> pTransformed(
|
| - pAlphaMask->TransformTo(&m_ImageMatrix, left, top));
|
| + int left;
|
| + int top;
|
| + std::unique_ptr<CFX_DIBitmap> pTransformed =
|
| + pAlphaMask->TransformTo(&m_ImageMatrix, left, top);
|
| if (!pTransformed)
|
| return true;
|
|
|
| m_pRenderStatus->m_pDevice->SetBitMask(
|
| pTransformed.get(), left, top,
|
| ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
|
| - } else {
|
| - CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
|
| - FX_RECT image_rect = image_rect_f.GetOuterRect();
|
| - int dest_width =
|
| - m_ImageMatrix.a > 0 ? image_rect.Width() : -image_rect.Width();
|
| - int dest_height =
|
| - m_ImageMatrix.d > 0 ? -image_rect.Height() : image_rect.Height();
|
| - int left = dest_width > 0 ? image_rect.left : image_rect.right;
|
| - int top = dest_height > 0 ? image_rect.top : image_rect.bottom;
|
| - m_pRenderStatus->m_pDevice->StretchBitMask(
|
| - pAlphaMask, left, top, dest_width, dest_height,
|
| - ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
|
| + return false;
|
| }
|
| - if (m_pDIBSource != pAlphaMask)
|
| - delete pAlphaMask;
|
| + CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
|
| + FX_RECT image_rect = image_rect_f.GetOuterRect();
|
| + int dest_width =
|
| + m_ImageMatrix.a > 0 ? image_rect.Width() : -image_rect.Width();
|
| + int dest_height =
|
| + m_ImageMatrix.d > 0 ? -image_rect.Height() : image_rect.Height();
|
| + int left = dest_width > 0 ? image_rect.left : image_rect.right;
|
| + int top = dest_height > 0 ? image_rect.top : image_rect.bottom;
|
| + m_pRenderStatus->m_pDevice->StretchBitMask(
|
| + pAlphaMask.Get(), left, top, dest_width, dest_height,
|
| + ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
|
| return false;
|
| }
|
|
|
|
|