Index: core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
diff --git a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
index 10fd5f3f1550f739ed6a24a60b13f84e5fbb5087..b9826a9338f249bd7f4d56780af754212d52cf90 100644 |
--- a/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
+++ b/core/fpdfapi/fpdf_render/fpdf_render_image.cpp |
@@ -63,8 +63,7 @@ void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, |
#endif |
} |
#ifdef _SKIA_SUPPORT_ |
- static_cast<CFX_SkiaDeviceDriver*>(m_pDevice->GetDeviceDriver()) |
- ->PreMultiply(pDIBitmap); |
+ CFX_SkiaDeviceDriver::PreMultiply(pDIBitmap); |
#endif |
if (m_pDevice->SetDIBits(pDIBitmap, left, top)) { |
return; |
@@ -717,7 +716,7 @@ FX_BOOL CPDF_ImageRenderer::DrawMaskedImage() { |
bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask); |
bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap()); |
#ifdef _SKIA_SUPPORT_ |
- bitmap_device1.PreMultiply(); // convert unpremultiplied to premultiplied |
+ CFX_SkiaDeviceDriver::PreMultiply(bitmap_device1.GetBitmap()); |
#endif |
if (m_BitmapAlpha < 255) { |
bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha); |
@@ -737,6 +736,19 @@ FX_BOOL CPDF_ImageRenderer::StartDIBSource() { |
m_Flags |= RENDER_FORCE_DOWNSAMPLE; |
} |
} |
+#ifdef _SKIA_SUPPORT_ |
+ CFX_DIBitmap* premultiplied = m_pDIBSource->Clone(); |
+ CFX_SkiaDeviceDriver::PreMultiply(premultiplied); |
+ if (m_pRenderStatus->m_pDevice->StartDIBitsWithBlend( |
+ premultiplied, m_BitmapAlpha, m_FillArgb, &m_ImageMatrix, m_Flags, |
+ m_DeviceHandle, m_BlendType)) { |
+ if (m_DeviceHandle) { |
+ m_Status = 3; |
+ return TRUE; |
+ } |
+ return FALSE; |
+ } |
+#else |
if (m_pRenderStatus->m_pDevice->StartDIBitsWithBlend( |
m_pDIBSource, m_BitmapAlpha, m_FillArgb, &m_ImageMatrix, m_Flags, |
m_DeviceHandle, m_BlendType)) { |
@@ -746,6 +758,7 @@ FX_BOOL CPDF_ImageRenderer::StartDIBSource() { |
} |
return FALSE; |
} |
+#endif |
CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect(); |
FX_RECT image_rect = image_rect_f.GetOutterRect(); |
int dest_width = image_rect.Width(); |