diff --git a/graphic/graphic_2d/native_drawing/drawing_matrix.h b/graphic/graphic_2d/native_drawing/drawing_matrix.h
index f56827d8592682dfe8fd9e8517247c74de64fa18..f96915eda1033fcb7bfdb82d0a17c0244069d65a 100644
--- a/graphic/graphic_2d/native_drawing/drawing_matrix.h
+++ b/graphic/graphic_2d/native_drawing/drawing_matrix.h
@@ -164,6 +164,44 @@ typedef enum {
bool OH_Drawing_MatrixSetRectToRect(OH_Drawing_Matrix*, const OH_Drawing_Rect* src,
const OH_Drawing_Rect* dst, OH_Drawing_ScaleToFit stf);
+/**
+ * @brief Sets the transformation matrix to rotate around a specified point (px, py) using the given specified sine and
+ * cosine.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param cMatrix Indicates the pointer to an OH_Drawing_Matrix object.
+ * @param sinValue Indicates the sine of the angle of rotation.
+ * @param cosValue Indicates the cosine of the angle of rotation.
+ * @param px Indicates the x-coordinate of the point around which to rotate.
+ * @param py Indicates the y-coordinate of the point around which to rotate.
+ * @return Returns an error code.
+ * Returns {@link OH_DRAWING_SUCCESS} if the operation is successful.
+ * Returns {@link OH_DRAWING_ERROR_INVALID_PARAMETER} if the cMatrix is nullptr.
+ *
+ * @since 14
+ * @version 1.0
+ */
+OH_Drawing_ErrorCode OH_Drawing_MatrixSetSinCos(
+ OH_Drawing_Matrix* cMatrix, float sinValue, float cosValue, float px, float py);
+
+/**
+ * @brief Sets the transformation matrix to apply the given tilt factor (kx, ky) at the specified point (px, py).
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param cMatrix Indicates the pointer to an OH_Drawing_Matrix object.
+ * @param kx Indicates the skew factor in the x direction.
+ * @param ky Indicates the skew factor in the y direction.
+ * @param px Indicates the x-coordinate of the point around which to skew.
+ * @param py Indicates the y-coordinate of the point around which to skew.
+ * @return Returns an error code.
+ * Returns {@link OH_DRAWING_SUCCESS} if the operation is successful.
+ * Returns {@link OH_DRAWING_ERROR_INVALID_PARAMETER} if the cMatrix is nullptr.
+ *
+ * @since 14
+ * @version 1.0
+ */
+OH_Drawing_ErrorCode OH_Drawing_MatrixSetSkew(OH_Drawing_Matrix* cMatrix, float kx, float ky, float px, float py);
+
/**
* @brief Sets matrix to matrix multiplied by matrix constructed from rotating by degrees
* about pivot point(px, py), positive degrees rotates clockwise.
@@ -326,6 +364,22 @@ void OH_Drawing_MatrixPostScale(OH_Drawing_Matrix*, float sx, float sy, float px
*/
void OH_Drawing_MatrixPostTranslate(OH_Drawing_Matrix*, float dx, float dy);
+/**
+ * @brief Determines whether a rectangle will be mapped to another rectangle after the specified matrix transformation.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param cMatrix Indicates the pointer to an OH_Drawing_Matrix object.
+ * @param mapping Indicates a pointer to a boolean variable that will be set to true if the rectangle will map
+ * to another rectangle, or false otherwise.
+ * @return Returns an error code.
+ * Returns {@link OH_DRAWING_SUCCESS} if the operation is successful.
+ * Returns {@link OH_DRAWING_ERROR_INVALID_PARAMETER} if the cMatrix or mapping is nullptr.
+ *
+ * @since 14
+ * @version 1.0
+ */
+OH_Drawing_ErrorCode OH_Drawing_MatrixRectStaysRect(const OH_Drawing_Matrix* cMatrix, bool* mapping);
+
/**
* @brief Reset matrix to identity, which has no effect on mapped point, sets matrix to:
* | 1 0 0 |
@@ -480,6 +534,22 @@ void OH_Drawing_MatrixMapPoints(const OH_Drawing_Matrix*, const OH_Drawing_Point
*/
bool OH_Drawing_MatrixMapRect(const OH_Drawing_Matrix*, const OH_Drawing_Rect* src, OH_Drawing_Rect* dst);
+/**
+ * @brief Determines whether the specified transformation matrix is an affine transformation.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param cMatrix Indicates the pointer to an OH_Drawing_Matrix object.
+ * @param affine Indicates a pointer to a boolean variable that will be set to true if the matrix is affine,
+ * or false otherwise.
+ * @return Returns an error code.
+ * Returns {@link OH_DRAWING_SUCCESS} if the operation is successful.
+ * Returns {@link OH_DRAWING_ERROR_INVALID_PARAMETER} if the cMatrix is or affine is nullptr.
+ *
+ * @since 14
+ * @version 1.0
+ */
+OH_Drawing_ErrorCode OH_Drawing_MatrixIsAffine(const OH_Drawing_Matrix* cMatrix, bool* affine);
+
/**
* @brief Returns true if the first matrix equals the second matrix.
*
diff --git a/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json b/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json
index 353ce3f539771d30cdac90947de31c81c38d3c4d..e7354e6cdccfba5b944d7fabf5569d71358c1de0 100644
--- a/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json
+++ b/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json
@@ -325,6 +325,18 @@
"first_introduced": "12",
"name": "OH_Drawing_MatrixSetRectToRect"
},
+ {
+ "first_introduced": "14",
+ "name": "OH_Drawing_MatrixSetSinCos"
+ },
+ {
+ "first_introduced": "14",
+ "name": "OH_Drawing_MatrixSetSkew"
+ },
+ {
+ "first_introduced": "14",
+ "name": "OH_Drawing_MatrixRectStaysRect"
+ },
{
"first_introduced": "12",
"name": "OH_Drawing_MatrixReset"
@@ -363,6 +375,10 @@
"name": "OH_Drawing_MatrixSetPolyToPoly"
},
{ "name": "OH_Drawing_MatrixInvert" },
+ {
+ "first_introduced": "14",
+ "name": "OH_Drawing_MatrixIsAffine"
+ },
{ "name": "OH_Drawing_MatrixIsEqual" },
{ "name": "OH_Drawing_MatrixIsIdentity" },
{ "name": "OH_Drawing_MatrixDestroy" },