1# 基础绘制效果(C/C++) 2 3<!--Kit: ArkGraphics 2D--> 4<!--Subsystem: Graphics--> 5<!--Owner: @hangmengxin--> 6<!--Designer: @wangyanglan--> 7<!--Tester: @nobuggers--> 8<!--Adviser: @ge-yafang--> 9 10## 场景介绍 11 12在进行绘制时,可以进行一些基础效果的设置,比如设置填充颜色、设置抗锯齿、设置图形描边、设置图形线条连接样式等。 13 14主要通过画刷(Brush)设置填充基础效果,通过画笔(Pen)设置描边基础效果。 15 16 17## 填充效果 18 19可以通过画刷设置基础的填充颜色,还可以通过画刷使用混合模式、着色器效果、滤波器效果等实现更多复杂绘制效果,具体可见[复杂绘制效果](complex-drawing-effect-c.md)。 20 21 22### 接口说明 23 24使用画刷(Brush)设置绘制效果的常用接口如下表所示,详细的使用和参数请见[drawing_brush](../reference/apis-arkgraphics2d/capi-drawing-brush-h.md)。 25 26| 接口 | 描述 | 27| -------- | -------- | 28| OH_Drawing_Brush\* OH_Drawing_BrushCreate (void) | 用于创建一个画刷对象。 | 29| void OH_Drawing_CanvasAttachBrush (OH_Drawing_Canvas\*, const OH_Drawing_Brush\*) | 用于设置画刷给画布,画布将使用设置的画刷样式和颜色填充绘制的图形形状。 | 30| void OH_Drawing_BrushSetColor (OH_Drawing_Brush\* , uint32_t color) | 用于设置画刷的颜色属性,颜色属性描述了画刷填充图形时使用的颜色,用一个32位(ARGB)的变量表示。 | 31| void OH_Drawing_BrushSetAntiAlias (OH_Drawing_Brush\* , bool) | 用于设置画刷的抗锯齿属性,设置为true则画刷在绘制图形时会对图形的边缘像素进行半透明的模糊处理,以使图形边缘更加平滑。 | 32| void OH_Drawing_CanvasDetachBrush (OH_Drawing_Canvas\*) | 用于去除画布中的画刷,执行后画布将不使用此前设置的画刷,恢复到默认的填充效果。 | 33| void OH_Drawing_BrushDestroy (OH_Drawing_Brush\*) | 用于销毁画刷对象并回收该对象占有的内存。 | 34 35 36### 开发步骤 37 381. 使用OH_Drawing_BrushCreate()接口创建画刷Brush对象。 39 40 ```c++ 41 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate(); 42 ``` 43 442. 使用画刷设置基础绘制效果(可选以下的一个或者多个效果)。 45 46 - 可使用OH_Drawing_BrushSetColor()接口设置填充颜色。 47 48 ```c++ 49 uint32_t color = 0xffff0000; 50 OH_Drawing_BrushSetColor(brush, color); 51 ``` 52 53 color是一个32位(ARGB)的变量,例如0xffff0000。 54 55 - 可使用OH_Drawing_BrushSetAntiAlias()接口开启抗锯齿效果,以使图形边缘更加平滑。 56 ```c++ 57 OH_Drawing_BrushSetAntiAlias(brush, true); 58 ``` 59 603. 使用OH_Drawing_CanvasAttachBrush()接口给Canvas画布设置画刷。接口接受两个参数,一个是画布对象Canvas,请确保已创建或获取得到画布Canvas,具体可见[画布的获取与绘制结果的显示(C/C++)](canvas-get-result-draw-c.md);另一个是要画设置的画刷对象。画布将会使用设置的画刷样式和颜色等填充图形。 61 62 ```c++ 63 OH_Drawing_CanvasAttachBrush(canvas, brush); 64 ``` 65 664. 按需绘制图元,具体可见[图元绘制](primitive-drawing-overview.md)一节。 67 685. 当不需要填充效果时,可以使用OH_Drawing_CanvasDetachBrush()去除。入参为画布对象Canvas。 69 70 ```c++ 71 OH_Drawing_CanvasDetachBrush(canvas); 72 ``` 73 746. 当不再需要画刷进行效果填充时,请及时使用OH_Drawing_BrushDestroy()接口销毁Brush对象。 75 76 ```c++ 77 OH_Drawing_BrushDestroy(brush); 78 ``` 79 80 81## 描边效果 82 83可以通过画笔设置基础的描边颜色,还可以通过画笔使用混合模式、路径效果、着色器效果、滤波器效果等实现更多复杂绘制效果,具体可见[复杂绘制效果](complex-drawing-effect-c.md)。 84 85 86### 接口说明 87 88使用画笔(Pen)设置绘制效果的常用接口如下表所示,详细的使用和参数请见[drawing_pen](../reference/apis-arkgraphics2d/capi-drawing-pen-h.md)。 89 90| 接口 | 描述 | 91| -------- | -------- | 92| OH_Drawing_Pen\* OH_Drawing_PenCreate (void) | 用于创建一个画笔对象。 | 93| void OH_Drawing_CanvasAttachPen (OH_Drawing_Canvas\* , const OH_Drawing_Pen\* ) | 用于设置画笔给画布,画布将会使用设置画笔的样式和颜色去绘制图形形状的轮廓。 | 94| void OH_Drawing_PenSetColor (OH_Drawing_Pen\* , uint32_t color) | 用于设置画笔的颜色属性,颜色属性描述了画笔绘制图形轮廓时使用的颜色,用一个32位(ARGB)的变量表示。 | 95| void OH_Drawing_PenSetWidth (OH_Drawing_Pen\* , float width) | 用于设置画笔的线宽。0线宽被视作特殊的极细线宽,在绘制时始终会被绘制为1像素,不随画布的缩放而改变;负数线宽在实际绘制时会被视作0线宽。 | 96| void OH_Drawing_PenSetAntiAlias (OH_Drawing_Pen\* , bool ) | 用于设置画笔的抗锯齿属性,设置为true则画笔在绘制图形时会对图形的边缘像素进行半透明的模糊处理。 | 97| void OH_Drawing_PenSetCap (OH_Drawing_Pen\* , OH_Drawing_PenLineCapStyle) | 用于设置画笔线帽样式。 | 98| void OH_Drawing_PenSetJoin (OH_Drawing_Pen\* , OH_Drawing_PenLineJoinStyle) | 用于设置画笔绘制转角的样式。 | 99| void OH_Drawing_CanvasDetachPen (OH_Drawing_Canvas\*) | 用于去除画布中的画笔,执行后画布将不去绘制图形形状的轮廓,恢复到默认的填充效果。 | 100| void OH_Drawing_PenDestroy (OH_Drawing_Pen\*) | 用于销毁画笔对象并回收该对象占有的内存。 | 101 102 103### 开发步骤 104 1051. 使用OH_Drawing_PenCreate()接口创建画笔Pen对象。 106 107 ```c++ 108 OH_Drawing_Pen* pen = OH_Drawing_PenCreate(); 109 ``` 110 1112. 使用OH_Drawing_CanvasAttachPen()接口给Canvas画布设置画笔。接口接受两个参数,一个是画布对象Canvas,请确保已创建或获取得到画布Canvas,具体可见[画布的获取与绘制结果的显示(C/C++)](canvas-get-result-draw-c.md);另一个是要设置的画笔对象。画布将会使用设置的画笔样式和颜色等绘制图形轮廓。 112 113 ```c++ 114 OH_Drawing_CanvasAttachPen(canvas, pen); 115 ``` 116 1173. 使用画笔设置具体的描边效果(可选以下的一个或者多个效果)。 118 119 - 可使用OH_Drawing_PenSetColor()接口设置画笔颜色,对应为绘制图形轮廓时使用的颜色。 120 ```c++ 121 uint32_t color = 0xffff0000; 122 OH_Drawing_PenSetColor(pen, color); 123 ``` 124 125 color是一个32位(ARGB)的变量,例如0xffff0000。 126 127 - 可使用OH_Drawing_PenSetWidth()接口设置画笔的线宽。 128 129 ```c++ 130 OH_Drawing_PenSetWidth(pen, width); 131 ``` 132 133 width表示线宽的像素值。 134 135 - 可使用OH_Drawing_PenSetAntiAlias()接口设置画笔抗锯齿,以使图形绘制边缘更平滑。 136 137 ```c++ 138 OH_Drawing_PenSetAntiAlias(pen, true); 139 ``` 140 141 - 可使用OH_Drawing_PenSetCap()接口设置画笔线帽样式。 142 143 ```c++ 144 OH_Drawing_PenSetCap(pen, LINE_FLAT_CAP); 145 ``` 146 147 OH_Drawing_PenLineCapStyle线帽样式可选分类对应如下: 148 149 | 线帽样式 | 说明 | 示意图 | 150 | -------- | -------- | -------- | 151 | LINE_FLAT_CAP | 没有线帽样式,线条头尾端点处横切。 |  | 152 | LINE_SQUARE_CAP | 线帽的样式为方框,线条的头尾端点处多出一个方框,方框宽度和线段一样宽,高度是线段宽度的一半。 |  | 153 | LINE_ROUND_CAP | 线帽的样式为圆弧,线条的头尾端点处多出一个半圆弧,半圆的直径与线段宽度一致。 |  | 154 155 - 可使用OH_Drawing_PenSetJoin()接口设置画笔转角样式。 156 157 ```c++ 158 OH_Drawing_PenSetJoin(pen, LINE_MITER_JOIN); 159 ``` 160 161 OH_Drawing_PenLineJoinStyle转角样式可选分类对应如下: 162 | 转角样式 | 说明 | 示意图 | 163 | -------- | -------- | -------- | 164 | LINE_MITER_JOIN | 转角类型为尖角 |  | 165 | LINE_ROUND_JOIN | 转角类型为圆头 |  | 166 | LINE_BEVEL_JOIN | 转角类型为平头 |  | 167 1684. 按需绘制图元,具体可见[图元绘制](primitive-drawing-overview.md)一节。 169 1705. 当不需要描边效果时,可以使用OH_Drawing_CanvasDetachPen()去除。入参为画布对象Canvas,请确保已创建或获取得到画布Canvas,具体可见[画布的获取与绘制结果的显示(C/C++)](canvas-get-result-draw-c.md)。 171 172 ```c++ 173 OH_Drawing_CanvasDetachPen(canvas); 174 ``` 175 1766. 当不再需要画笔进行描边时,请及时使用OH_Drawing_PenDestroy()接口销毁Pen对象。 177 178 ```c++ 179 OH_Drawing_PenDestroy(pen); 180 ``` 181 182<!--RP1--> 183## 相关实例 184 185针对Drawing(C/C++)的开发,有以下相关实例可供参考: 186 187- [NDKGraphicsDraw (API14)](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/DocsSample/Drawing/NDKGraphicsDraw) 188<!--RP1End-->