场景介绍
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]);
