diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index 24d4496..1532b13 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -8,6 +8,7 @@
 
 #include <map>
 #include <memory>
+#include <optional>
 #include <set>
 #include <sstream>
 #include <tuple>
@@ -51,15 +52,21 @@
 // Value: The resource names of a given type.
 using ResourcesMap = std::map<ByteString, std::set<ByteString>>;
 
+// TODO(thestig): Remove out parameter and raw pointer.
 bool GetColor(const CPDF_Color* pColor, float* rgb) {
-  int intRGB[3];
-  if (!pColor || !pColor->IsColorSpaceRGB() ||
-      !pColor->GetRGB(&intRGB[0], &intRGB[1], &intRGB[2])) {
+  if (!pColor || !pColor->IsColorSpaceRGB()) {
     return false;
   }
-  rgb[0] = intRGB[0] / 255.0f;
-  rgb[1] = intRGB[1] / 255.0f;
-  rgb[2] = intRGB[2] / 255.0f;
+
+  std::optional<FX_COLORREF> colors = pColor->GetRGB();
+  if (!colors.has_value()) {
+    return false;
+  }
+
+  // TODO(thestig): Remove float to int to float conversion.
+  rgb[0] = FXSYS_GetRValue(colors.value()) / 255.0f;
+  rgb[1] = FXSYS_GetGValue(colors.value()) / 255.0f;
+  rgb[2] = FXSYS_GetBValue(colors.value()) / 255.0f;
   return true;
 }
 
diff --git a/core/fpdfapi/page/cpdf_color.cpp b/core/fpdfapi/page/cpdf_color.cpp
index 9ab04b1..32ffaeb 100644
--- a/core/fpdfapi/page/cpdf_color.cpp
+++ b/core/fpdfapi/page/cpdf_color.cpp
@@ -6,6 +6,7 @@
 
 #include "core/fpdfapi/page/cpdf_color.h"
 
+#include <optional>
 #include <utility>
 
 #include "core/fpdfapi/page/cpdf_patterncs.h"
@@ -78,7 +79,7 @@
          CPDF_ColorSpace::GetStockCS(CPDF_ColorSpace::Family::kDeviceRGB);
 }
 
-bool CPDF_Color::GetRGB(int* R, int* G, int* B) const {
+std::optional<FX_COLORREF> CPDF_Color::GetRGB() const {
   float r = 0.0f;
   float g = 0.0f;
   float b = 0.0f;
@@ -92,13 +93,13 @@
     if (!m_Buffer.empty())
       result = m_pCS->GetRGB(m_Buffer, &r, &g, &b);
   }
-  if (!result)
-    return false;
+  if (!result) {
+    return std::nullopt;
+  }
 
-  *R = static_cast<int32_t>(r * 255 + 0.5f);
-  *G = static_cast<int32_t>(g * 255 + 0.5f);
-  *B = static_cast<int32_t>(b * 255 + 0.5f);
-  return true;
+  return FXSYS_BGR(static_cast<int32_t>(b * 255 + 0.5f),
+                   static_cast<int32_t>(g * 255 + 0.5f),
+                   static_cast<int32_t>(r * 255 + 0.5f));
 }
 
 RetainPtr<CPDF_Pattern> CPDF_Color::GetPattern() const {
diff --git a/core/fpdfapi/page/cpdf_color.h b/core/fpdfapi/page/cpdf_color.h
index 1a745e8..236b2f0 100644
--- a/core/fpdfapi/page/cpdf_color.h
+++ b/core/fpdfapi/page/cpdf_color.h
@@ -10,10 +10,12 @@
 #include <stdint.h>
 
 #include <memory>
+#include <optional>
 #include <vector>
 
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/span.h"
+#include "core/fxge/dib/fx_dib.h"
 
 class CPDF_ColorSpace;
 class CPDF_Pattern;
@@ -37,7 +39,7 @@
 
   uint32_t ComponentCount() const;
   bool IsColorSpaceRGB() const;
-  bool GetRGB(int* R, int* G, int* B) const;
+  std::optional<FX_COLORREF> GetRGB() const;
 
   // Should only be called if IsPattern() returns true.
   RetainPtr<CPDF_Pattern> GetPattern() const;
diff --git a/core/fpdfapi/page/cpdf_colorstate.cpp b/core/fpdfapi/page/cpdf_colorstate.cpp
index 0b8ef97..ee725a7 100644
--- a/core/fpdfapi/page/cpdf_colorstate.cpp
+++ b/core/fpdfapi/page/cpdf_colorstate.cpp
@@ -127,22 +127,18 @@
   if (!color.IsPattern()) {
     color.SetValueForNonPattern(std::move(values));
   }
-  int R;
-  int G;
-  int B;
-  return color.GetRGB(&R, &G, &B) ? FXSYS_BGR(B, G, R) : 0xFFFFFFFF;
+  return color.GetRGB().value_or(0xFFFFFFFF);
 }
 
 FX_COLORREF CPDF_ColorState::SetPattern(RetainPtr<CPDF_Pattern> pattern,
                                         pdfium::span<float> values,
                                         CPDF_Color& color) {
   color.SetValueForPattern(pattern, values);
-  int R;
-  int G;
-  int B;
-  if (color.GetRGB(&R, &G, &B)) {
-    return FXSYS_BGR(B, G, R);
+  std::optional<FX_COLORREF> colorref = color.GetRGB();
+  if (colorref.has_value()) {
+    return colorref.value();
   }
+
   CPDF_TilingPattern* tiling = pattern->AsTilingPattern();
   return tiling && tiling->colored() ? 0x00BFBFBF : 0xFFFFFFFF;
 }
