diff --git a/core/fxge/dib/fx_dib_main.cpp b/core/fxge/dib/fx_dib_main.cpp
index 31e5919..7f58ead 100644
--- a/core/fxge/dib/fx_dib_main.cpp
+++ b/core/fxge/dib/fx_dib_main.cpp
@@ -55,6 +55,53 @@
     0,   0,   0,
 };
 
+FXDIB_Format MakeRGBFormat(int bpp) {
+  switch (bpp) {
+    case 1:
+      return FXDIB_Format::k1bppRgb;
+    case 8:
+      return FXDIB_Format::k8bppRgb;
+    case 24:
+      return FXDIB_Format::kRgb;
+    case 32:
+      return FXDIB_Format::kRgb32;
+    default:
+      return FXDIB_Format::kInvalid;
+  }
+}
+
+FXDIB_Format MakeARGBFormat(int bpp) {
+  switch (bpp) {
+    case 8:
+      return FXDIB_Format::k8bppRgba;
+    case 24:
+      return FXDIB_Format::kRgba;
+    case 32:
+      return FXDIB_Format::kArgb;
+    default:
+      return FXDIB_Format::kInvalid;
+  }
+}
+
+FXDIB_Format MakeMaybeAlphaRGBFormat(bool alpha, int bpp) {
+  return alpha ? MakeARGBFormat(bpp) : MakeRGBFormat(bpp);
+}
+
+FXDIB_Format AddAlphaToCmykFormat(FXDIB_Format format) {
+  switch (format) {
+    case FXDIB_Format::k8bppCmyk:
+      return FXDIB_Format::k8bppCmyka;
+    case FXDIB_Format::kCmyk:
+      return FXDIB_Format::kCmyka;
+    case FXDIB_Format::k8bppCmyka:
+      return FXDIB_Format::k8bppCmyka;
+    case FXDIB_Format::kCmyka:
+      return FXDIB_Format::kCmyka;
+    default:
+      return FXDIB_Format::kInvalid;
+  }
+}
+
 FXDIB_ResampleOptions::FXDIB_ResampleOptions() = default;
 
 bool FXDIB_ResampleOptions::HasAnyOptions() const {
diff --git a/core/fxge/fx_dib.h b/core/fxge/fx_dib.h
index 86643de..8ce9885 100644
--- a/core/fxge/fx_dib.h
+++ b/core/fxge/fx_dib.h
@@ -130,52 +130,10 @@
   return (static_cast<uint16_t>(format) & 0x700) == 0;
 }
 
-inline FXDIB_Format AddAlphaToCmykFormat(FXDIB_Format format) {
-  switch (format) {
-    case FXDIB_Format::k8bppCmyk:
-      return FXDIB_Format::k8bppCmyka;
-    case FXDIB_Format::kCmyk:
-      return FXDIB_Format::kCmyka;
-    case FXDIB_Format::k8bppCmyka:
-      return FXDIB_Format::k8bppCmyka;
-    case FXDIB_Format::kCmyka:
-      return FXDIB_Format::kCmyka;
-    default:
-      return FXDIB_Format::kInvalid;
-  }
-}
-
-inline FXDIB_Format MakeRGBFormat(int bpp) {
-  switch (bpp) {
-    case 1:
-      return FXDIB_Format::k1bppRgb;
-    case 8:
-      return FXDIB_Format::k8bppRgb;
-    case 24:
-      return FXDIB_Format::kRgb;
-    case 32:
-      return FXDIB_Format::kRgb32;
-    default:
-      return FXDIB_Format::kInvalid;
-  }
-}
-
-inline FXDIB_Format MakeARGBFormat(int bpp) {
-  switch (bpp) {
-    case 8:
-      return FXDIB_Format::k8bppRgba;
-    case 24:
-      return FXDIB_Format::kRgba;
-    case 32:
-      return FXDIB_Format::kArgb;
-    default:
-      return FXDIB_Format::kInvalid;
-  }
-}
-
-inline FXDIB_Format MakeMaybeAlphaRGBFormat(bool alpha, int bpp) {
-  return alpha ? MakeARGBFormat(bpp) : MakeRGBFormat(bpp);
-}
+FXDIB_Format MakeRGBFormat(int bpp);
+FXDIB_Format MakeARGBFormat(int bpp);
+FXDIB_Format MakeMaybeAlphaRGBFormat(bool alpha, int bpp);
+FXDIB_Format AddAlphaToCmykFormat(FXDIB_Format format);
 
 inline FX_CMYK CmykEncode(int c, int m, int y, int k) {
   return (c << 24) | (m << 16) | (y << 8) | k;
@@ -195,7 +153,6 @@
 }
 
 FX_ARGB AlphaAndColorRefToArgb(int a, FX_COLORREF colorref);
-
 FX_ARGB StringToFXARGB(WideStringView view);
 
 #define FXARGB_A(argb) ((uint8_t)((argb) >> 24))
