场景介绍

NativeDrawing模块供给了一系列的接口用于根本图形和字体的制作。常见的应用场景举例:

●2D图形制作。

●文本制作。

接口说明

接口名 描绘
OH_Drawing_BitmapCreate(void) 创立一个位图目标。
OH_Drawing_BitmapBuild(OH_Drawing_Bitmap*,constuint32_twidth,constuint32_theight,constOH_Drawing_BitmapFormat*) 初始化位图目标的宽度和高度,并且为该位图设置像素格局。
OH_Drawing_CanvasCreate(void) 创立一个画布目标。
OH_Drawing_CanvasBind(OH_Drawing_Canvas*,OH_Drawing_Bitmap*) 将一个位图目标绑定到画布中,使得画布制作的内容输出到位图中(即CPU烘托)。
OH_Drawing_CanvasAttachBrush(OH_Drawing_Canvas*,constOH_Drawing_Brush*) 设置画刷给画布,画布将会运用设置的画刷款式和色彩去填充制作的图形形状。
OH_Drawing_CanvasAttachPen(OH_Drawing_Canvas*,constOH_Drawing_Pen*) 设置画笔给画布,画布将会运用设置画笔的款式和色彩去制作图形形状的概括。
OH_Drawing_CanvasDrawPath(OH_Drawing_Canvas*,constOH_Drawing_Path*) 画一个自界说途径。
OH_Drawing_PathCreate(void) 创立一个途径目标。
OH_Drawing_PathMoveTo(OH_Drawing_Path*,floatx,floaty) 设置自界说途径的开始点方位。
OH_Drawing_PathLineTo(OH_Drawing_Path*,floatx,floaty) 添加一条到目标点的线段。
OH_Drawing_PathClose(OH_Drawing_Path*) 闭合途径,会添加一条到途径起点方位的线段。
OH_Drawing_PenCreate(void) 创立一个画笔目标。
OH_Drawing_PenSetAntiAlias(OH_Drawing_Pen*,bool) 设置抗锯齿特点,如果为真则说明画笔会启用抗锯齿功用,在制作图形时会对图形的边际像素进行半透明的模糊处理。
OH_Drawing_PenSetWidth(OH_Drawing_Pen*,floatwidth) 设置画笔的厚度特点,厚度特点描绘了画笔制作图形概括的宽度。
OH_Drawing_BrushCreate(void) 创立一个画刷目标。
OH_Drawing_BrushSetColor(OH_Drawing_Brush*,uint32_tcolor) 设置画刷的色彩特点,色彩特点描绘了画刷填充图形时运用的色彩,用一个32位(ARGB)的变量表示。
OH_Drawing_CreateTypographyStyle(void) 创立一个排版目标,用于界说排版款式。
OH_Drawing_CreateTextStyle(void) 创立一个文本目标,用于界说文本款式。
OH_Drawing_TypographyHandlerAddText(OH_Drawing_TypographyCreate*,constchar*) 设置文本内容。
OH_Drawing_TypographyPaint(OH_Drawing_Typography*,OH_Drawing_Canvas*,double,double) 显现文本。

具体的接口说明请参阅Drawing

2D图形制作开发过程

以下过程描绘了怎么运用NativeDrawing模块的画布画笔制作一个根本的2D图形:

1. 创立Bitmap实例。运用drawing_bitmap.h的OH_Drawing_BitmapCreate接口创立一个Bitmap实例cBitmap,并运用OH_Drawing_BitmapBuild指定其长宽巨细和像素格局。

//创立一个bitmap目标
OH_Drawing_Bitmap*cBitmap=OH_Drawing_BitmapCreate();
//界说bitmap的像素格局
OH_Drawing_BitmapFormatcFormat{COLOR_FORMAT_RGBA_8888,ALPHA_FORMAT_OPAQUE};
//结构对应格局的bitmap
OH_Drawing_BitmapBuild(cBitmap,width,height,&cFormat);

2. 创立画布实例。运用drawing_canvas.h的OH_Drawing_CanvasCreate接口创立一个画布实例cCanvas,并运用OH_Drawing_CanvasBind接口将cBitmap实例绑定到cCanvas上,后续在画布上制作的内容会输出到绑定的cBitmap实例中。

//创立一个canvas目标
OH_Drawing_Canvas*cCanvas=OH_Drawing_CanvasCreate();
//将画布与bitmap绑定,画布画的内容会输出到绑定的bitmap内存中
OH_Drawing_CanvasBind(cCanvas,cBitmap);
//运用白色铲除画布内容
OH_Drawing_CanvasClear(cCanvas,OH_Drawing_ColorSetArgb(0xFF,0xFF,0xFF,0xFF));

3. 结构Path形状。运用drawing_path.h供给的接口完结一个五角星形状的结构cPath。

intlen=300;
floataX=500;
floataY=500;
floatdX=aX-len*std::sin(18.0f);
floatdY=aY len*std::cos(18.0f);
floatcX=aX len*std::sin(18.0f);
floatcY=dY;
floatbX=aX (len/2.0);
floatbY=aY std::sqrt((cX-dX)*(cX-dX) (len/2.0)*(len/2.0));
floateX=aX-(len/2.0);
floateY=bY;
//创立一个path目标,然后运用接口连接成一个五角星形状
OH_Drawing_Path*cPath=OH_Drawing_PathCreate();
//指定path的开始方位
OH_Drawing_PathMoveTo(cPath,aX,aY);
//用直线连接到目标点
OH_Drawing_PathLineTo(cPath,bX,bY);
OH_Drawing_PathLineTo(cPath,cX,cY);
OH_Drawing_PathLineTo(cPath,dX,dY);
OH_Drawing_PathLineTo(cPath,eX,eY);
//闭合形状,path制作结束
OH_Drawing_PathClose(cPath);

4. 设置画笔和画刷款式。运用drawing_pen.h的OH_Drawing_PenCreate接口创立一个画笔实例cPen,并设置抗锯齿、色彩、线宽等特点,画笔用于形状边框线的制作。运用drawing_brush.h的OH_Drawing_BrushCreate接口创立一个画刷实例cBrush,并设置填充色彩,画刷用于形状内部的填充。运用drawing_canvas.h的OH_Drawing_CanvasAttachPen和OH_Drawing_CanvasAttachBrush接口将画笔画刷的实例设置到画布实例中。

//创立一个画笔Pen目标,Pen目标用于形状的边框线制作
OH_Drawing_Pen*cPen= OH_Drawing_PenCreate();
OH_Drawing_PenSetAntiAlias(cPen, true);
OH_Drawing_PenSetColor(cPen, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
OH_Drawing_PenSetWidth(cPen, 10.0);
OH_Drawing_PenSetJoin(cPen,LINE_ROUND_JOIN);
//将Pen画笔设置到canvas中
OH_Drawing_CanvasAttachPen(cCanvas,cPen);
//创立一个画刷Brush目标,Brush目标用于形状的填充
OH_Drawing_Brush*cBrush= OH_Drawing_BrushCreate();
OH_Drawing_BrushSetColor(cBrush, OH_Drawing_ColorSetArgb(0xFF, 0x00, 0xFF, 0x00));
//将Brush画刷设置到canvas中
OH_Drawing_CanvasAttachBrush(cCanvas,cBrush);

5. 制作Path形状。运用drawing_canvas.h的OH_Drawing_CanvasDrawPath接口将五角星制作到画布上,制作结束后不再运用的实例需要调用对应的接口进行毁掉。

//在画布上画path的形状,五角星的边框款式为pen设置,色彩填充为Brush设置
OH_Drawing_CanvasDrawPath(cCanvas,cPath);
//毁掉创立的目标
OH_Drawing_BrushDestroy(cBrush);
OH_Drawing_PenDestroy(cPen);
OH_Drawing_PathDestroy(cPath);

6. 获取像素数据。运用drawing_bitmap.h的OH_Drawing_BitmapGetPixels接口获取到画布绑定bitmap实例的像素地址,该地址指向的内存包括画布刚刚制作的像素数据。

//画完后获取像素地址,地址指向的内存包括画布画的像素数据
void*bitmapAddr=OH_Drawing_BitmapGetPixels(cBitmap);
std::copy(addr,addr addrSize,static_cast<uint8_t*>(bitmapAddr));
//毁掉canvas目标
OH_Drawing_CanvasDestroy(cCanvas);
//毁掉bitmap目标
OH_Drawing_BitmapDestroy(cBitmap);

文本制作开发过程

以下过程描绘了怎么运用NativeDrawing模块的文字显现功用:

1. 创立画布和bitmap实例。

//创立bitmap
OH_Drawing_Bitmap*cBitmap=OH_Drawing_BitmapCreate();
OH_Drawing_BitmapFormatcFormat{COLOR_FORMAT_RGBA_8888,ALPHA_FORMAT_OPAQUE};
OH_Drawing_BitmapBuild(cBitmap,width,height,&cFormat);
//创立canvas
OH_Drawing_Canvas*cCanvas=OH_Drawing_CanvasCreate();
OH_Drawing_CanvasBind(cCanvas,cBitmap);
OH_Drawing_CanvasClear(cCanvas,OH_Drawing_ColorSetArgb(0xFF,0xFF,0xFF,0xFF));

2. 设置排版风格。

//选择从左到右/左对齐等排版特点
OH_Drawing_TypographyStyle*typoStyle=OH_Drawing_CreateTypographyStyle();
OH_Drawing_SetTypographyTextDirection(typoStyle,TEXT_DIRECTION_LTR);
OH_Drawing_SetTypographyTextAlign(typoStyle,TEXT_ALIGN_LEFT);

3. 设置文本风格。

//设置文字色彩,例如黑色
OH_Drawing_TextStyle*txtStyle= OH_Drawing_CreateTextStyle();
OH_Drawing_SetTextStyleColor(txtStyle, OH_Drawing_ColorSetArgb(0xFF, 0x00, 0x00, 0x00));
//设置文字巨细、字重等特点
doublefontSize= 30;
OH_Drawing_SetTextStyleFontSize(txtStyle,fontSize);
OH_Drawing_SetTextStyleFontWeight(txtStyle,FONT_WEIGHT_400);
OH_Drawing_SetTextStyleBaseLine(txtStyle,TEXT_BASELINE_ALPHABETIC);
OH_Drawing_SetTextStyleFontHeight(txtStyle, 1);
//设置字体类型等
constchar*fontFamilies[] = {"Roboto"};
OH_Drawing_SetTextStyleFontFamilies(txtStyle, 1,fontFamilies);
OH_Drawing_SetTextStyleFontStyle(txtStyle,FONT_STYLE_NORMAL);
OH_Drawing_SetTextStyleLocale(txtStyle, "en");

4. 生成最终文本显现效果。

OH_Drawing_TypographyCreate*handler= OH_Drawing_CreateTypographyHandler(typoStyle,
    OH_Drawing_CreateFontCollection());
OH_Drawing_TypographyHandlerPushTextStyle(handler,txtStyle);
//设置文字内容
constchar*text= "HarmonyOSn";
OH_Drawing_TypographyHandlerAddText(handler,text);
OH_Drawing_TypographyHandlerPopTextStyle(handler);
OH_Drawing_Typography*typography= OH_Drawing_CreateTypography(handler);
//设置页面最大宽度
doublemaxWidth= 800.0;
OH_Drawing_TypographyLayout(typography,maxWidth);
//设置文本在画布上制作的开始方位
doubleposition[2] = {10.0, 15.0};
//将文本制作到画布上
OH_Drawing_TypographyPaint(typography,cCanvas,position[0],position[1]);
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。