summaryrefslogtreecommitdiff
path: root/core/fpdfapi
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi')
-rw-r--r--core/fpdfapi/render/cpdf_imagerenderer.cpp48
-rw-r--r--core/fpdfapi/render/cpdf_imagerenderer.h4
-rw-r--r--core/fpdfapi/render/cpdf_renderstatus.cpp9
-rw-r--r--core/fpdfapi/render/cpdf_type3cache.cpp3
4 files changed, 34 insertions, 30 deletions
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index c937ee68bb..4ab3e25a3e 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -97,19 +97,19 @@ bool CPDF_ImageRenderer::StartRenderDIBBase() {
pClone->ConvertColorScale(0xffffff, 0);
m_pDIBBase = pClone;
}
- m_Flags = 0;
+ m_ResampleOptions = FXDIB_ResampleOptions();
if (GetRenderOptions().HasFlag(RENDER_FORCE_DOWNSAMPLE))
- m_Flags |= RENDER_FORCE_DOWNSAMPLE;
+ m_ResampleOptions.bInterpolateDownsample = true;
else if (GetRenderOptions().HasFlag(RENDER_FORCE_HALFTONE))
- m_Flags |= RENDER_FORCE_HALFTONE;
+ m_ResampleOptions.bHalftone = true;
if (m_pRenderStatus->GetRenderDevice()->GetDeviceClass() != FXDC_DISPLAY)
HandleFilters();
if (GetRenderOptions().HasFlag(RENDER_NOIMAGESMOOTH))
- m_Flags |= FXDIB_NOSMOOTH;
+ m_ResampleOptions.bNoSmoothing = true;
else if (m_pImageObject->GetImage()->IsInterpol())
- m_Flags |= FXDIB_INTERPOL;
+ m_ResampleOptions.bInterpolateBilinear = true;
if (m_Loader.GetMask())
return DrawMaskedImage();
@@ -176,7 +176,7 @@ bool CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus,
FX_ARGB bitmap_argb,
int bitmap_alpha,
const CFX_Matrix* pImage2Device,
- uint32_t flags,
+ const FXDIB_ResampleOptions& options,
bool bStdCS,
BlendMode blendType) {
m_pRenderStatus = pStatus;
@@ -184,7 +184,7 @@ bool CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus,
m_FillArgb = bitmap_argb;
m_BitmapAlpha = bitmap_alpha;
m_ImageMatrix = *pImage2Device;
- m_Flags = flags;
+ m_ResampleOptions = options;
m_bStdCS = bStdCS;
m_BlendType = blendType;
return StartDIBBase();
@@ -222,7 +222,7 @@ void CPDF_ImageRenderer::CalculateDrawImage(
CPDF_ImageRenderer image_render;
if (image_render.Start(&bitmap_render, pDIBBase, 0xffffffff, 255, pNewMatrix,
- m_Flags, true, BlendMode::kNormal)) {
+ m_ResampleOptions, true, BlendMode::kNormal)) {
image_render.Continue(nullptr);
}
if (m_Loader.MatteColor() == 0xffffffff)
@@ -333,7 +333,7 @@ bool CPDF_ImageRenderer::DrawMaskedImage() {
bitmap_render.Initialize(nullptr, nullptr);
CPDF_ImageRenderer image_render;
if (image_render.Start(&bitmap_render, m_pDIBBase, 0, 255, &new_matrix,
- m_Flags, true, BlendMode::kNormal)) {
+ m_ResampleOptions, true, BlendMode::kNormal)) {
image_render.Continue(nullptr);
}
CFX_DefaultRenderDevice bitmap_device2;
@@ -364,7 +364,7 @@ bool CPDF_ImageRenderer::DrawMaskedImage() {
}
bool CPDF_ImageRenderer::StartDIBBase() {
- if (!(m_Flags & RENDER_FORCE_DOWNSAMPLE) && m_pDIBBase->GetBPP() > 1) {
+ if (!m_ResampleOptions.bInterpolateDownsample && m_pDIBBase->GetBPP() > 1) {
FX_SAFE_SIZE_T image_size = m_pDIBBase->GetBPP();
image_size /= 8;
image_size *= m_pDIBBase->GetWidth();
@@ -373,8 +373,8 @@ bool CPDF_ImageRenderer::StartDIBBase() {
return false;
if (image_size.ValueOrDie() > FPDF_HUGE_IMAGE_SIZE &&
- !(m_Flags & RENDER_FORCE_HALFTONE)) {
- m_Flags |= RENDER_FORCE_DOWNSAMPLE;
+ !m_ResampleOptions.bHalftone) {
+ m_ResampleOptions.bInterpolateDownsample = true;
}
}
#ifdef _SKIA_SUPPORT_
@@ -382,8 +382,8 @@ bool CPDF_ImageRenderer::StartDIBBase() {
if (m_pDIBBase->HasAlpha())
CFX_SkiaDeviceDriver::PreMultiply(premultiplied);
if (m_pRenderStatus->GetRenderDevice()->StartDIBitsWithBlend(
- premultiplied, m_BitmapAlpha, m_FillArgb, m_ImageMatrix, m_Flags,
- &m_DeviceHandle, m_BlendType)) {
+ premultiplied, m_BitmapAlpha, m_FillArgb, m_ImageMatrix,
+ m_ResampleOptions, &m_DeviceHandle, m_BlendType)) {
if (m_DeviceHandle) {
m_Status = 3;
return true;
@@ -392,8 +392,8 @@ bool CPDF_ImageRenderer::StartDIBBase() {
}
#else
if (m_pRenderStatus->GetRenderDevice()->StartDIBitsWithBlend(
- m_pDIBBase, m_BitmapAlpha, m_FillArgb, m_ImageMatrix, m_Flags,
- &m_DeviceHandle, m_BlendType)) {
+ m_pDIBBase, m_BitmapAlpha, m_FillArgb, m_ImageMatrix,
+ m_ResampleOptions, &m_DeviceHandle, m_BlendType)) {
if (m_DeviceHandle) {
m_Status = 3;
return true;
@@ -416,7 +416,7 @@ bool CPDF_ImageRenderer::StartDIBBase() {
clip_box.Intersect(image_rect);
m_Status = 2;
m_pTransformer = pdfium::MakeUnique<CFX_ImageTransformer>(
- m_pDIBBase, m_ImageMatrix, m_Flags, &clip_box);
+ m_pDIBBase, m_ImageMatrix, m_ResampleOptions, &clip_box);
return true;
}
if (m_ImageMatrix.a < 0)
@@ -429,8 +429,8 @@ bool CPDF_ImageRenderer::StartDIBBase() {
int dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom;
if (m_pDIBBase->IsOpaqueImage() && m_BitmapAlpha == 255) {
if (m_pRenderStatus->GetRenderDevice()->StretchDIBitsWithFlagsAndBlend(
- m_pDIBBase, dest_left, dest_top, dest_width, dest_height, m_Flags,
- m_BlendType)) {
+ m_pDIBBase, dest_left, dest_top, dest_width, dest_height,
+ m_ResampleOptions, m_BlendType)) {
return false;
}
}
@@ -439,7 +439,7 @@ bool CPDF_ImageRenderer::StartDIBBase() {
m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
if (m_pRenderStatus->GetRenderDevice()->StretchBitMaskWithFlags(
m_pDIBBase, dest_left, dest_top, dest_width, dest_height,
- m_FillArgb, m_Flags)) {
+ m_FillArgb, m_ResampleOptions)) {
return false;
}
}
@@ -454,8 +454,8 @@ bool CPDF_ImageRenderer::StartDIBBase() {
FX_RECT dest_clip(
dest_rect.left - image_rect.left, dest_rect.top - image_rect.top,
dest_rect.right - image_rect.left, dest_rect.bottom - image_rect.top);
- RetainPtr<CFX_DIBitmap> pStretched =
- m_pDIBBase->StretchTo(dest_width, dest_height, m_Flags, &dest_clip);
+ RetainPtr<CFX_DIBitmap> pStretched = m_pDIBBase->StretchTo(
+ dest_width, dest_height, m_ResampleOptions, &dest_clip);
if (pStretched) {
m_pRenderStatus->CompositeDIBitmap(pStretched, dest_rect.left,
dest_rect.top, m_FillArgb, m_BitmapAlpha,
@@ -557,7 +557,7 @@ void CPDF_ImageRenderer::HandleFilters() {
if (pFilters->IsName()) {
ByteString bsDecodeType = pFilters->GetString();
if (bsDecodeType == "DCTDecode" || bsDecodeType == "JPXDecode")
- m_Flags |= FXRENDER_IMAGE_LOSSY;
+ m_ResampleOptions.bLossy = true;
return;
}
@@ -568,7 +568,7 @@ void CPDF_ImageRenderer::HandleFilters() {
for (size_t i = 0; i < pArray->size(); i++) {
ByteString bsDecodeType = pArray->GetStringAt(i);
if (bsDecodeType == "DCTDecode" || bsDecodeType == "JPXDecode") {
- m_Flags |= FXRENDER_IMAGE_LOSSY;
+ m_ResampleOptions.bLossy = true;
break;
}
}
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.h b/core/fpdfapi/render/cpdf_imagerenderer.h
index 6df412f2c0..6befaf9b5f 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.h
+++ b/core/fpdfapi/render/cpdf_imagerenderer.h
@@ -41,7 +41,7 @@ class CPDF_ImageRenderer {
FX_ARGB bitmap_argb,
int bitmap_alpha,
const CFX_Matrix* pImage2Device,
- uint32_t flags,
+ const FXDIB_ResampleOptions& options,
bool bStdCS,
BlendMode blendType);
@@ -79,7 +79,7 @@ class CPDF_ImageRenderer {
int m_BitmapAlpha = 0;
BlendMode m_BlendType = BlendMode::kNormal;
FX_ARGB m_FillArgb = 0;
- uint32_t m_Flags = 0;
+ FXDIB_ResampleOptions m_ResampleOptions;
bool m_bPatternColor = false;
bool m_bStdCS = false;
bool m_Result = true;
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 3f7b4923dc..9bbd298f18 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1911,7 +1911,8 @@ bool CPDF_RenderStatus::ProcessType3Text(CPDF_TextObject* textobj,
image_matrix.Concat(matrix);
CPDF_ImageRenderer renderer;
if (renderer.Start(this, pType3Char->GetBitmap(), fill_argb, 255,
- &image_matrix, 0, false, BlendMode::kNormal)) {
+ &image_matrix, FXDIB_ResampleOptions(), false,
+ BlendMode::kNormal)) {
renderer.Continue(nullptr);
}
if (!renderer.GetResult())
@@ -2257,7 +2258,8 @@ void CPDF_RenderStatus::DrawTilingPattern(CPDF_TilingPattern* pPattern,
RetainPtr<CFX_DIBitmap> pEnlargedBitmap =
DrawPatternBitmap(m_pContext->GetDocument(), m_pContext->GetPageCache(),
pPattern, mtObj2Device, 8, 8, m_Options.GetFlags());
- pPatternBitmap = pEnlargedBitmap->StretchTo(width, height, 0, nullptr);
+ pPatternBitmap = pEnlargedBitmap->StretchTo(
+ width, height, FXDIB_ResampleOptions(), nullptr);
} else {
pPatternBitmap = DrawPatternBitmap(
m_pContext->GetDocument(), m_pContext->GetPageCache(), pPattern,
@@ -2393,7 +2395,8 @@ void CPDF_RenderStatus::CompositeDIBitmap(
std::unique_ptr<CFX_ImageRenderer> dummy;
CFX_Matrix m = CFX_RenderDevice::GetFlipMatrix(
pDIBitmap->GetWidth(), pDIBitmap->GetHeight(), left, top);
- m_pDevice->StartDIBits(pDIBitmap, bitmap_alpha, 0, m, 0, &dummy);
+ m_pDevice->StartDIBits(pDIBitmap, bitmap_alpha, 0, m,
+ FXDIB_ResampleOptions(), &dummy);
return;
#else
pDIBitmap->MultiplyAlpha(bitmap_alpha);
diff --git a/core/fpdfapi/render/cpdf_type3cache.cpp b/core/fpdfapi/render/cpdf_type3cache.cpp
index 11e5946e05..4638fccb92 100644
--- a/core/fpdfapi/render/cpdf_type3cache.cpp
+++ b/core/fpdfapi/render/cpdf_type3cache.cpp
@@ -146,7 +146,8 @@ std::unique_ptr<CFX_GlyphBitmap> CPDF_Type3Cache::RenderGlyph(
return nullptr;
pResBitmap = pBitmap->StretchTo(static_cast<int>(image_matrix.a),
- safe_height.ValueOrDie(), 0, nullptr);
+ safe_height.ValueOrDie(),
+ FXDIB_ResampleOptions(), nullptr);
top = top_line;
if (image_matrix.a < 0)
left = FXSYS_round(image_matrix.e + image_matrix.a);