diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index d2e7cfb..ee09437 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -335,8 +335,8 @@
     return;
 
   int res = (pObj->IsImage() && IsPrint()) ? 0 : 300;
-  CPDF_ScaledRenderBuffer buffer;
-  if (!buffer.Initialize(m_pContext, m_pDevice, rect, pObj, &m_Options, res)) {
+  CPDF_ScaledRenderBuffer buffer(m_pDevice, rect);
+  if (!buffer.Initialize(m_pContext, pObj, m_Options, res)) {
     return;
   }
   RetainPtr<const CPDF_Dictionary> pFormResource;
diff --git a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
index 5582163..b8c10fb 100644
--- a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
+++ b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
@@ -18,23 +18,21 @@
 
 }  // namespace
 
-CPDF_ScaledRenderBuffer::CPDF_ScaledRenderBuffer() = default;
+CPDF_ScaledRenderBuffer::CPDF_ScaledRenderBuffer(CFX_RenderDevice* device,
+                                                 const FX_RECT& rect)
+    : device_(device), rect_(rect) {}
 
 CPDF_ScaledRenderBuffer::~CPDF_ScaledRenderBuffer() = default;
 
 bool CPDF_ScaledRenderBuffer::Initialize(CPDF_RenderContext* pContext,
-                                         CFX_RenderDevice* pDevice,
-                                         const FX_RECT& rect,
                                          const CPDF_PageObject* pObj,
-                                         const CPDF_RenderOptions* pOptions,
+                                         const CPDF_RenderOptions& options,
                                          int max_dpi) {
-  device_ = pDevice;
   if (device_->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_GET_BITS) {
     return true;
   }
 
-  rect_ = rect;
-  matrix_ = CPDF_DeviceBuffer::CalculateMatrix(pDevice, rect, max_dpi,
+  matrix_ = CPDF_DeviceBuffer::CalculateMatrix(device_, rect_, max_dpi,
                                                /*scale=*/true);
   bitmap_device_ = std::make_unique<CFX_DefaultRenderDevice>();
   bool bIsAlpha =
@@ -42,7 +40,7 @@
   FXDIB_Format dibFormat = bIsAlpha ? FXDIB_Format::kArgb : FXDIB_Format::kRgb;
   while (true) {
     FX_RECT bitmap_rect =
-        matrix_.TransformRect(CFX_FloatRect(rect)).GetOuterRect();
+        matrix_.TransformRect(CFX_FloatRect(rect_)).GetOuterRect();
     int32_t width = bitmap_rect.Width();
     int32_t height = bitmap_rect.Height();
     // Set to 0 to make CalculatePitchAndSize() calculate it.
@@ -58,7 +56,7 @@
     }
     matrix_.Scale(0.5f, 0.5f);
   }
-  pContext->GetBackgroundToDevice(bitmap_device_.get(), pObj, pOptions,
+  pContext->GetBackgroundToDevice(bitmap_device_.get(), pObj, &options,
                                   matrix_);
   return true;
 }
diff --git a/core/fpdfapi/render/cpdf_scaledrenderbuffer.h b/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
index 0188343..16eb4f4 100644
--- a/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
+++ b/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
@@ -20,14 +20,12 @@
 
 class CPDF_ScaledRenderBuffer {
  public:
-  CPDF_ScaledRenderBuffer();
+  CPDF_ScaledRenderBuffer(CFX_RenderDevice* device, const FX_RECT& rect);
   ~CPDF_ScaledRenderBuffer();
 
   bool Initialize(CPDF_RenderContext* pContext,
-                  CFX_RenderDevice* pDevice,
-                  const FX_RECT& rect,
                   const CPDF_PageObject* pObj,
-                  const CPDF_RenderOptions* pOptions,
+                  const CPDF_RenderOptions& options,
                   int max_dpi);
 
   CFX_RenderDevice* GetDevice() const;
@@ -35,9 +33,9 @@
   void OutputToDevice();
 
  private:
-  UnownedPtr<CFX_RenderDevice> device_;
+  UnownedPtr<CFX_RenderDevice> const device_;
   std::unique_ptr<CFX_DefaultRenderDevice> bitmap_device_;
-  FX_RECT rect_;
+  const FX_RECT rect_;
   CFX_Matrix matrix_;
 };
 
