diff --git a/core/fpdfapi/render/cpdf_devicebuffer.cpp b/core/fpdfapi/render/cpdf_devicebuffer.cpp
index 5bd4691..627f1ce 100644
--- a/core/fpdfapi/render/cpdf_devicebuffer.cpp
+++ b/core/fpdfapi/render/cpdf_devicebuffer.cpp
@@ -89,7 +89,7 @@
                                          m_pBitmap->GetHeight())) {
     return;
   }
-  m_pContext->GetBackground(pBuffer, m_pObject, nullptr, m_Matrix);
+  m_pContext->GetBackgroundToBitmap(pBuffer, m_pObject, m_Matrix);
   pBuffer->CompositeBitmap(0, 0, pBuffer->GetWidth(), pBuffer->GetHeight(),
                            m_pBitmap, 0, 0, BlendMode::kNormal, nullptr, false);
   m_pDevice->StretchDIBits(pBuffer, m_Rect.left, m_Rect.top, m_Rect.Width(),
diff --git a/core/fpdfapi/render/cpdf_rendercontext.cpp b/core/fpdfapi/render/cpdf_rendercontext.cpp
index 4116840..7036ad9 100644
--- a/core/fpdfapi/render/cpdf_rendercontext.cpp
+++ b/core/fpdfapi/render/cpdf_rendercontext.cpp
@@ -21,6 +21,7 @@
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
 #include "core/fxge/dib/fx_dib.h"
+#include "third_party/base/check.h"
 
 CPDF_RenderContext::CPDF_RenderContext(
     CPDF_Document* pDoc,
@@ -32,15 +33,22 @@
 
 CPDF_RenderContext::~CPDF_RenderContext() = default;
 
-void CPDF_RenderContext::GetBackground(RetainPtr<CFX_DIBitmap> pBuffer,
-                                       const CPDF_PageObject* pObj,
-                                       const CPDF_RenderOptions* pOptions,
-                                       const CFX_Matrix& mtFinal) {
+void CPDF_RenderContext::GetBackgroundToDevice(
+    CFX_RenderDevice* device,
+    const CPDF_PageObject* object,
+    const CPDF_RenderOptions* options,
+    const CFX_Matrix& matrix) {
+  device->FillRect(FX_RECT(0, 0, device->GetWidth(), device->GetHeight()),
+                   0xffffffff);
+  Render(device, object, options, &matrix);
+}
+
+void CPDF_RenderContext::GetBackgroundToBitmap(RetainPtr<CFX_DIBitmap> bitmap,
+                                               const CPDF_PageObject* object,
+                                               const CFX_Matrix& matrix) {
   CFX_DefaultRenderDevice device;
-  device.Attach(std::move(pBuffer));
-  device.FillRect(FX_RECT(0, 0, device.GetWidth(), device.GetHeight()),
-                  0xffffffff);
-  Render(&device, pObj, pOptions, &mtFinal);
+  device.Attach(std::move(bitmap));
+  GetBackgroundToDevice(&device, object, /*options=*/nullptr, matrix);
 }
 
 void CPDF_RenderContext::AppendLayer(CPDF_PageObjectHolder* pObjectHolder,
diff --git a/core/fpdfapi/render/cpdf_rendercontext.h b/core/fpdfapi/render/cpdf_rendercontext.h
index 383e798..f26fe76 100644
--- a/core/fpdfapi/render/cpdf_rendercontext.h
+++ b/core/fpdfapi/render/cpdf_rendercontext.h
@@ -52,10 +52,13 @@
               const CPDF_RenderOptions* pOptions,
               const CFX_Matrix* pLastMatrix);
 
-  void GetBackground(RetainPtr<CFX_DIBitmap> pBuffer,
-                     const CPDF_PageObject* pObj,
-                     const CPDF_RenderOptions* pOptions,
-                     const CFX_Matrix& mtFinal);
+  void GetBackgroundToDevice(CFX_RenderDevice* device,
+                             const CPDF_PageObject* object,
+                             const CPDF_RenderOptions* options,
+                             const CFX_Matrix& matrix);
+  void GetBackgroundToBitmap(RetainPtr<CFX_DIBitmap> bitmap,
+                             const CPDF_PageObject* object,
+                             const CFX_Matrix& matrix);
 
   size_t CountLayers() const { return m_Layers.size(); }
   Layer* GetLayer(uint32_t index) { return &m_Layers[index]; }
diff --git a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
index 187797c..534511a 100644
--- a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
+++ b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp
@@ -57,8 +57,8 @@
     }
     m_Matrix.Scale(0.5f, 0.5f);
   }
-  pContext->GetBackground(m_pBitmapDevice->GetBitmap(), pObj, pOptions,
-                          m_Matrix);
+  pContext->GetBackgroundToDevice(m_pBitmapDevice.get(), pObj, pOptions,
+                                  m_Matrix);
   return true;
 }
 
