diff --git a/core/fpdfapi/page/cpdf_meshstream.cpp b/core/fpdfapi/page/cpdf_meshstream.cpp
index ea90c58..1036c2b 100644
--- a/core/fpdfapi/page/cpdf_meshstream.cpp
+++ b/core/fpdfapi/page/cpdf_meshstream.cpp
@@ -200,7 +200,7 @@
   return pos;
 }
 
-std::array<float, 3> CPDF_MeshStream::ReadColor() const {
+FX_RGB<float> CPDF_MeshStream::ReadColor() const {
   DCHECK(ShouldCheckBPC(m_type));
 
   float color_value[kMaxComponents];
@@ -210,9 +210,9 @@
                                          m_ComponentMax;
   }
 
-  std::array<float, 3> rgb = {};
+  FX_RGB<float> rgb = {};
   if (m_funcs.empty()) {
-    m_pCS->GetRGB(color_value, &rgb[0], &rgb[1], &rgb[2]);
+    m_pCS->GetRGB(color_value, &rgb.red, &rgb.green, &rgb.blue);
     return rgb;
   }
 
@@ -223,7 +223,7 @@
     }
   }
 
-  m_pCS->GetRGB(result, &rgb[0], &rgb[1], &rgb[2]);
+  m_pCS->GetRGB(result, &rgb.red, &rgb.green, &rgb.blue);
   return rgb;
 }
 
diff --git a/core/fpdfapi/page/cpdf_meshstream.h b/core/fpdfapi/page/cpdf_meshstream.h
index 48c68e7..591a0be 100644
--- a/core/fpdfapi/page/cpdf_meshstream.h
+++ b/core/fpdfapi/page/cpdf_meshstream.h
@@ -9,12 +9,12 @@
 
 #include <stdint.h>
 
-#include <array>
 #include <memory>
 #include <vector>
 
 #include "core/fpdfapi/page/cpdf_shadingpattern.h"
 #include "core/fxcrt/retain_ptr.h"
+#include "core/fxge/dib/fx_dib.h"
 
 class CPDF_StreamAcc;
 
@@ -25,7 +25,7 @@
   ~CPDF_MeshVertex();
 
   CFX_PointF position;
-  std::array<float, 3> rgb = {};
+  FX_RGB<float> rgb = {};
 };
 
 class CFX_BitStream;
@@ -53,7 +53,7 @@
 
   uint32_t ReadFlag() const;
   CFX_PointF ReadCoords() const;
-  std::array<float, 3> ReadColor() const;
+  FX_RGB<float> ReadColor() const;
 
   bool ReadVertex(const CFX_Matrix& pObject2Bitmap,
                   CPDF_MeshVertex* vertex,
diff --git a/core/fpdfapi/render/cpdf_rendershading.cpp b/core/fpdfapi/render/cpdf_rendershading.cpp
index 7b9b557..93fc3a0 100644
--- a/core/fpdfapi/render/cpdf_rendershading.cpp
+++ b/core/fpdfapi/render/cpdf_rendershading.cpp
@@ -371,11 +371,11 @@
 
       float y_dist = (y - position1.y) / (position2.y - position1.y);
       r[nIntersects] =
-          vertex1.rgb[0] + ((vertex2.rgb[0] - vertex1.rgb[0]) * y_dist);
-      g[nIntersects] =
-          vertex1.rgb[1] + ((vertex2.rgb[1] - vertex1.rgb[1]) * y_dist);
+          vertex1.rgb.red + ((vertex2.rgb.red - vertex1.rgb.red) * y_dist);
+      g[nIntersects] = vertex1.rgb.green +
+                       ((vertex2.rgb.green - vertex1.rgb.green) * y_dist);
       b[nIntersects] =
-          vertex1.rgb[2] + ((vertex2.rgb[2] - vertex1.rgb[2]) * y_dist);
+          vertex1.rgb.blue + ((vertex2.rgb.blue - vertex1.rgb.blue) * y_dist);
       nIntersects++;
     }
     if (nIntersects != 2)
@@ -848,10 +848,10 @@
       if (!stream.CanReadColor())
         break;
 
-      std::array<float, 3> rgb = stream.ReadColor();
-      patch.patch_colors[i].comp[0] = static_cast<int32_t>(rgb[0] * 255);
-      patch.patch_colors[i].comp[1] = static_cast<int32_t>(rgb[1] * 255);
-      patch.patch_colors[i].comp[2] = static_cast<int32_t>(rgb[2] * 255);
+      FX_RGB<float> rgb = stream.ReadColor();
+      patch.patch_colors[i].comp[0] = static_cast<int32_t>(rgb.red * 255);
+      patch.patch_colors[i].comp[1] = static_cast<int32_t>(rgb.green * 255);
+      patch.patch_colors[i].comp[2] = static_cast<int32_t>(rgb.blue * 255);
     }
 
     CFX_FloatRect bbox =
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index e4dbbf9..f8043b2 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -1329,12 +1329,10 @@
         cubics[i].fY = point.y;
       }
       for (size_t i = start_color; i < std::size(colors); ++i) {
-        float r;
-        float g;
-        float b;
-        std::tie(r, g, b) = stream.ReadColor();
-        colors[i] = SkColorSetARGB(0xFF, (U8CPU)(r * 255), (U8CPU)(g * 255),
-                                   (U8CPU)(b * 255));
+        FX_RGB<float> rgb = stream.ReadColor();
+        colors[i] =
+            SkColorSetARGB(0xFF, (U8CPU)(rgb.red * 255),
+                           (U8CPU)(rgb.green * 255), (U8CPU)(rgb.blue * 255));
       }
       m_pCanvas->drawPatch(cubics, colors, /*texCoords=*/nullptr,
                            SkBlendMode::kDst, paint);
