diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn
index a3d2b0e..941ea4a 100644
--- a/core/fxge/BUILD.gn
+++ b/core/fxge/BUILD.gn
@@ -52,6 +52,8 @@
     "cfx_textrenderoptions.h",
     "cfx_unicodeencoding.cpp",
     "cfx_unicodeencoding.h",
+    "dib/blend.cpp",
+    "dib/blend.h",
     "dib/cfx_bitmapcomposer.cpp",
     "dib/cfx_bitmapcomposer.h",
     "dib/cfx_bitmapstorer.cpp",
diff --git a/core/fxge/dib/blend.cpp b/core/fxge/dib/blend.cpp
new file mode 100644
index 0000000..8384ee7
--- /dev/null
+++ b/core/fxge/dib/blend.cpp
@@ -0,0 +1,95 @@
+// Copyright 2023 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "core/fxge/dib/blend.h"
+
+#include <algorithm>
+
+#include "core/fxge/dib/fx_dib.h"
+
+namespace fxge {
+
+namespace {
+
+constexpr uint8_t kColorSqrt[256] = {
+    0x00, 0x03, 0x07, 0x0B, 0x0F, 0x12, 0x16, 0x19, 0x1D, 0x20, 0x23, 0x26,
+    0x29, 0x2C, 0x2F, 0x32, 0x35, 0x37, 0x3A, 0x3C, 0x3F, 0x41, 0x43, 0x46,
+    0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x57, 0x59, 0x5B, 0x5C,
+    0x5E, 0x60, 0x61, 0x63, 0x64, 0x65, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D,
+    0x6E, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
+    0x7B, 0x7C, 0x7D, 0x7E, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+    0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x91,
+    0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C,
+    0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA4, 0xA5,
+    0xA6, 0xA7, 0xA7, 0xA8, 0xA9, 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD, 0xAE,
+    0xAF, 0xB0, 0xB0, 0xB1, 0xB2, 0xB3, 0xB3, 0xB4, 0xB5, 0xB5, 0xB6, 0xB7,
+    0xB7, 0xB8, 0xB9, 0xBA, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBE, 0xBF,
+    0xC0, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, 0xC6, 0xC6, 0xC7,
+    0xC7, 0xC8, 0xC9, 0xC9, 0xCA, 0xCB, 0xCB, 0xCC, 0xCC, 0xCD, 0xCE, 0xCE,
+    0xCF, 0xD0, 0xD0, 0xD1, 0xD1, 0xD2, 0xD3, 0xD3, 0xD4, 0xD4, 0xD5, 0xD6,
+    0xD6, 0xD7, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xDA, 0xDB, 0xDC, 0xDC, 0xDD,
+    0xDD, 0xDE, 0xDE, 0xDF, 0xE0, 0xE0, 0xE1, 0xE1, 0xE2, 0xE2, 0xE3, 0xE4,
+    0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE7, 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA,
+    0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED, 0xEE, 0xEE, 0xEF, 0xF0, 0xF0, 0xF1,
+    0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF7,
+    0xF7, 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, 0xFD,
+    0xFD, 0xFE, 0xFE, 0xFF};
+
+}  // namespace
+
+int Blend(BlendMode blend_mode, int back_color, int src_color) {
+  switch (blend_mode) {
+    case BlendMode::kNormal:
+      return src_color;
+    case BlendMode::kMultiply:
+      return src_color * back_color / 255;
+    case BlendMode::kScreen:
+      return src_color + back_color - src_color * back_color / 255;
+    case BlendMode::kOverlay:
+      return Blend(BlendMode::kHardLight, src_color, back_color);
+    case BlendMode::kDarken:
+      return src_color < back_color ? src_color : back_color;
+    case BlendMode::kLighten:
+      return src_color > back_color ? src_color : back_color;
+    case BlendMode::kColorDodge: {
+      if (src_color == 255) {
+        return src_color;
+      }
+
+      return std::min(back_color * 255 / (255 - src_color), 255);
+    }
+    case BlendMode::kColorBurn: {
+      if (src_color == 0) {
+        return src_color;
+      }
+
+      return 255 - std::min((255 - back_color) * 255 / src_color, 255);
+    }
+    case BlendMode::kHardLight:
+      if (src_color < 128) {
+        return (src_color * back_color * 2) / 255;
+      }
+
+      return Blend(BlendMode::kScreen, back_color, 2 * src_color - 255);
+    case BlendMode::kSoftLight: {
+      if (src_color < 128) {
+        return back_color - (255 - 2 * src_color) * back_color *
+                                (255 - back_color) / 255 / 255;
+      }
+      return back_color + (2 * src_color - 255) *
+                              (kColorSqrt[back_color] - back_color) / 255;
+    }
+    case BlendMode::kDifference:
+      return back_color < src_color ? src_color - back_color
+                                    : back_color - src_color;
+    case BlendMode::kExclusion:
+      return back_color + src_color - 2 * back_color * src_color / 255;
+    default:
+      return src_color;
+  }
+}
+
+}  // namespace fxge
diff --git a/core/fxge/dib/blend.h b/core/fxge/dib/blend.h
new file mode 100644
index 0000000..10b6e5d
--- /dev/null
+++ b/core/fxge/dib/blend.h
@@ -0,0 +1,19 @@
+// Copyright 2023 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_FXGE_DIB_BLEND_H_
+#define CORE_FXGE_DIB_BLEND_H_
+
+enum class BlendMode;
+
+namespace fxge {
+
+// Note that Blend() only handles separable blend modes.
+int Blend(BlendMode blend_mode, int back_color, int src_color);
+
+}  // namespace fxge
+
+#endif  // CORE_FXGE_DIB_BLEND_H_
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index e9086b7..b15cedc 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -10,10 +10,13 @@
 
 #include <algorithm>
 
+#include "core/fxge/dib/blend.h"
 #include "core/fxge/dib/fx_dib.h"
 #include "third_party/base/check.h"
 #include "third_party/base/check_op.h"
 
+using fxge::Blend;
+
 #define FXDIB_ALPHA_UNION(dest, src) ((dest) + (src) - (dest) * (src) / 255)
 #define FXARGB_RGBORDERCOPY(dest, src)                  \
   *((dest) + 3) = *((src) + 3), *(dest) = *((src) + 2), \
@@ -21,79 +24,6 @@
 
 namespace {
 
-const uint8_t color_sqrt[256] = {
-    0x00, 0x03, 0x07, 0x0B, 0x0F, 0x12, 0x16, 0x19, 0x1D, 0x20, 0x23, 0x26,
-    0x29, 0x2C, 0x2F, 0x32, 0x35, 0x37, 0x3A, 0x3C, 0x3F, 0x41, 0x43, 0x46,
-    0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x57, 0x59, 0x5B, 0x5C,
-    0x5E, 0x60, 0x61, 0x63, 0x64, 0x65, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D,
-    0x6E, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
-    0x7B, 0x7C, 0x7D, 0x7E, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-    0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x91,
-    0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C,
-    0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA4, 0xA5,
-    0xA6, 0xA7, 0xA7, 0xA8, 0xA9, 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD, 0xAE,
-    0xAF, 0xB0, 0xB0, 0xB1, 0xB2, 0xB3, 0xB3, 0xB4, 0xB5, 0xB5, 0xB6, 0xB7,
-    0xB7, 0xB8, 0xB9, 0xBA, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBE, 0xBF,
-    0xC0, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, 0xC6, 0xC6, 0xC7,
-    0xC7, 0xC8, 0xC9, 0xC9, 0xCA, 0xCB, 0xCB, 0xCC, 0xCC, 0xCD, 0xCE, 0xCE,
-    0xCF, 0xD0, 0xD0, 0xD1, 0xD1, 0xD2, 0xD3, 0xD3, 0xD4, 0xD4, 0xD5, 0xD6,
-    0xD6, 0xD7, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xDA, 0xDB, 0xDC, 0xDC, 0xDD,
-    0xDD, 0xDE, 0xDE, 0xDF, 0xE0, 0xE0, 0xE1, 0xE1, 0xE2, 0xE2, 0xE3, 0xE4,
-    0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE7, 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA,
-    0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED, 0xEE, 0xEE, 0xEF, 0xF0, 0xF0, 0xF1,
-    0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF7,
-    0xF7, 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, 0xFD,
-    0xFD, 0xFE, 0xFE, 0xFF};
-
-int Blend(BlendMode blend_mode, int back_color, int src_color) {
-  switch (blend_mode) {
-    case BlendMode::kNormal:
-      return src_color;
-    case BlendMode::kMultiply:
-      return src_color * back_color / 255;
-    case BlendMode::kScreen:
-      return src_color + back_color - src_color * back_color / 255;
-    case BlendMode::kOverlay:
-      return Blend(BlendMode::kHardLight, src_color, back_color);
-    case BlendMode::kDarken:
-      return src_color < back_color ? src_color : back_color;
-    case BlendMode::kLighten:
-      return src_color > back_color ? src_color : back_color;
-    case BlendMode::kColorDodge: {
-      if (src_color == 255)
-        return src_color;
-
-      return std::min(back_color * 255 / (255 - src_color), 255);
-    }
-    case BlendMode::kColorBurn: {
-      if (src_color == 0)
-        return src_color;
-
-      return 255 - std::min((255 - back_color) * 255 / src_color, 255);
-    }
-    case BlendMode::kHardLight:
-      if (src_color < 128)
-        return (src_color * back_color * 2) / 255;
-
-      return Blend(BlendMode::kScreen, back_color, 2 * src_color - 255);
-    case BlendMode::kSoftLight: {
-      if (src_color < 128) {
-        return back_color - (255 - 2 * src_color) * back_color *
-                                (255 - back_color) / 255 / 255;
-      }
-      return back_color + (2 * src_color - 255) *
-                              (color_sqrt[back_color] - back_color) / 255;
-    }
-    case BlendMode::kDifference:
-      return back_color < src_color ? src_color - back_color
-                                    : back_color - src_color;
-    case BlendMode::kExclusion:
-      return back_color + src_color - 2 * back_color * src_color / 255;
-    default:
-      return src_color;
-  }
-}
-
 struct RGB {
   int red;
   int green;
