
HarmonyOS Developer Native API的相关指导
Drawing开发指导
场景介绍
Native Drawing模块提供了一系列的接口用于基本图形和字体的绘制。常见的应用场景举例:
- 2D图形绘制。
- 文本绘制。
接口说明
接口名 | 描述 |
OH_Drawing_BitmapCreate (void) | 创建一个位图对象。 |
OH_Drawing_BitmapBuild (OH_Drawing_Bitmap *, const uint32_t width, const uint32_t height, const OH_Drawing_BitmapFormat *) | 初始化位图对象的宽度和高度,并且为该位图设置像素格式。 |
OH_Drawing_CanvasCreate (void) | 创建一个画布对象。 |
OH_Drawing_CanvasBind (OH_Drawing_Canvas *, OH_Drawing_Bitmap *) | 将一个位图对象绑定到画布中,使得画布绘制的内容输出到位图中(即CPU渲染)。 |
OH_Drawing_CanvasAttachBrush (OH_Drawing_Canvas *, const OH_Drawing_Brush *) | 设置画刷给画布,画布将会使用设置的画刷样式和颜色去填充绘制的图形形状。 |
OH_Drawing_CanvasAttachPen (OH_Drawing_Canvas *, const OH_Drawing_Pen *) | 设置画笔给画布,画布将会使用设置画笔的样式和颜色去绘制图形形状的轮廓。 |
OH_Drawing_CanvasDrawPath (OH_Drawing_Canvas *, const OH_Drawing_Path *) | 画一个自定义路径。 |
OH_Drawing_PathCreate (void) | 创建一个路径对象。 |
OH_Drawing_PathMoveTo (OH_Drawing_Path *, float x, float y) | 设置自定义路径的起始点位置。 |
OH_Drawing_PathLineTo (OH_Drawing_Path *, float x, float y) | 添加一条到目标点的线段。 |
OH_Drawing_PathClose (OH_Drawing_Path *) | 闭合路径,会添加一条到路径起点位置的线段。 |
OH_Drawing_PenCreate (void) | 创建一个画笔对象。 |
OH_Drawing_PenSetAntiAlias (OH_Drawing_Pen *, bool) | 设置抗锯齿属性,如果为真则说明画笔会启用抗锯齿功能,在绘制图形时会对图形的边缘像素进行半透明的模糊处理。 |
OH_Drawing_PenSetWidth (OH_Drawing_Pen *, float width) | 设置画笔的厚度属性,厚度属性描述了画笔绘制图形轮廓的宽度。 |
OH_Drawing_BrushCreate (void) | 创建一个画刷对象。 |
OH_Drawing_BrushSetColor (OH_Drawing_Brush *, uint32_t color) | 设置画刷的颜色属性,颜色属性描述了画刷填充图形时使用的颜色,用一个32位(ARGB)的变量表示。 |
OH_Drawing_CreateTypographyStyle (void) | 创建一个排版对象,用于定义排版样式。 |
OH_Drawing_CreateTextStyle (void) | 创建一个文本对象,用于定义文本样式。 |
OH_Drawing_TypographyHandlerAddText (OH_Drawing_TypographyCreate *, const char *) | 设置文本内容。 |
OH_Drawing_TypographyPaint (OH_Drawing_Typography *, OH_Drawing_Canvas *, double, double) | 显示文本。 |
详细的接口说明请参考Drawing。
2D图形绘制开发步骤
以下步骤描述了在HarmonyOS如何使用 Native Drawing 模块的画布画笔绘制一个基本的2D图形:
- 创建Bitmap实例。使用drawing_bitmap.h的OH_Drawing_BitmapCreate接口创建一个Bitmap实例cBitmap,并使用OH_Drawing_BitmapBuild指定其长宽大小和像素格式。
- 创建画布实例。使用drawing_canvas.h的OH_Drawing_CanvasCreate接口创建一个画布实例cCanvas,并使用OH_Drawing_CanvasBind接口将cBitmap实例绑定到cCanvas上,后续在画布上绘制的内容会输出到绑定的cBitmap实例中。
- 构造Path形状。使用drawing_path.h提供的接口完成一个五角星形状的构造cPath。
- 设置画笔和画刷样式。使用drawing_pen.h的OH_Drawing_PenCreate接口创建一个画笔实例cPen, 并设置抗锯齿、颜色、线宽等属性,画笔用于形状边框线的绘制。使用drawing_brush.h的OH_Drawing_BrushCreate接口创建一个画刷实例cBrush, 并设置填充颜色, 画刷用于形状内部的填充。使用drawing_canvas.h的OH_Drawing_CanvasAttachPen和OH_Drawing_CanvasAttachBrush接口将画笔画刷的实例设置到画布实例中。
- 绘制Path形状。使用drawing_canvas.h的OH_Drawing_CanvasDrawPath接口将五角星绘制到画布上,绘制完毕后不再使用的实例需要调用对应的接口进行销毁。
- 获取像素数据。使用drawing_bitmap.h的OH_Drawing_BitmapGetPixels接口获取到画布绑定bitmap实例的像素地址,该地址指向的内存包含画布刚刚绘制的像素数据。
文本绘制开发步骤
以下步骤描述了在HarmonyOS中,如何使用Native Drawing模块的文字显示功能:
- 创建画布和bitmap实例
- 设置排版风格
- 设置文本风格
- 生成最终文本显示效果
Rawfile开发指导
场景介绍
开发者可以通过本指导了解在HarmonyOS应用中,如何使用Native Rawfile接口操作Rawfile目录和文件。功能包括遍历、打开、搜索、读取和关闭Rawfile。
接口说明
接口名 | 描述 |
NativeResourceManager *OH_ResourceManager_InitNativeResourceManager(napi_env env, napi_value jsResMgr) | 初始化native resource manager。 |
RawDir *OH_ResourceManager_OpenRawDir(const NativeResourceManager *mgr, const char *dirName) | 打开指定rawfile目录。 |
int OH_ResourceManager_GetRawFileCount(RawDir *rawDir) | 获取指定rawfile目录下的rawfile文件数量。 |
const char *OH_ResourceManager_GetRawFileName(RawDir *rawDir, int index) | 获取rawfile名字。 |
RawFile *OH_ResourceManager_OpenRawFile(const NativeResourceManager *mgr, const char *fileName) | 打开指定rawfile文件。 |
long OH_ResourceManager_GetRawFileSize(RawFile *rawFile) | 获取rawfile文件大小。 |
int OH_ResourceManager_SeekRawFile(const RawFile *rawFile, long offset, int whence) | 指定rawfile内偏移量。 |
long OH_ResourceManager_GetRawFileOffset(const RawFile *rawFile) | 获取rawfile偏移量。 |
int OH_ResourceManager_ReadRawFile(const RawFile *rawFile, void *buf, size_t length) | 读取rawfile文件内容。 |
void OH_ResourceManager_CloseRawFile(RawFile *rawFile) | 释放rawfile文件相关资源。 |
void OH_ResourceManager_CloseRawDir(RawDir *rawDir) | 释放rawfile目录相关资源。 |
bool OH_ResourceManager_GetRawFileDescriptor(const RawFile *rawFile, RawFileDescriptor &descriptor) | 获取rawfile的fd。 |
bool OH_ResourceManager_ReleaseRawFileDescriptor(const RawFileDescriptor &descriptor) | 释放rawfile的fd。 |
void OH_ResourceManager_ReleaseNativeResourceManager(NativeResourceManager *resMgr) | 释放native resource manager相关资源。 |
开发步骤
- 添加头文件。
- 使用OH_ResourceManager_InitNativeResourceManager(napi_env env, napi_value jsResMgr)接口获取NativeResourceManager实例。
- 根据NativeResourceManager实例,使用OH_ResourceManager_OpenRawDir接口获取RawDir实例。
- 根据RawDir实例,使用OH_ResourceManager_GetRawFileCount接口获取对应目录下的rawfile文件总数 。
- 根据RawDir实例,使用OH_ResourceManager_GetRawFileName接口获取目录下对应index的rawfile文件名。
- 根据NativeResourceManager实例,使用OH_ResourceManager_OpenRawFile接口获取指定文件名的RawFile实例
- 根据RawFile实例,使用OH_ResourceManager_GetRawFileSize接口获取对应rawfile文件大小。
- 根据RawFile实例,使用OH_ResourceManager_SeekRawFile接口指定rawfile偏移量。
- 根据RawFile实例,使用OH_ResourceManager_GetRawFileOffset接口获取rawfile偏移量。
- 根据RawFile实例,使用OH_ResourceManager_ReadRawFile接口读取rawfile文件内容。
- 根据RawFile实例,使用OH_ResourceManager_CloseRawFile接口释放rawfile文件相关资源。
- 根据RawDir实例,使用OH_ResourceManager_CloseRawDir接口释放rawfile目录相关资源。
- 根据RawFile实例,使用OH_ResourceManager_GetRawFileDescriptor接口获取rawfile的RawFileDescriptor。
- 根据RawFileDescriptor实例,使用OH_ResourceManager_ReleaseRawFileDescriptor接口关闭rawfile的fd。
- 根据NativeResourceManager实例,使用OH_ResourceManager_ReleaseNativeResourceManager接口释放native resource manager。
NativeWindow 开发指导
场景介绍
NativeWindow是HarmonyOS本地平台化窗口,表示图形队列的生产者端。接口能力包括从Surface构建NativeWindow的能力,设置NativeWindow属性的能力等。
针对NativeWindow,常见的开发场景如下:
- 结合XComponent组件获取到NativeWindow实例,设置NativeWindow的属性,基于此Native Window进行opengl绘制。
接口说明
接口名 | 描述 |
OH_NativeWindow_CreateNativeWindowFromSurface (void *pSurface) | 创建NativeWindow实例,每次调用都会产生一个新的NativeWindow实例。 |
OH_NativeWindow_DestroyNativeWindow (OHNativeWindow *window) | 将NativeWindow对象的引用计数减1,当引用计数为0的时候,该NativeWindow对象会被析构掉。 |
OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer (void *pSurfaceBuffer) | 创建NativeWindowBuffer实例,每次调用都会产生一个新的NativeWindowBuffer实例。 |
OH_NativeWindow_DestroyNativeWindowBuffer (OHNativeWindowBuffer *buffer) | 将NativeWindowBuffer对象的引用计数减1,当引用计数为0的时候,该NativeWindowBuffer对象会被析构掉。 |
OH_NativeWindow_NativeWindowRequestBuffer (OHNativeWindow *window, OHNativeWindowBuffer **buffer, int *fenceFd) | 通过NativeWindow对象申请一块NativeWindowBuffer,用以内容生产。 |
OH_NativeWindow_NativeWindowFlushBuffer (OHNativeWindow *window, OHNativeWindowBuffer *buffer, int fenceFd, Region region) | 通过NativeWindow将生产好内容的NativeWindowBuffer放回到Buffer队列中,用以内容消费。 |
OH_NativeWindow_NativeWindowAbortBuffer (OHNativeWindow *window, OHNativeWindowBuffer *buffer) | 通过NativeWindow将之前申请出来的NativeWindowBuffer返还到Buffer队列中,供下次再申请。 |
OH_NativeWindow_NativeWindowHandleOpt (OHNativeWindow *window, int code,...) | 设置/获取NativeWindow的属性,包括设置/获取宽高、内容格式等。 |
OH_NativeWindow_GetBufferHandleFromNative (OHNativeWindowBuffer *buffer) | 通过NativeWindowBuffer获取该buffer的BufferHandle指针。 |
OH_NativeWindow_NativeObjectReference (void *obj) | 增加一个NativeObject的引用计数。 |
OH_NativeWindow_NativeObjectUnreference (void *obj) | 减少一个NativeObject的引用计数,当引用计数减少为0时,该NativeObject将被析构掉。 |
OH_NativeWindow_GetNativeObjectMagic (void *obj) | 获取NativeObject的MagicId。 |
OH_NativeWindow_NativeWindowSetScalingMode (OHNativeWindow *window, uint32_t sequence, OHScalingMode scalingMode) | 设置NativeWindow的缩放模式。 |
OH_NativeWindow_NativeWindowSetMetaData(OHNativeWindow *window, uint32_t sequence, int32_t size, const OHHDRMetaData *metaData) | 设置NativeWindow的HDR静态元数据。 |
OH_NativeWindow_NativeWindowSetMetaDataSet(OHNativeWindow *window, uint32_t sequence, OHHDRMetadataKey key, int32_t size, const uint8_t *metaData) | 设置NativeWindow的HDR静态元数据集。 |
OH_NativeWindow_NativeWindowSetTunnelHandle(OHNativeWindow *window, const OHExtDataHandle *handle) | 设置NativeWindow的TunnelHandle。 |
详细的接口说明请参考NativeWindow。
开发步骤
以下步骤描述了在HarmonyOS中如何使用NativeWindow提供的NAPI接口,设置NativeWindow的相关属性。
- 获取NativeWindow实例。使用XComponent组件,可以获取到NativeWindow实例。XComponent的OnSurfaceCreated回调中携带了void*类型的window,可以通过如下方式转换为NativeWindow实例:
- 设置NativeWindowBuffer的属性。使用OH_NativeWindow_NativeWindowHandleOpt设置NativeWindowBuffer的属性。
OpenSL ES音频播放开发指导
简介
开发者可以通过本文档了解在HarmonyOS中如何使用OpenSL ES进行音频播放相关操作;当前仅实现了部分OpenSL ES接口,因此调用未实现接口后会返回SL_RESULT_FEATURE_UNSUPPORTED
开发指导
以下步骤描述了在HarmonyOS如何使用OpenSL ES开发音频播放功能:
- 添加头文件
- 使用slCreateEngine接口和获取engine实例
- 获取接口SL_IID_ENGINE的engineEngine实例
- 配置播放器信息,创建AudioPlayer
- 获取接口SL_IID_OH_BUFFERQUEUE的bufferQueueItf实例
- 打开音频文件,注册BufferQueueCallback回调
- 获取接口SL_PLAYSTATE_PLAYING的playItf实例,开始播放
- 结束音频播放
OpenSL ES音频录制开发指导
简介
开发者可以通过本文档了解在HarmonyOS中如何使用OpenSL ES进行录音相关操作;当前仅实现了部分OpenSL ES接口,因此调用未实现接口后会返回SL_RESULT_FEATURE_UNSUPPORTED。
开发指导
以下步骤描述了在HarmonyOS如何使用 OpenSL ES 开发音频录音功能:
- 添加头文件
- 使用slCreateEngine接口创建引擎对象和实例化引擎对象engine
- 获取接口SL_IID_ENGINE的引擎接口engineEngine实例
- 配置录音器信息(配置输入源audiosource、输出源audiosink),创建录音对象
pcmCapturerObject
- 获取录音接口SL_IID_RECORD的recordItf接口实例
- 获取接口SL_IID_OH_BUFFERQUEUE的bufferQueueItf实例
- 注册BufferQueueCallback回调
- 开始录音
- 结束录音
