diff --git a/core/fxcodec/progressive_decoder.cpp b/core/fxcodec/progressive_decoder.cpp
index e243f10..c0db252 100644
--- a/core/fxcodec/progressive_decoder.cpp
+++ b/core/fxcodec/progressive_decoder.cpp
@@ -1244,6 +1244,27 @@
   ResampleScanline(pDeviceBitmap, src_line, m_DecodeBuf, src_format);
 }
 
+FXDIB_Format ProgressiveDecoder::GetBitmapFormat() const {
+  switch (m_imageType) {
+    case FXCODEC_IMAGE_JPG:
+#ifdef PDF_ENABLE_XFA_BMP
+    case FXCODEC_IMAGE_BMP:
+#endif  // PDF_ENABLE_XFA_BMP
+#ifdef PDF_ENABLE_XFA_TIFF
+    case FXCODEC_IMAGE_TIFF:
+#endif  // PDF_ENABLE_XFA_TIFF
+      return GetBitsPerPixel() <= 24 ? FXDIB_Format::kRgb
+                                     : FXDIB_Format::kRgb32;
+#ifdef PDF_ENABLE_XFA_PNG
+    case FXCODEC_IMAGE_PNG:
+#endif  // PDF_ENABLE_XFA_PNG
+    default:
+      // TODO(crbug.com/355630556): Consider adding support for
+      // `FXDIB_Format::kArgbPremul`
+      return FXDIB_Format::kArgb;
+  }
+}
+
 std::pair<FXCODEC_STATUS, size_t> ProgressiveDecoder::GetFrames() {
   if (!(m_status == FXCODEC_STATUS::kFrameReady ||
         m_status == FXCODEC_STATUS::kFrameToBeContinued)) {
diff --git a/core/fxcodec/progressive_decoder.h b/core/fxcodec/progressive_decoder.h
index 367f4e8..2de8c96 100644
--- a/core/fxcodec/progressive_decoder.h
+++ b/core/fxcodec/progressive_decoder.h
@@ -74,10 +74,10 @@
                                CFX_DIBAttribute* pAttribute,
                                bool bSkipImageTypeCheck);
 
-  FXCODEC_IMAGE_TYPE GetType() const { return m_imageType; }
   int32_t GetWidth() const { return m_SrcWidth; }
   int32_t GetHeight() const { return m_SrcHeight; }
-  int32_t GetBitsPerPixel() const { return m_SrcComponents * m_SrcBPC; }
+
+  FXDIB_Format GetBitmapFormat() const;
 
   std::pair<FXCODEC_STATUS, size_t> GetFrames();
   FXCODEC_STATUS StartDecode(RetainPtr<CFX_DIBitmap> bitmap);
@@ -158,6 +158,8 @@
   FXCODEC_STATUS JpegStartDecode();
   FXCODEC_STATUS JpegContinueDecode();
 
+  int32_t GetBitsPerPixel() const { return m_SrcComponents * m_SrcBPC; }
+
   bool DetectImageType(FXCODEC_IMAGE_TYPE imageType,
                        CFX_DIBAttribute* pAttribute);
   bool ReadMoreData(ProgressiveDecoderIface* pModule,
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index ae5dd5c..73ebbe4 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -35,30 +35,6 @@
 #include "xfa/fxfa/parser/cxfa_margin.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 
-namespace {
-
-FXDIB_Format XFA_GetDIBFormat(FXCODEC_IMAGE_TYPE type, int32_t bpp) {
-  switch (type) {
-    case FXCODEC_IMAGE_JPG:
-#ifdef PDF_ENABLE_XFA_BMP
-    case FXCODEC_IMAGE_BMP:
-#endif  // PDF_ENABLE_XFA_BMP
-#ifdef PDF_ENABLE_XFA_TIFF
-    case FXCODEC_IMAGE_TIFF:
-#endif  // PDF_ENABLE_XFA_TIFF
-      return bpp <= 24 ? FXDIB_Format::kRgb : FXDIB_Format::kRgb32;
-#ifdef PDF_ENABLE_XFA_PNG
-    case FXCODEC_IMAGE_PNG:
-#endif  // PDF_ENABLE_XFA_PNG
-    default:
-      // TODO(crbug.com/355630556): Consider adding support for
-      // `FXDIB_Format::kArgbPremul`
-      return FXDIB_Format::kArgb;
-  }
-}
-
-}  // namespace
-
 void XFA_DrawImage(CFGAS_GEGraphics* pGS,
                    const CFX_RectF& rtImage,
                    const CFX_Matrix& matrix,
@@ -171,12 +147,10 @@
     return nullptr;
   }
 
-  type = pProgressiveDecoder->GetType();
-  FXDIB_Format format =
-      XFA_GetDIBFormat(type, pProgressiveDecoder->GetBitsPerPixel());
   RetainPtr<CFX_DIBitmap> pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
   if (!pBitmap->Create(pProgressiveDecoder->GetWidth(),
-                       pProgressiveDecoder->GetHeight(), format)) {
+                       pProgressiveDecoder->GetHeight(),
+                       pProgressiveDecoder->GetBitmapFormat())) {
     return nullptr;
   }
 
