diff --git a/core/fxcrt/fx_coordinates.cpp b/core/fxcrt/fx_coordinates.cpp
index 7d0d104..fabde1e 100644
--- a/core/fxcrt/fx_coordinates.cpp
+++ b/core/fxcrt/fx_coordinates.cpp
@@ -300,6 +300,11 @@
 }
 #endif  // NDEBUG
 
+std::tuple<float, float, float, float, float, float> CFX_Matrix::AsTuple()
+    const {
+  return {a, b, c, d, e, f};
+}
+
 CFX_Matrix CFX_Matrix::GetInverse() const {
   CFX_Matrix inverse;
   float i = a * d - b * c;
diff --git a/core/fxcrt/fx_coordinates.h b/core/fxcrt/fx_coordinates.h
index 08dbd08..67d3736 100644
--- a/core/fxcrt/fx_coordinates.h
+++ b/core/fxcrt/fx_coordinates.h
@@ -8,12 +8,11 @@
 #define CORE_FXCRT_FX_COORDINATES_H_
 
 #include <algorithm>
+#include <tuple>
 
 #include "core/fxcrt/fx_system.h"
 #include "third_party/base/numerics/safe_math.h"
 
-class CFX_Matrix;
-
 template <class BaseType>
 class CFX_PTemplate {
  public:
@@ -541,6 +540,8 @@
     f = other.f;
   }
 
+  std::tuple<float, float, float, float, float, float> AsTuple() const;
+
   void SetIdentity() {
     a = 1;
     b = 0;
diff --git a/core/fxcrt/fx_coordinates_unittest.cpp b/core/fxcrt/fx_coordinates_unittest.cpp
index 3d11748..ded4d45 100644
--- a/core/fxcrt/fx_coordinates_unittest.cpp
+++ b/core/fxcrt/fx_coordinates_unittest.cpp
@@ -248,27 +248,38 @@
 
 TEST(CFX_Matrix, SetIdentity) {
   CFX_Matrix m;
-  EXPECT_FLOAT_EQ(1.0, m.a);
-  EXPECT_FLOAT_EQ(0.0, m.b);
-  EXPECT_FLOAT_EQ(0.0, m.c);
-  EXPECT_FLOAT_EQ(1.0, m.d);
-  EXPECT_FLOAT_EQ(0.0, m.e);
-  EXPECT_FLOAT_EQ(0.0, m.f);
+  EXPECT_FLOAT_EQ(1.0f, m.a);
+  EXPECT_FLOAT_EQ(0.0f, m.b);
+  EXPECT_FLOAT_EQ(0.0f, m.c);
+  EXPECT_FLOAT_EQ(1.0f, m.d);
+  EXPECT_FLOAT_EQ(0.0f, m.e);
+  EXPECT_FLOAT_EQ(0.0f, m.f);
   EXPECT_TRUE(m.IsIdentity());
 
   m.a = -1;
   EXPECT_FALSE(m.IsIdentity());
 
   m.SetIdentity();
-  EXPECT_FLOAT_EQ(1.0, m.a);
-  EXPECT_FLOAT_EQ(0.0, m.b);
-  EXPECT_FLOAT_EQ(0.0, m.c);
-  EXPECT_FLOAT_EQ(1.0, m.d);
-  EXPECT_FLOAT_EQ(0.0, m.e);
-  EXPECT_FLOAT_EQ(0.0, m.f);
+  EXPECT_FLOAT_EQ(1.0f, m.a);
+  EXPECT_FLOAT_EQ(0.0f, m.b);
+  EXPECT_FLOAT_EQ(0.0f, m.c);
+  EXPECT_FLOAT_EQ(1.0f, m.d);
+  EXPECT_FLOAT_EQ(0.0f, m.e);
+  EXPECT_FLOAT_EQ(0.0f, m.f);
   EXPECT_TRUE(m.IsIdentity());
 }
 
+TEST(CFX_Matrix, AsTuple) {
+  CFX_Matrix m(1, 2, 3, 4, 5, 6);
+  auto tuple = m.AsTuple();
+  EXPECT_FLOAT_EQ(1.0f, std::get<0>(tuple));
+  EXPECT_FLOAT_EQ(2.0f, std::get<1>(tuple));
+  EXPECT_FLOAT_EQ(3.0f, std::get<2>(tuple));
+  EXPECT_FLOAT_EQ(4.0f, std::get<3>(tuple));
+  EXPECT_FLOAT_EQ(5.0f, std::get<4>(tuple));
+  EXPECT_FLOAT_EQ(6.0f, std::get<5>(tuple));
+}
+
 TEST(CFX_Matrix, GetInverse) {
   static constexpr float data[6] = {3, 0, 2, 3, 1, 4};
   CFX_Matrix m(data);
diff --git a/fpdfsdk/fpdf_editimg.cpp b/fpdfsdk/fpdf_editimg.cpp
index 21ed434..8282eeb 100644
--- a/fpdfsdk/fpdf_editimg.cpp
+++ b/fpdfsdk/fpdf_editimg.cpp
@@ -6,6 +6,8 @@
 
 #include "public/fpdf_edit.h"
 
+#include <utility>
+
 #include "core/fpdfapi/cpdf_modulemgr.h"
 #include "core/fpdfapi/page/cpdf_image.h"
 #include "core/fpdfapi/page/cpdf_imageobject.h"
@@ -129,13 +131,7 @@
   if (!pImgObj || !a || !b || !c || !d || !e || !f)
     return false;
 
-  const CFX_Matrix& matrix = pImgObj->matrix();
-  *a = matrix.a;
-  *b = matrix.b;
-  *c = matrix.c;
-  *d = matrix.d;
-  *e = matrix.e;
-  *f = matrix.f;
+  std::tie(*a, *b, *c, *d, *e, *f) = pImgObj->matrix().AsTuple();
   return true;
 }
 
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index 9026c72..981baec 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -873,12 +873,6 @@
   if (!pFormObj || !a || !b || !c || !d || !e || !f)
     return false;
 
-  const CFX_Matrix& matrix = pFormObj->form_matrix();
-  *a = matrix.a;
-  *b = matrix.b;
-  *c = matrix.c;
-  *d = matrix.d;
-  *e = matrix.e;
-  *f = matrix.f;
+  std::tie(*a, *b, *c, *d, *e, *f) = pFormObj->form_matrix().AsTuple();
   return true;
 }
diff --git a/fpdfsdk/fpdf_editpath.cpp b/fpdfsdk/fpdf_editpath.cpp
index 83662aa..8601a60 100644
--- a/fpdfsdk/fpdf_editpath.cpp
+++ b/fpdfsdk/fpdf_editpath.cpp
@@ -4,6 +4,7 @@
 
 #include "public/fpdf_edit.h"
 
+#include <utility>
 #include <vector>
 
 #include "core/fpdfapi/page/cpdf_path.h"
@@ -251,12 +252,7 @@
   if (!pPathObj)
     return false;
 
-  *a = pPathObj->m_Matrix.a;
-  *b = pPathObj->m_Matrix.b;
-  *c = pPathObj->m_Matrix.c;
-  *d = pPathObj->m_Matrix.d;
-  *e = pPathObj->m_Matrix.e;
-  *f = pPathObj->m_Matrix.f;
+  std::tie(*a, *b, *c, *d, *e, *f) = pPathObj->m_Matrix.AsTuple();
   return true;
 }
 
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index 1c6709f..3e1067d 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -524,14 +524,7 @@
   if (!pTextObj)
     return false;
 
-  CFX_Matrix text_matrix = pTextObj->GetTextMatrix();
-  *a = text_matrix.a;
-  *b = text_matrix.b;
-  *c = text_matrix.c;
-  *d = text_matrix.d;
-  *e = text_matrix.e;
-  *f = text_matrix.f;
-
+  std::tie(*a, *b, *c, *d, *e, *f) = pTextObj->GetTextMatrix().AsTuple();
   return true;
 }
 
