• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <native_drawing/drawing_image.h>
17 #include <native_drawing/drawing_text_typography.h>
18 #include <native_drawing/drawing_rect.h>
19 #include <native_drawing/drawing_point.h>
20 #include <native_drawing/drawing_region.h>
21 #include <native_drawing/drawing_round_rect.h>
22 #include <native_drawing/drawing_sampling_options.h>
23 #include <native_drawing/drawing_pixel_map.h>
24 #include <native_drawing/drawing_text_blob.h>
25 #include <native_drawing/drawing_shader_effect.h>
26 #include <native_drawing/drawing_gpu_context.h>
27 #include <native_drawing/drawing_surface.h>
28 #include <native_drawing/drawing_path_effect.h>
29 #include <native_drawing/drawing_color_filter.h>
30 #include <native_drawing/drawing_filter.h>
31 #include <native_drawing/drawing_image_filter.h>
32 #include <native_drawing/drawing_mask_filter.h>
33 #include <native_drawing/drawing_matrix.h>
34 #include "sample_graphics.h"
35 #include "common/log_common.h"
36 
DrawPathBasicTriangle(float startX,float startY,int32_t w)37 OH_Drawing_Path* SampleGraphics::DrawPathBasicTriangle(float startX, float startY, int32_t w)
38 {
39     // 创建路径对象
40     OH_Drawing_Path *path = OH_Drawing_PathCreate();
41     // 设置填充路径规则
42     OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_EVEN_ODD);
43     // 移动到起始点
44     OH_Drawing_PathMoveTo(path, startX + value15_, startY);
45     // 添加线段
46     OH_Drawing_PathLineTo(path, startX + value15_, startY + value150_);
47     OH_Drawing_PathLineTo(path, startX + w - value15_, startY + value150_);
48     // 闭合路径
49     OH_Drawing_PathClose(path);
50     // 判断路径是否包含坐标点
51     SAMPLE_LOGI("PathBasic-->contains:%{public}d",
52         OH_Drawing_PathContains(path, startX + value30_, startY + value100_) ? 1 : 0);
53     // 判断路径是否闭合
54     SAMPLE_LOGI("PathBasic-->isClosed:%{public}d", OH_Drawing_PathIsClosed(path, false) ? 1 : 0);
55     // 获取路径长度
56     SAMPLE_LOGI("PathBasic-->getLength:%{public}f", OH_Drawing_PathGetLength(path, false));
57     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 0, 0);
58     // 获取边界
59     OH_Drawing_PathGetBounds(path, rect);
60     SAMPLE_LOGI("PathBasic-->getBounds:left=%{public}f,top=%{public}f,right=%{public}f,bottom=%{public}f",
61         OH_Drawing_RectGetLeft(rect), OH_Drawing_RectGetTop(rect), OH_Drawing_RectGetRight(rect),
62         OH_Drawing_RectGetBottom(rect));
63     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
64     // 获取变换矩阵
65     OH_Drawing_PathGetMatrix(path, false, value50_, matrix, OH_Drawing_PathMeasureMatrixFlags::GET_POSITION_MATRIX);
66     OH_Drawing_Point2D point{startX + value30_, startY + value150_};
67     OH_Drawing_Point2D tangent{0, 0};
68     // 获取坐标点和切线
69     OH_Drawing_PathGetPositionTangent(path, false, 1, &point, &tangent);
70     SAMPLE_LOGI("PathBasic-->tangent.x=%{public}f,tangent.y=%{public}f", tangent.x, tangent.y);
71     OH_Drawing_MatrixDestroy(matrix);
72     return path;
73 }
74 
DrawPathBasic(OH_Drawing_Canvas * canvas)75 void SampleGraphics::DrawPathBasic(OH_Drawing_Canvas *canvas)
76 {
77     int32_t w = width_ / indexFive_;
78     float startX = 0;
79     float startY = value100_;
80     OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
81     OH_Drawing_PenSetColor(pen, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
82     OH_Drawing_PenSetAntiAlias(pen, true);
83     float penWidth = 3.f;
84     OH_Drawing_PenSetWidth(pen, penWidth);
85     OH_Drawing_CanvasAttachPen(canvas, pen);
86 
87     // 三角形1
88     OH_Drawing_Path *path = DrawPathBasicTriangle(startX, startY, w);
89     OH_Drawing_CanvasDrawPath(canvas, path);
90 
91     // 三角形2
92     // 复制路径
93     OH_Drawing_Path *path_copy = OH_Drawing_PathCopy(path);
94     OH_Drawing_Matrix *matrix_translate = OH_Drawing_MatrixCreateTranslation(w, 0);
95     // 对路径进行矩阵变换
96     OH_Drawing_PathTransform(path_copy, matrix_translate);
97     OH_Drawing_CanvasDrawPath(canvas, path_copy);
98 
99     // 三角形3
100     OH_Drawing_Path *path_third = OH_Drawing_PathCreate();
101     // 对路径进行矩阵变换
102     OH_Drawing_PathTransformWithPerspectiveClip(path_copy, matrix_translate, path_third, false);
103     OH_Drawing_CanvasDrawPath(canvas, path_third);
104 
105     // 三角形4
106     OH_Drawing_Path *path_fourth = OH_Drawing_PathCreate();
107     OH_Drawing_PathOffset(path, path_fourth, w * indexThree_, 0);
108     OH_Drawing_CanvasDrawPath(canvas, path_fourth);
109 
110     // 梯形
111     startX += indexFour_ * w;
112     OH_Drawing_Path *path_fifth = OH_Drawing_PathCreate();
113     OH_Drawing_PathMoveTo(path_fifth, startX + value15_, startY);
114     OH_Drawing_PathLineTo(path_fifth, startX + value15_, startY + value100_);
115     OH_Drawing_PathLineTo(path_fifth, startX + w - value15_, startY + value100_);
116     OH_Drawing_PathTransform(path_fourth, matrix_translate);
117     // 将两个路径合并(取差集)
118     OH_Drawing_PathOp(path_fifth, path_fourth, OH_Drawing_PathOpMode::PATH_OP_MODE_REVERSE_DIFFERENCE);
119     OH_Drawing_CanvasDrawPath(canvas, path_fifth);
120 
121     OH_Drawing_CanvasDetachPen(canvas);
122     OH_Drawing_PathDestroy(path);
123     OH_Drawing_PathDestroy(path_copy);
124     OH_Drawing_PathDestroy(path_third);
125     OH_Drawing_PathDestroy(path_fourth);
126     OH_Drawing_PathDestroy(path_fifth);
127     OH_Drawing_MatrixDestroy(matrix_translate);
128     OH_Drawing_PenDestroy(pen);
129 }
130 
DrawPathTo1Line(OH_Drawing_Canvas * canvas)131 void SampleGraphics::DrawPathTo1Line(OH_Drawing_Canvas *canvas)
132 {
133     int32_t w = width_ / indexFive_;
134     float startX = 0;
135     float startY = value100_;
136     OH_Drawing_Path *path = OH_Drawing_PathCreate();
137 
138     // 线段
139     OH_Drawing_PathMoveTo(path, startX + value15_, startY + value70_);
140     OH_Drawing_PathLineTo(path, startX + w - value15_, startY + value70_);
141     OH_Drawing_CanvasDrawPath(canvas, path);
142 
143     // 弧线
144     startX += w;
145     OH_Drawing_PathReset(path);
146     float startDeg = 60;
147     float sweepDeg = -240;
148     OH_Drawing_PathArcTo(path, startX + value15_, startY + value30_, startX + w - value15_, startY + value150_,
149         startDeg, sweepDeg);
150     OH_Drawing_CanvasDrawPath(canvas, path);
151 
152     // 二阶贝塞尔曲线
153     startX += w;
154     OH_Drawing_PathReset(path);
155     OH_Drawing_PathMoveTo(path, startX + value15_, startY);
156     OH_Drawing_PathQuadTo(path, startX + value30_, startY + value100_, startX + w - value15_, startY + value150_);
157     OH_Drawing_CanvasDrawPath(canvas, path);
158 
159     // 二阶贝塞尔曲线(带权重)
160     startX += w;
161     OH_Drawing_PathReset(path);
162     OH_Drawing_PathMoveTo(path, startX + value15_, startY);
163     float weight = 5.f;
164     OH_Drawing_PathConicTo(path, startX + value30_, startY + value100_, startX + w - value15_, startY + value150_,
165         weight);
166     OH_Drawing_CanvasDrawPath(canvas, path);
167 
168     // 三阶贝塞尔曲线
169     startX += w;
170     OH_Drawing_PathReset(path);
171     OH_Drawing_PathMoveTo(path, startX + value15_, startY);
172     OH_Drawing_PathCubicTo(path, startX + value30_, startY + value120_, startX + w - value30_, startY + value30_,
173         startX + w - value15_, startY + value150_);
174     OH_Drawing_CanvasDrawPath(canvas, path);
175 
176     OH_Drawing_PathDestroy(path);
177 }
178 
DrawPathTo2Line(OH_Drawing_Canvas * canvas)179 void SampleGraphics::DrawPathTo2Line(OH_Drawing_Canvas *canvas)
180 {
181     int32_t w = width_ / indexFive_;
182     float startX = 0;
183     float startY = value300_;
184     OH_Drawing_Path *path = OH_Drawing_PathCreate();
185 
186     // 线段
187     OH_Drawing_PathMoveTo(path, startX, startY);
188     OH_Drawing_PathRMoveTo(path, value15_, value70_);
189     OH_Drawing_PathRLineTo(path, w - value30_, 0);
190     OH_Drawing_CanvasDrawPath(canvas, path);
191 
192     // 二阶贝塞尔曲线
193     startX += w;
194     OH_Drawing_PathReset(path);
195     OH_Drawing_PathMoveTo(path, startX + value15_, startY);
196     OH_Drawing_PathRQuadTo(path, value30_, value100_, w - value10_, value150_);
197     OH_Drawing_CanvasDrawPath(canvas, path);
198 
199     // 二阶贝塞尔曲线(带权重)
200     startX += w;
201     OH_Drawing_PathReset(path);
202     OH_Drawing_PathMoveTo(path, startX + value15_, startY);
203     float weight = 5.f;
204     OH_Drawing_PathRConicTo(path, value30_, value100_, w - value15_, value150_, weight);
205     OH_Drawing_CanvasDrawPath(canvas, path);
206 
207     // 三阶贝塞尔曲线
208     startX += w;
209     OH_Drawing_PathReset(path);
210     OH_Drawing_PathMoveTo(path, startX + value15_, startY);
211     OH_Drawing_PathRCubicTo(path, value30_, value120_, w - value30_, value30_, w - value10_, value150_);
212     OH_Drawing_CanvasDrawPath(canvas, path);
213 
214     OH_Drawing_PathDestroy(path);
215 }
216 
DrawPathTo(OH_Drawing_Canvas * canvas)217 void SampleGraphics::DrawPathTo(OH_Drawing_Canvas *canvas)
218 {
219     OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
220     OH_Drawing_PenSetColor(pen, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
221     OH_Drawing_PenSetAntiAlias(pen, true);
222     float penWidth = 3.f;
223     OH_Drawing_PenSetWidth(pen, penWidth);
224     OH_Drawing_CanvasAttachPen(canvas, pen);
225 
226     DrawPathTo1Line(canvas);
227     OH_Drawing_CanvasTranslate(canvas, 0, value200_);
228     DrawPathTo2Line(canvas);
229 
230     OH_Drawing_CanvasDetachPen(canvas);
231     OH_Drawing_PenDestroy(pen);
232 }
233 
DrawPathAdd1Line(OH_Drawing_Canvas * canvas)234 void SampleGraphics::DrawPathAdd1Line(OH_Drawing_Canvas *canvas)
235 {
236     int32_t w = width_ / indexFive_;
237     float startX = 0;
238     float startY = value100_;
239     // 圆
240     OH_Drawing_Path *pathCircle = OH_Drawing_PathCreate();
241     float radius = 40;
242     float startYAdded = 60;
243     OH_Drawing_PathAddCircle(pathCircle, startX + w / indexTwo_, startY + startYAdded, radius, PATH_DIRECTION_CCW);
244     OH_Drawing_CanvasDrawPath(canvas, pathCircle);
245     OH_Drawing_PathDestroy(pathCircle);
246     // 矩形
247     startX += w;
248     OH_Drawing_Path *pathRect = OH_Drawing_PathCreate();
249     OH_Drawing_PathAddRect(pathRect, startX + value10_, startY + value30_, startX + w - value10_,
250         startY + value90_, PATH_DIRECTION_CCW);
251     OH_Drawing_CanvasDrawPath(canvas, pathRect);
252     OH_Drawing_PathDestroy(pathRect);
253     // 椭圆
254     startX += w;
255     OH_Drawing_Path *pathOval = OH_Drawing_PathCreate();
256     OH_Drawing_Rect *rectOval = OH_Drawing_RectCreate(startX + value10_, startY + value30_,
257         startX + w - value10_, startY + value90_);
258     OH_Drawing_PathAddOval(pathOval, rectOval, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
259     OH_Drawing_CanvasDrawPath(canvas, pathOval);
260     OH_Drawing_RectDestroy(rectOval);
261     OH_Drawing_PathDestroy(pathOval);
262     // 圆角矩形
263     startX += w;
264     OH_Drawing_Path *pathRoundRect = OH_Drawing_PathCreate();
265     OH_Drawing_Rect *rectRoundRect = OH_Drawing_RectCreate(startX + value10_, startY + value30_,
266         startX + w - value10_, startY + value90_);
267     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rectRoundRect, value20_, value20_);
268     OH_Drawing_PathAddRoundRect(pathRoundRect, roundRect, PATH_DIRECTION_CCW);
269     OH_Drawing_CanvasDrawPath(canvas, pathRoundRect);
270     OH_Drawing_RectDestroy(rectRoundRect);
271     OH_Drawing_PathDestroy(pathRoundRect);
272     OH_Drawing_RoundRectDestroy(roundRect);
273 }
274 
DrawPathAdd2Line(OH_Drawing_Canvas * canvas)275 void SampleGraphics::DrawPathAdd2Line(OH_Drawing_Canvas *canvas)
276 {
277     int32_t w = width_ / indexFive_;
278     float startX = 0;
279     float startY = value100_;
280     // 多边形
281     OH_Drawing_Path *pathPolygon = OH_Drawing_PathCreate();
282     float leftPointX = startX + value10_;
283     float rightPointX = startX + w - value10_;
284     float middlePointX = (leftPointX + rightPointX) / 2;
285     OH_Drawing_Point2D points[] = {{middlePointX, startY + value30_}, {leftPointX, startY + value90_},
286         {rightPointX, startY + value90_}};
287     OH_Drawing_PathAddPolygon(pathPolygon, points, 3, true); // 3 is the size of point array
288     OH_Drawing_CanvasDrawPath(canvas, pathPolygon);
289     OH_Drawing_PathDestroy(pathPolygon);
290     // 曲线
291     startX += w;
292     OH_Drawing_Rect *rectArc = OH_Drawing_RectCreate(startX - value30_, startY + value30_,
293         startX + w - value10_, startY + value150_);
294     OH_Drawing_Path *pathArc = OH_Drawing_PathCreate();
295     OH_Drawing_PathAddArc(pathArc, rectArc, 0, -value90_);
296     OH_Drawing_CanvasDrawPath(canvas, pathArc);
297     OH_Drawing_RectDestroy(rectArc);
298     OH_Drawing_PathDestroy(pathArc);
299 }
300 
DrawPathAdd3Line(OH_Drawing_Canvas * canvas)301 void SampleGraphics::DrawPathAdd3Line(OH_Drawing_Canvas *canvas)
302 {
303     int32_t w = width_ / indexFive_;
304     float startX = 0;
305     float startY = value100_;
306     // 线段1
307     OH_Drawing_Path *pathOuter1 = OH_Drawing_PathCreate();
308     OH_Drawing_Path *pathInner1 = OH_Drawing_PathCreate();
309     OH_Drawing_PathMoveTo(pathInner1, startX + value10_, startY);
310     OH_Drawing_PathLineTo(pathInner1, startX + w - value10_, startY);
311     OH_Drawing_Matrix *matrix1 = OH_Drawing_MatrixCreateTranslation(0, value50_);
312     OH_Drawing_PathAddPath(pathOuter1, pathInner1, matrix1);
313     OH_Drawing_CanvasDrawPath(canvas, pathOuter1);
314     OH_Drawing_PathDestroy(pathOuter1);
315     OH_Drawing_PathDestroy(pathInner1);
316     OH_Drawing_MatrixDestroy(matrix1);
317     // 线段2
318     startX += w;
319     OH_Drawing_Path *pathOuter2 = OH_Drawing_PathCreate();
320     OH_Drawing_Path *pathInner2 = OH_Drawing_PathCreate();
321     OH_Drawing_PathMoveTo(pathInner2, startX + value10_, startY + value50_);
322     OH_Drawing_PathLineTo(pathInner2, startX + w - value10_, startY + value50_);
323     OH_Drawing_PathAddPathWithMode(pathOuter2, pathInner2, OH_Drawing_PathAddMode::PATH_ADD_MODE_APPEND);
324     OH_Drawing_CanvasDrawPath(canvas, pathOuter2);
325     OH_Drawing_PathDestroy(pathOuter2);
326     OH_Drawing_PathDestroy(pathInner2);
327     // 线段3
328     startX += w;
329     OH_Drawing_Path *pathOuter3 = OH_Drawing_PathCreate();
330     OH_Drawing_Path *pathInner3 = OH_Drawing_PathCreate();
331     OH_Drawing_PathMoveTo(pathInner3, startX + value10_, startY);
332     OH_Drawing_PathLineTo(pathInner3, startX + w - value10_, startY);
333     OH_Drawing_PathAddPathWithOffsetAndMode(pathOuter3, pathInner3, 0, value50_,
334         OH_Drawing_PathAddMode::PATH_ADD_MODE_APPEND);
335     OH_Drawing_CanvasDrawPath(canvas, pathOuter3);
336     OH_Drawing_PathDestroy(pathOuter3);
337     OH_Drawing_PathDestroy(pathInner3);
338     // 线段4
339     startX += w;
340     OH_Drawing_Path *pathOuter4 = OH_Drawing_PathCreate();
341     OH_Drawing_Path *pathInner4 = OH_Drawing_PathCreate();
342     OH_Drawing_PathMoveTo(pathInner4, startX + value10_, startY);
343     OH_Drawing_PathLineTo(pathInner4, startX + w - value10_, startY);
344     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateTranslation(0, value50_);
345     OH_Drawing_PathAddPathWithMatrixAndMode(pathOuter4, pathInner4, matrix2,
346         OH_Drawing_PathAddMode::PATH_ADD_MODE_APPEND);
347     OH_Drawing_CanvasDrawPath(canvas, pathOuter4);
348     OH_Drawing_PathDestroy(pathOuter4);
349     OH_Drawing_PathDestroy(pathInner4);
350     OH_Drawing_MatrixDestroy(matrix2);
351 }
352 
DrawPathAdd4Line(OH_Drawing_Canvas * canvas)353 void SampleGraphics::DrawPathAdd4Line(OH_Drawing_Canvas *canvas)
354 {
355     int32_t w = width_ / indexFive_;
356     float startX = 0;
357     float startY = value100_;
358     // 椭圆
359     OH_Drawing_Path *pathOval = OH_Drawing_PathCreate();
360     OH_Drawing_Rect *rectOval = OH_Drawing_RectCreate(startX + value10_, startY + value30_,
361         startX + w - value10_, startY + value90_);
362     OH_Drawing_PathAddOvalWithInitialPoint(pathOval, rectOval, 1, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
363     OH_Drawing_CanvasDrawPath(canvas, pathOval);
364     OH_Drawing_RectDestroy(rectOval);
365     OH_Drawing_PathDestroy(pathOval);
366     // 矩形
367     startX += w;
368     OH_Drawing_Path *pathRect = OH_Drawing_PathCreate();
369     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(startX + value10_, startY + value30_,
370         startX + w - value10_, startY + value90_);
371     OH_Drawing_PathAddRectWithInitialCorner(pathRect, rect, PATH_DIRECTION_CCW, 1);
372     OH_Drawing_CanvasDrawPath(canvas, pathRect);
373     OH_Drawing_PathDestroy(pathRect);
374     OH_Drawing_RectDestroy(rect);
375 }
376 
DrawPathAdd(OH_Drawing_Canvas * canvas)377 void SampleGraphics::DrawPathAdd(OH_Drawing_Canvas *canvas)
378 {
379     OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
380     OH_Drawing_PenSetColor(pen, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
381     OH_Drawing_PenSetAntiAlias(pen, true);
382     float penWidth = 3.f;
383     OH_Drawing_PenSetWidth(pen, penWidth);
384     OH_Drawing_CanvasAttachPen(canvas, pen);
385 
386     DrawPathAdd1Line(canvas);
387     OH_Drawing_CanvasTranslate(canvas, 0, value200_);
388     DrawPathAdd2Line(canvas);
389     OH_Drawing_CanvasTranslate(canvas, 0, value200_);
390     DrawPathAdd3Line(canvas);
391     OH_Drawing_CanvasTranslate(canvas, 0, value200_);
392     DrawPathAdd4Line(canvas);
393 
394     OH_Drawing_CanvasDetachPen(canvas);
395     OH_Drawing_PenDestroy(pen);
396 }
397 
BuildFromSvgString(OH_Drawing_Canvas * canvas)398 void SampleGraphics::BuildFromSvgString(OH_Drawing_Canvas *canvas)
399 {
400     OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
401     OH_Drawing_BrushSetColor(brush, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
402     OH_Drawing_CanvasAttachBrush(canvas, brush);
403     char* str = "M150 130L30 300L270 300Z";
404     OH_Drawing_Path* path = OH_Drawing_PathCreate();
405     // 通过svg构建path
406     OH_Drawing_PathBuildFromSvgString(path, str);
407     OH_Drawing_CanvasDrawPath(canvas, path);
408     OH_Drawing_CanvasDetachBrush(canvas);
409     OH_Drawing_BrushDestroy(brush);
410     OH_Drawing_PathDestroy(path);
411 }
412 
DrawStar(OH_Drawing_Canvas * canvas)413 void SampleGraphics::DrawStar(OH_Drawing_Canvas *canvas)
414 {
415     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
416     OH_Drawing_PenSetColor(pen, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
417     OH_Drawing_PenSetWidth(pen, value10_);
418     OH_Drawing_PenSetJoin(pen, LINE_ROUND_JOIN);
419     OH_Drawing_CanvasAttachPen(canvas, pen);
420     OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
421     OH_Drawing_BrushSetColor(brush, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMin_, rgbaMax_, rgbaMin_));
422     OH_Drawing_CanvasAttachBrush(canvas, brush);
423     int len = value551_;
424     float aX = value630_;
425     float aY = value551_;
426     float angle = 18.0f;
427     float dX = aX - len * std::sin(angle);
428     float dY = aY + len * std::cos(angle);
429     float cX = aX + len * std::sin(angle);
430     float cY = dY;
431     float bX = aX + (len / 2.0);
432     float bY = aY + std::sqrt((cX - dX) * (cX - dX) + (len / 2.0) * (len / 2.0));
433     float eX = aX - (len / 2.0);
434     float eY = bY;
435     // 创建路径
436     OH_Drawing_Path* path = OH_Drawing_PathCreate();
437     // 到起始点
438     OH_Drawing_PathMoveTo(path, aX, aY);
439     // 绘制直线
440     OH_Drawing_PathLineTo(path, bX, bY);
441     OH_Drawing_PathLineTo(path, cX, cY);
442     OH_Drawing_PathLineTo(path, dX, dY);
443     OH_Drawing_PathLineTo(path, eX, eY);
444     // 直线闭合,形成五角星
445     OH_Drawing_PathClose(path);
446     // 绘制闭合路径
447     OH_Drawing_CanvasDrawPath(canvas, path);
448     OH_Drawing_CanvasDetachPen(canvas);
449     OH_Drawing_CanvasDetachBrush(canvas);
450     OH_Drawing_PenDestroy(pen);
451     OH_Drawing_BrushDestroy(brush);
452     OH_Drawing_PathDestroy(path);
453 }