From 5654035ace6dd93d839a3cecc03e1b57416c5734 Mon Sep 17 00:00:00 2001 From: lw19901203 Date: Thu, 7 Mar 2024 14:45:51 +0800 Subject: [PATCH 1/2] drawing 0228 Data uploading Signed-off-by: lw19901203 --- .../graphic/native_drawing/drawing_bitmap.h | 92 +++++++- .../graphic/native_drawing/drawing_brush.h | 35 ++- .../graphic/native_drawing/drawing_canvas.h | 154 +++++++++++- .../native_drawing/drawing_color_space.h | 84 +++++++ .../graphic/native_drawing/drawing_filter.h | 13 +- .../graphic/native_drawing/drawing_image.h | 25 ++ .../graphic/native_drawing/drawing_matrix.h | 173 ++++++++++++++ .../graphic/native_drawing/drawing_path.h | 221 +++++++++++++++++- .../graphic/native_drawing/drawing_pen.h | 35 ++- .../graphic/native_drawing/drawing_pixmap.h | 84 +++++++ .../graphic/native_drawing/drawing_rect.h | 136 ++++++++++- .../native_drawing/drawing_shader_effect.h | 19 +- .../graphic/native_drawing/drawing_typeface.h | 109 +++++++++ .../graphic/native_drawing/drawing_types.h | 34 ++- 14 files changed, 1204 insertions(+), 10 deletions(-) create mode 100644 zh-cn/native_sdk/graphic/native_drawing/drawing_color_space.h create mode 100644 zh-cn/native_sdk/graphic/native_drawing/drawing_pixmap.h diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_bitmap.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_bitmap.h index 04430456..890a58c8 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_bitmap.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_bitmap.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -139,6 +139,96 @@ uint32_t OH_Drawing_BitmapGetHeight(OH_Drawing_Bitmap*); */ void* OH_Drawing_BitmapGetPixels(OH_Drawing_Bitmap*); +/** + * @brief 获取图片信息。调用该接口后,传入的图片信息对象被填充。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Bitmap 指向位图对象的指针。 + * @param OH_Drawing_Image_Info 指向图片信息对象{@link OH_Drawing_Image_Info}的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_BitmapGetImageInfo(OH_Drawing_Bitmap*, OH_Drawing_Image_Info*); + +/** + * @brief 按照setInfo()中的规则将OH_Drawing_Image_Info设置为ImageInfo,并创建PixelRef + * 包含像素和行字节数。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Bitmap 指向位图对象的指针。 + * @param OH_Drawing_Image_Info 指向图片信息对象{@link OH_Drawing_Image_Info}的指针。 + * @param pixels 指向像素存储的地址,可以是nullptr。 + * @param rowBytes 像素行的大小或更大。 + * @param releaseProc 当可以删除像素时调用的函数;可以是nullptr。 + * @param context 调用方状态已传递给releaseProc;可以是nullptr。 + * @return 如果OH_Drawing_Image_Info成功设置为ImageInfo,则返回true。 + * @since 12 + * @version 1.0 + */ +bool OH_Drawing_BitmapInstallPixels(OH_Drawing_Bitmap*, const OH_Drawing_Image_Info*, void* pixels, + size_t rowBytes, void (*releaseProc)(void* addr, void* context), void* context); + +/** + * @brief 如果地址可用,则将位图像素地址、行字节和ImageInfo复制到像素映射对象,并返回true。 + * 如果像素地址不可用,则返回false并保持像素图不变。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Bitmap 指向位图对象的指针。 + * @param OH_Drawing_Pixmap 指向像素映射对象的指针。 + * @return 如果图像可以直接访问像素,则返回true。 + * @since 12 + * @version 1.0 + */ +bool OH_Drawing_BitmapPeekPixels(OH_Drawing_Bitmap*, OH_Drawing_Pixmap*); + +/** + * @brief 按照setInfo()中的规则将OH_Drawing_Image_Info设置为ImageInfo,并分配像素内存。 + * 如果无法设置ImageInfo或无法分配内存,则返回false并调用reset()。 + * 在大多数平台上,即使没有足够的内存来容纳像素,分配像素内存也可能成功; + * 在写入像素之前不会进行分配。实际行为取决于malloc()的平台实现。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Bitmap 指向位图对象的指针。 + * @param OH_Drawing_Image_Info 指向图片信息对象{@link OH_Drawing_Image_Info}的指针。 + * @return 如果分配了像素内存,则返回true。 + * @since 12 + * @version 1.0 + */ +bool OH_Drawing_BitmapTryAllocPixels(OH_Drawing_Bitmap*, const OH_Drawing_Image_Info*); + +/** + * @brief 将矩形像素从位图复制到dstPixels。复制开始于(srcX,srcY), + * 并且不超过位图(width()、height())。 + * dstInfo指定的宽度、高度、ColorType和AlphaType + * dstRowBytes指定了从一个目标行到下一个目的行的间隔。 + * 如果复制了像素,则返回true。如果出现以下情况,则返回false: + * - dstInfo 没有地址 + * - dstRowBytes 小于dstInfo.minRowBytes() + * - PixelRef 为nullptr + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Bitmap 指向位图对象的指针。 + * @param OH_Drawing_Image_Info 指向图片信息对象{@link OH_Drawing_Image_Info}的指针。 + * @param dstPixels 目标像素存储。 + * @param dstRowBytes 目标行长度。 + * @param srcX 绝对值小于width()的列索引。 + * @param srcY 绝对值小于height()的行索引。 + * @return 如果将像素复制到dstPixels,则返回true。 +*/ +bool OH_Drawing_BitmapReadPixels(OH_Drawing_Bitmap*, const OH_Drawing_Image_Info* dstInfo, + void* dstPixels, size_t dstRowBytes, int32_t srcX, int32_t srcY); + +/** + * @brief 返回像素阵列所需的存储空间大小。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Bitmap 指向位图对象的指针。 + * @return 返回像素缓冲区所需的内存大小。 + * @since 12 + * @version 1.0 + */ +size_t OH_Drawing_BitmapComputeByteSize(OH_Drawing_Bitmap*); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_brush.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_brush.h index c274b170..dadc7359 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_brush.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_brush.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -110,6 +110,18 @@ uint32_t OH_Drawing_BrushGetColor(const OH_Drawing_Brush*); */ void OH_Drawing_BrushSetColor(OH_Drawing_Brush*, uint32_t color); +/** + * @brief 用于设置画刷的颜色属性,颜色属性描述了画刷填充图形时使用的颜色。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Brush 指向画刷对象的指针。 + * @param OH_Drawing_Color4f 描述颜色的结构体变量。 + * @param OH_Drawing_ColorSpace 指向颜色空间对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_BrushSetColor4f(OH_Drawing_Brush*, OH_Drawing_Color4f*, OH_Drawing_ColorSpace*); + /** * @brief 获取画刷的透明度值。画刷在填充形状时透明通道会使用该值。 * @@ -154,6 +166,17 @@ void OH_Drawing_BrushSetShaderEffect(OH_Drawing_Brush*, OH_Drawing_ShaderEffect* */ void OH_Drawing_BrushSetFilter(OH_Drawing_Brush*, OH_Drawing_Filter*); +/** + * @brief 从画刷获取滤波器{@link OH_Drawing_Filter}。滤波器是一个容器,可以承载蒙版滤波器和颜色滤波器。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Brush 指向画刷对象的指针。 + * @param OH_Drawing_Filter 表示指向滤波器对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_BrushGetFilter(OH_Drawing_Brush*, OH_Drawing_Filter*); + /** * @brief 为画刷设置一个混合器,该混合器实现了指定的混合模式枚举。 * @@ -165,6 +188,16 @@ void OH_Drawing_BrushSetFilter(OH_Drawing_Brush*, OH_Drawing_Filter*); */ void OH_Drawing_BrushSetBlendMode(OH_Drawing_Brush*, OH_Drawing_BlendMode); +/** + * @brief 用于重置一个画刷对象。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Brush 指向画刷对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_BrushReset(OH_Drawing_Brush*); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_canvas.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_canvas.h index 74df1fbe..fecccbac 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_canvas.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_canvas.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. + * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -46,6 +46,19 @@ extern "C" { #endif +/** + * @brief 约束类型的枚举。 + * + * @since 12 + * @version 1.0 + */ +typedef enum { + /** 严格约束,源矩形区域必须完全包含在图像中 */ + STRICT_SRC_RECT_CONSTRAINT, + /** 快速约束,源矩形区域可以部分位于图像之外 */ + FAST_SRC_RECT_CONSTRAINT, +} OH_Drawing_SrcRectConstraint; + /** * @brief 用于创建一个画布对象。 * @@ -199,6 +212,62 @@ void OH_Drawing_CanvasDrawLine(OH_Drawing_Canvas*, float x1, float y1, float x2, */ void OH_Drawing_CanvasDrawPath(OH_Drawing_Canvas*, const OH_Drawing_Path*); +/** + * @brief 用于画一个背景. + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Canvas 指向画布对象的指针。 + * @param OH_Drawing_Brush 指向画刷对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_CanvasDrawBackground(OH_Drawing_Canvas*, const OH_Drawing_Brush*); + +/** + * @brief 用于画一块区域. + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Canvas 指向画布对象的指针。 + * @param OH_Drawing_Region 指向区域对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_CanvasDrawRegion(OH_Drawing_Canvas*, const OH_Drawing_Region*); + +/** + * @brief 绘制数组点的方式的枚举。 + * + * @since 12 + * @version 1.0 + */ +typedef enum { + /** + * 分别绘制每个点。 + */ + POINTS_POINTMODE, + /** + * 将每对点绘制为线段。 + */ + LINES_POINTMODE, + /** + * 将点阵列绘制为开放多边形。 + */ + POLYGON_POINTMODE, +} OH_Drawing_PointMode; + +/** + * @brief 用于画多个点. + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Canvas 指向画布对象的指针。 + * @param mode 绘制数组点的方式。 + * @param count 点的数量。 + * @param OH_Drawing_Point2D 指向多个点的数组。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_CanvasDrawPoints(OH_Drawing_Canvas*, OH_Drawing_PointMode mode, uint32_t count, const OH_Drawing_Point2D*); + /** * @brief 用于画一个位图,位图又称为点阵图像、像素图或栅格图像,是由像素(图片元素)的单个点组成。 * @@ -239,6 +308,32 @@ void OH_Drawing_CanvasDrawBitmapRect(OH_Drawing_Canvas*, const OH_Drawing_Bitmap */ void OH_Drawing_CanvasSetMatrix(OH_Drawing_Canvas*, OH_Drawing_Matrix*); +/** + * @brief 重置画布的矩阵状态。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Canvas 指向画布对象{@link OH_Drawing_Canvas}的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_CanvasResetMatrix(OH_Drawing_Canvas*); + +/** + * @brief 将图片绘制到画布的指定区域上。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Canvas 指向画布对象{@link OH_Drawing_Canvas}的指针。 + * @param OH_Drawing_Image 指向图片对象{@link OH_Drawing_Image}的指针。 + * @param src 指向矩形对象{@link OH_Drawing_Rect}的指针。 + * @param dst 指向矩形对象{@link OH_Drawing_Rect}的指针。 + * @param OH_Drawing_SamplingOptions 指向采样选项对象{@link OH_Drawing_SamplingOptions}的指针。 + * @param OH_Drawing_SrcRectConstraint 约束类型,支持可选的具体类型可见{@Link OH_Drawing_SrcRectConstraint}枚举。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_CanvasDrawImageRectWithSrc(OH_Drawing_Canvas*, OH_Drawing_Image*, + OH_Drawing_Rect* src, OH_Drawing_Rect* dst, OH_Drawing_SamplingOptions*, OH_Drawing_SrcRectConstraint); + /** * @brief 将图片绘制到画布的指定区域上。 * @@ -253,6 +348,51 @@ void OH_Drawing_CanvasSetMatrix(OH_Drawing_Canvas*, OH_Drawing_Matrix*); void OH_Drawing_CanvasDrawImageRect(OH_Drawing_Canvas*, OH_Drawing_Image*, OH_Drawing_Rect* dst, OH_Drawing_SamplingOptions*); +/** + * @brief 绘制顶点描述的三角网格的枚举。 + * + * @since 12 + * @version 1.0 + */ +typedef enum{ + /** + * 顶点是一个三角形列表。 + */ + VERTEX_MODE_TRIANGLES, + /** + * 顶点是一个三角形带。 + */ + VERTEX_MODE_TRIANGLESSTRIP, + /** + * 顶点是一个三角形扇形。 + */ + VERTEX_MODE_TRIANGLEFAN, + /** + * 最后一个枚举方式,默认为三角形扇形。 + */ + VERTEX_MODE_LAST = VERTEX_MODE_TRIANGLEFAN, +} OH_Drawing_VertexMode; + +/** + * @brief 用于画顶点描述的三角网格。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Canvas 指向画布对象的指针。 + * @param vertexMmode 绘制顶点的枚举方式。 + * @param vertexCount 顶点数组元素的数量。 + * @param positions 定位数据数组。 + * @param texs 纹理坐标数据数组。 + * @param colors 颜色数据指针。 + * @param indexCount 索引数量。 + * @param indices 索引数据指针。 + * @param mode 混合模式枚举。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_CanvasDrawVertices(OH_Drawing_Canvas*, OH_Drawing_VertexMode vertexMmode, + int32_t vertexCount, const OH_Drawing_Point2D* positions, const OH_Drawing_Point2D* texs, uint32_t* colors, + int32_t indexCount, uint16_t* indices, OH_Drawing_BlendMode mode); + /** * @brief 从画布中拷贝像素数据到指定地址。该接口不可用于录制类型画布。 * @@ -437,6 +577,18 @@ void OH_Drawing_CanvasTranslate(OH_Drawing_Canvas*, float dx, float dy); */ void OH_Drawing_CanvasScale(OH_Drawing_Canvas*, float sx, float sy); +/** + * @brief 用于画布倾斜变换。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Canvas 指向画布对象的指针。 + * @param sx 水平方向倾斜的比例。 + * @param sy 垂直方向倾斜的比例。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_CanvasShear(OH_Drawing_Canvas*, float sx, float sy); + /** * @brief 用于使用指定颜色去清空画布。 * diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_color_space.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_color_space.h new file mode 100644 index 00000000..73c22b47 --- /dev/null +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_color_space.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef C_INCLUDE_DRAWING_COLOR_SPACE_H +#define C_INCLUDE_DRAWING_COLOR_SPACE_H + +/** + * @addtogroup Drawing + * @{ + * + * @brief Drawing模块提供包括2D图形渲染、文字绘制和图片显示等功能函数。 + * 本模块不提供像素单位,和应用上下文环境保持一致。如果处于ArkUI开发环境中,采用框架默认像素单位vp。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * + * @since 12 + * @version 1.0 + */ + +/** + * @file drawing_color_space.h + * + * @brief 文件中定义了与颜色空间相关的功能函数。 + * + * 引用文件"native_drawing/drawing_color_space.h" + * @library libnative_drawing.so + * @since 12 + * @version 1.0 + */ + +#include "drawing_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 创建一个标准SRGB颜色空间。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @return 函数返回一个指针,指针指向创建的颜色空间对象{@link OH_Drawing_ColorSpace}。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_ColorSpace* OH_Drawing_ColorSpaceCreateSRGB(); + +/** + * @brief 创建一个Gamma 1.0空间上的SRGB颜色空间。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @return 函数返回一个指针,指针指向创建的颜色空间对象{@link OH_Drawing_ColorSpace}。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_ColorSpace* OH_Drawing_ColorSpaceCreateSRGBLinear(); + +/** + * @brief 销毁颜色空间对象并回收该对象占有内存。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_ColorSpace 指向颜色空间对象{@link OH_Drawing_ColorSpace}的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_ColorSpaceDestroy(OH_Drawing_ColorSpace*); + + +#ifdef __cplusplus +} +#endif +/** @} */ +#endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_filter.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_filter.h index 2d98207c..7df89a2e 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_filter.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_filter.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -78,6 +78,17 @@ void OH_Drawing_FilterSetMaskFilter(OH_Drawing_Filter*, OH_Drawing_MaskFilter*); */ void OH_Drawing_FilterSetColorFilter(OH_Drawing_Filter*, OH_Drawing_ColorFilter*); +/** + * @brief 从滤波器对象获取颜色滤波器对象。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Filter 指示指向滤波器对象的指针。 + * @param OH_Drawing_ColorFilter 指示指向颜色滤波器对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_FilterGetColorFilter(OH_Drawing_Filter*, OH_Drawing_ColorFilter*); + /** * @brief 销毁滤波器对象,并收回该对象占用的内存。 * diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_image.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_image.h index 3f1e1c05..48caa148 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_image.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_image.h @@ -113,6 +113,31 @@ int32_t OH_Drawing_ImageGetHeight(OH_Drawing_Image*); */ void OH_Drawing_ImageGetImageInfo(OH_Drawing_Image*, OH_Drawing_Image_Info*); +/** + * @brief 获取图片不透明度属性。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Image 指向图片对象{@link OH_Drawing_Image}的指针。 + * @return 如果图片是不透明的,返回true。 + * @since 12 + * @version 1.0 + */ +bool OH_Drawing_ImageIsOpaque(const OH_Drawing_Image*); + +/** + * @brief 使用像素映射对象创建一个图片对象。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param pixmap 指向像素映射对象的指针。 + * @param rasterReleaseProc 当像素映射对象可被释放时,会调用此回调函数,可以为空。 + * @param releaseContext 当调用回调函数时会传入此参数,可以为空指针。 + * @return 函数返回一个指针,指针指向创建的图片对象{@link OH_Drawing_Image}。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_Image* OH_Drawing_ImageCreateFromRaster(OH_Drawing_Pixmap* pixmap, + void (*rasterReleaseProc)(const void* pixmap, void* releaseContext), void* releaseContext); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_matrix.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_matrix.h index 9efd7f8f..e65e6384 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_matrix.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_matrix.h @@ -117,6 +117,125 @@ OH_Drawing_Matrix* OH_Drawing_MatrixCreateTranslation(float dx, float dy); void OH_Drawing_MatrixSetMatrix(OH_Drawing_Matrix*, float scaleX, float skewX, float transX, float skewY, float scaleY, float transY, float persp0, float persp1, float persp2); +/** + * @brief 缩放枚举方式。 + * + * @since 12 + * @version 1.0 + */ +typedef enum { + /** + * 按x轴和轴缩放以填充目标Rect。 + */ + SCALE_TO_FIT_FILL, + /** + * 缩放并对齐到左侧和顶部。 + */ + SCALE_TO_FIT_START, + /** + * 缩放并居中对齐。 + */ + SCALE_TO_FIT_CENTER, + /** + * 缩放并向右和向下对齐。 + */ + SCALE_TO_FIT_END, +} OH_Drawing_ScaleToFit; + +/** + * @brief 将矩阵设置为缩放src Rect并将其转换为dst Rect。stf选择映射是完全填充dst还是保留纵横比, + * 以及如何在dst中对齐src。如果src为空,则返回false,并将Matrix设置为单位矩阵。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Matrix 指向矩阵对象{@link OH_Drawing_Matrix}的指针。 + * @param src 指向映射源的{@link OH_Drawing_Rect}对象Rect的指针。 + * @param dst 指向要映射到的{@link OH_Drawing_Rect}对象Rect的指针。 + * @param stf 缩放方式。 + * @return 如果dst为空,则为true,并将Matrix设置为: + * | 0 0 0 | + * | 0 0 0 | + * | 0 0 1 | + * @since 12 + * @version 1.0 + */ +bool OH_Drawing_MatrixSetRectToRect(OH_Drawing_Matrix*, const OH_Drawing_Rect* src, + const OH_Drawing_Rect* dst, OH_Drawing_ScaleToFit stf); + +/** + * @brief 将矩阵设置为矩阵乘以围绕轴心点(px,py)按角度旋转构建的矩阵。 + * 例如给定的矩阵: + * + * | A B C | | c -s dx | + * Matrix = | D E F |, R(degrees, px, py) = | s c dy | + * | G H I | | 0 0 1 | + * + * 条件为: + * + * c = cos(degrees) + * s = sin(degrees) + * dx = s * py + (1 - c) * px + * dy = -s * px + (1 - c) * py + * + * 设置的最终矩阵为: + * + * | A B C | | c -s dx | | Ac+Bs -As+Bc A*dx+B*dy+C | + * Matrix * R(degrees, px, py) = | D E F | | s c dy | = | Dc+Es -Ds+Ec D*dx+E*dy+F | + * | G H I | | 0 0 1 | | Gc+Hs -Gs+Hc G*dx+H*dy+I | + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Matrix 指向矩阵对象{@link OH_Drawing_Matrix}的指针。 + * @param degree 轴线相对于垂直轴线的角度。 + * @param px 在x轴上的位置旋转。 + * @param py 在y轴上的位置旋转。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_MatrixPreRotate(OH_Drawing_Matrix*, float degree, float px, float py); + +/** + * @brief 将矩阵设置为围绕轴心点(px,py)按度数旋转并乘以矩阵而构建的矩阵。 + * 例如给定的矩阵: + * + * | J K L | | c -s dx | + * Matrix = | M N O |, R(degrees, px, py) = | s c dy | + * | P Q R | | 0 0 1 | + * + * 条件为: + * + * c = cos(degrees) + * s = sin(degrees) + * dx = s * py + (1 - c) * px + * dy = -s * px + (1 - c) * py + * + * 设置的最终的矩阵为: + * + * |c -s dx| |J K L| |cJ-sM+dx*P cK-sN+dx*Q cL-sO+dx+R| + * R(degrees, px, py) * Matrix = |s c dy| |M N O| = |sJ+cM+dy*P sK+cN+dy*Q sL+cO+dy*R| + * |0 0 1| |P Q R| | P Q R| + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Matrix 指向矩阵对象{@link OH_Drawing_Matrix}的指针。 + * @param degree 轴线相对于垂直轴线的角度。 + * @param px 在x轴上的位置旋转。 + * @param py 在y轴上的位置旋转。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_MatrixPostRotate(OH_Drawing_Matrix*, float degree, float px, float py); + +/** + * @brief 重设矩阵为: + * | 1 0 0 | + * | 0 1 0 | + * | 0 0 1 | + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Matrix 指向矩阵对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_MatrixReset(OH_Drawing_Matrix*); + /** * @brief 将矩阵total设置为矩阵a乘以矩阵b。 * 例如给定矩阵a和矩阵b如下所示: @@ -236,6 +355,60 @@ bool OH_Drawing_MatrixIsIdentity(OH_Drawing_Matrix*); */ void OH_Drawing_MatrixDestroy(OH_Drawing_Matrix*); +/** + * @brief 将矩阵设置为围绕(sx,sy)处的轴心点按sx和sy向前缩放。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Matrix 指向字体对象的指针。 + * @param sx 水平缩放因子。 + * @param sy 垂直缩放因子。 + * @param px x轴上坐标点。 + * @param py y轴上坐标点。 + * @return 函数返回一个指针,指针指向缩放的矩阵对象{@link OH_Drawing_Matrix}。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_Matrix* OH_Drawing_MatrixPreScale(OH_Drawing_Matrix*, float sx, float sy,float px, float py); + +/** + * @brief 设置正向矩阵以通过(dx,dy)进行平移。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Matrix 指向字体对象的指针。 + * @param sx 水平缩放因子。 + * @param sy 垂直缩放因子。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_MatrixPreTranslate(OH_Drawing_Matrix*, float dx, float dy); + +/** + * @brief 将矩阵设置为围绕(px,py)处的轴心点向后缩放sx和sy。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Matrix 指向字体对象的指针。 + * @param sx 水平缩放因子。 + * @param sy 垂直缩放因子 + * @param px x轴上坐标点。 + * @param py y轴上坐标点。 + * @return 函数返回一个指针,指针指向缩放的矩阵对象{@link OH_Drawing_Matrix}。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_Matrix* OH_Drawing_MatrixPostScale(OH_Drawing_Matrix*, float sx, float sy, float px, float py); + +/** + * @brief 设置向后矩阵以通过(dx,dy)进行平移。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Matrix 指向字体对象的指针。 + * @param dx 表示水平平移。 + * @param dy 表示垂直平移。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_MatrixPostTranslate(OH_Drawing_Matrix*, float dx, float dy); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_path.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_path.h index 63f320cc..46421beb 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_path.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_path.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -59,6 +59,19 @@ typedef enum OH_Drawing_PathDirection { PATH_DIRECTION_CCW, } OH_Drawing_PathDirection; +/** + * @brief 是否应用透视裁剪。 + * + * @since 12 + * @version 1.0 + */ +typedef enum OH_Drawing_PathApplyPerspectiveClip { + /** 在应用(透视)矩阵之前,不要预剪裁几何体 */ + PATH_APPLY_PERSPECTIVEClIP_NO, + /** 在应用(透视)矩阵之前,请先预剪裁几何体 */ + PATH_APPLY_PERSPECTIVEClIP_YES, +} OH_Drawing_PathApplyPerspectiveClip; + /** * @brief 定义路径的填充类型枚举。 * @@ -76,6 +89,19 @@ typedef enum OH_Drawing_PathFillType { PATH_FILL_TYPE_INVERSE_EVEN_ODD, } OH_Drawing_PathFillType; +/** + * @brief 用于路径的添加模式。 + * + * @since 12 + * @version 1.0 + */ +typedef enum { + /** 未更改的附加到目的地 */ + PATH_ADD_MODE_APPEND, + /** 如果轮廓不闭合,则添加线 */ + PATH_ADD_MODE_EXTEND, +} OH_Drawing_PathAddMode; + /** * @brief 用于创建一个路径对象。 * @@ -162,6 +188,21 @@ void OH_Drawing_PathArcTo(OH_Drawing_Path*, float x1, float y1, float x2, float */ void OH_Drawing_PathQuadTo(OH_Drawing_Path*, float ctrlX, float ctrlY, float endX, float endY); +/** + * @brief 用于添加一条从路径最后点位置到目标点位置的圆锥贝塞尔曲线。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向路径对象的指针。 + * @param ctrlX 控制点位置的横坐标。 + * @param ctrlY 控制点位置的横坐标。 + * @param endX 目标点位置的横坐标。 + * @param endY 目标点位置的横坐标。 + * @param weight 添加的曲线的权重。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathConicTo(OH_Drawing_Path*, float ctrlX, float ctrlY, float endX, float endY, float weight); + /** * @brief 用于添加一条从路径最后点位置到目标点位置的三阶贝塞尔圆滑曲线。 * @@ -179,6 +220,76 @@ void OH_Drawing_PathQuadTo(OH_Drawing_Path*, float ctrlX, float ctrlY, float end void OH_Drawing_PathCubicTo( OH_Drawing_Path*, float ctrlX1, float ctrlY1, float ctrlX2, float ctrlY2, float endX, float endY); +/** + * @brief 用于设置自定义路径的相对起始点位置。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向路径对象的指针。 + * @param x 相对起始点的横坐标。 + * @param y 相对起始点的纵坐标。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathRMoveTo(OH_Drawing_Path*, float x, float y); + +/** + * @brief 用于添加一条从路径的最后点位置到相对目标点位置的线段。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向路径对象的指针。 + * @param x 相对目标点的横坐标。 + * @param y 相对目标点的纵坐标。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathRLineTo(OH_Drawing_Path*, float x, float y); + +/** + * @brief 用于添加一条从路径最后点位置到相对目标点位置的二阶贝塞尔圆滑曲线。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向路径对象的指针。 + * @param ctrlX 相对控制点位置的横坐标。 + * @param ctrlY 相对控制点位置的纵坐标。 + * @param endX 相对目标点位置的横坐标。 + * @param endY 相对目标点位置的纵坐标。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathRQuadTo(OH_Drawing_Path*, float ctrlX, float ctrlY, float endX, float endY); + +/** + * @brief 用于添加一条从路径最后点位置到相对目标点位置的圆锥贝塞尔曲线。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向路径对象的指针。 + * @param ctrlX 相对控制点位置的横坐标。 + * @param ctrlY 相对控制点位置的横坐标。 + * @param endX 相对目标点位置的横坐标。 + * @param endY 相对目标点位置的横坐标。 + * @param weight 添加的曲线的权重。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathRConicTo(OH_Drawing_Path*, float ctrlX, float ctrlY, float endX, float endY, float weight); + +/** + * @brief 用于添加一条从路径最后点位置到相对目标点位置的三阶贝塞尔圆滑曲线。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向路径对象的指针。 + * @param ctrlX1 第一个相对控制点位置的横坐标。 + * @param ctrlY1 第一个相对控制点位置的纵坐标。 + * @param ctrlX2 第二个相对控制点位置的横坐标。 + * @param ctrlY2 第二个相对控制点位置的纵坐标。 + * @param endX 相对目标点位置的横坐标。 + * @param endY 相对目标点位置的纵坐标。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathRCubicTo( + OH_Drawing_Path*, float ctrlX1, float ctrlY1, float ctrlX2, float ctrlY2, float endX, float endY); + /** * @brief 按指定方向,向路径添加矩形轮廓。 * @@ -195,6 +306,19 @@ void OH_Drawing_PathCubicTo( void OH_Drawing_PathAddRect(OH_Drawing_Path*, float left, float top, float right, float bottom, OH_Drawing_PathDirection); +/** + * @brief 按指定方向,向路径添加矩形轮廓。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向路径对象的指针。 + * @param OH_Drawing_Rect 指向矩形对象的指针。 + * @param OH_Drawing_PathDirection 路径方向。 + * @param start 矩形要添加的初始角。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathAddRectWithInitialCorner(OH_Drawing_Path*, OH_Drawing_Rect*, OH_Drawing_PathDirection, unsigned start); + /** * @brief 按指定方向,向路径添加圆角矩形轮廓。 * @@ -207,6 +331,20 @@ void OH_Drawing_PathAddRect(OH_Drawing_Path*, float left, float top, */ void OH_Drawing_PathAddRoundRect(OH_Drawing_Path*, const OH_Drawing_RoundRect* roundRect, OH_Drawing_PathDirection); +/** + * @brief 用于绘制椭圆形,其中Rect作为椭圆的外切矩形区域,Direction用来指定绘制时是顺时针或者逆时针方向。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 表示路径对象的指针。 + * @param OH_Drawing_Rect 表示矩形对象的指针。 + * @param start 表示椭圆初始点的索引。 + * @param OH_Drawing_PathDirection 表示绘制方向。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathAddOvalWithInitialPoint(OH_Drawing_Path*, const OH_Drawing_Rect*, + unsigned start, OH_Drawing_PathDirection); + /** * @brief 将弧添加到路径中,作为新轮廓的起点。从起始角度到扫掠角度添加弧, * 添加的弧是椭圆边界椭圆的一部分,单位为度。正扫掠表示按顺时针方向延长弧, @@ -235,6 +373,47 @@ void OH_Drawing_PathAddArc(OH_Drawing_Path*, const OH_Drawing_Rect*, float start */ void OH_Drawing_PathAddPath(OH_Drawing_Path*, const OH_Drawing_Path* src, const OH_Drawing_Matrix*); +/** + * @brief 将原路径矩阵变换后,以规定模式添加到当前路径中。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向当前路径对象的指针。 + * @param src 指向原路径对象的指针。 + * @param OH_Drawing_Matrix 指向矩阵对象的指针。 + * @param OH_Drawing_PathAddMode 路径添加模式{@link OH_Drawing_PathAddMode}。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathAddPathWithMatrixAndMode(OH_Drawing_Path*, const OH_Drawing_Path* src, + const OH_Drawing_Matrix*, OH_Drawing_PathAddMode); + +/** + * @brief 将原路径以规定模式添加到当前路径中。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向当前路径对象的指针。 + * @param src 指向原路径对象的指针。 + * @param OH_Drawing_PathAddMode 路径添加模式{@link OH_Drawing_PathAddMode}。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathAddPathWithMode(OH_Drawing_Path*, const OH_Drawing_Path* src, OH_Drawing_PathAddMode); + +/** + * @brief 将原路径偏移后,以规定模式添加到当前路径中。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向当前路径对象的指针。 + * @param src 指向原路径对象的指针。 + * @param dx 添加到目标路径横坐标的偏移量。 + * @param dy 添加到目标路径纵坐标的偏移量。 + * @param OH_Drawing_PathAddMode 路径添加模式{@link OH_Drawing_PathAddMode}。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathAddPathWithOffsetAndMode(OH_Drawing_Path*, const OH_Drawing_Path* src, + float dx, float dy, OH_Drawing_PathAddMode); + /** * @brief 判断指定坐标点是否被路径包含。 * @@ -259,6 +438,20 @@ bool OH_Drawing_PathContains(OH_Drawing_Path*, float x, float y); */ void OH_Drawing_PathTransform(OH_Drawing_Path*, const OH_Drawing_Matrix*); +/** + * @brief 对路径进行矩阵变换。待转换路径替换dst目标路径;如果dst为nullptr,则被原始数据路径替换。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param src 指向路径对象{@link OH_Drawing_Path}的指针。 + * @param OH_Drawing_Matrix 指向矩阵对象{@link OH_Drawing_Matrix}的指针。 + * @param dst 指向目标路径对象{@link OH_Drawing_Path}的指针。 + * @param OH_Drawing_PathApplyPerspectiveClip 表示是否应用透视裁剪{@link OH_Drawing_PathApplyPerspectiveClip}。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PathTransformWithPerspectiveClip(OH_Drawing_Path* src, const OH_Drawing_Matrix*, + OH_Drawing_Path* dst, OH_Drawing_PathApplyPerspectiveClip); + /** * @brief 设置填充路径的规则。 * @@ -270,7 +463,6 @@ void OH_Drawing_PathTransform(OH_Drawing_Path*, const OH_Drawing_Matrix*); */ void OH_Drawing_PathSetFillType(OH_Drawing_Path*, OH_Drawing_PathFillType); - /** * @brief 用于闭合路径,会添加一条从路径起点位置到最后点位置的线段。 * @@ -281,6 +473,19 @@ void OH_Drawing_PathSetFillType(OH_Drawing_Path*, OH_Drawing_PathFillType); */ void OH_Drawing_PathClose(OH_Drawing_Path*); +/** + * @brief 偏移当前路径取代目标路径。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向当前路径的指针。 + * @param dst 指向目标路径的指针。 + * @param dx 添加到目标路径横坐标的偏移量。 + * @param dy 添加到目标路径纵坐标的偏移量。 + * @since 8 + * @version 1.0 + */ +void OH_Drawing_PathOffset(OH_Drawing_Path*, OH_Drawing_Path* dst, float dx, float dy); + /** * @brief 用于重置自定义路径数据。 * @@ -291,6 +496,18 @@ void OH_Drawing_PathClose(OH_Drawing_Path*); */ void OH_Drawing_PathReset(OH_Drawing_Path*); +/** + * @brief 获取当前路径的长度。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Path 指向路径对象的指针。 + * @param 指示此调用后是否可以自由修改/删除路径。 + * @return 函数返回当前路径的长度。 + * @since 12 + * @version 1.0 + */ +float OH_Drawing_PathGetLength(OH_Drawing_Path*, bool forceClosed); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_pen.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_pen.h index 6825f461..c80e55ad 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_pen.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_pen.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -110,6 +110,18 @@ uint32_t OH_Drawing_PenGetColor(const OH_Drawing_Pen*); */ void OH_Drawing_PenSetColor(OH_Drawing_Pen*, uint32_t color); +/** + * @brief 用于设置画笔的颜色属性,颜色属性描述了画笔绘制图形轮廓时使用的颜色。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Pen 指向画笔对象的指针。 + * @param OH_Drawing_Color4f 指向描述颜色的结构体变量的指针。 + * @param OH_Drawing_ColorSpace 指向颜色空间对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PenSetColor4f(OH_Drawing_Pen*, OH_Drawing_Color4f*, OH_Drawing_ColorSpace*); + /** * @brief 获取画笔的透明度值。画笔在勾勒图形时透明通道会使用该值。 * @@ -284,6 +296,17 @@ void OH_Drawing_PenSetPathEffect(OH_Drawing_Pen*, OH_Drawing_PathEffect*); */ void OH_Drawing_PenSetFilter(OH_Drawing_Pen*, OH_Drawing_Filter*); +/** + * @brief 从画笔获取滤波器{@link OH_Drawing_Filter}。滤波器是一个容器,可以承载蒙版滤波器和颜色滤波器。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Pen 指向画笔对象{@link OH_Drawing_Pen}的指针。 + * @param OH_Drawing_Filter 指向滤波器{@link OH_Drawing_Filter}的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PenGetFilter(OH_Drawing_Pen*, OH_Drawing_Filter*); + /** * @brief 为画笔设置一个混合器,该混合器实现了指定的混合模式枚举。 * @@ -295,6 +318,16 @@ void OH_Drawing_PenSetFilter(OH_Drawing_Pen*, OH_Drawing_Filter*); */ void OH_Drawing_PenSetBlendMode(OH_Drawing_Pen*, OH_Drawing_BlendMode); +/** + * @brief 用于重置一个画笔对象。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Pen 指向画笔对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PenReset(OH_Drawing_Pen*); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_pixmap.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_pixmap.h new file mode 100644 index 00000000..fb45a510 --- /dev/null +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_pixmap.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef C_INCLUDE_DRAWING_PIXMAP_H +#define C_INCLUDE_DRAWING_PIXMAP_H + +/** + * @addtogroup Drawing + * @{ + * + * @brief Drawing模块提供包括2D图形渲染、文字绘制和图片显示等功能函数。 + * 本模块不提供像素单位,和应用上下文环境保持一致。如果处于ArkUI开发环境中,采用框架默认像素单位vp。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * + * @since 8 + * @version 1.0 + */ + +#include "drawing_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 用于创建一个像素映射对象。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @return 函数会返回一个指针,指针指向创建的像素映射对象。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_Pixmap* OH_Drawing_PixmapCreate(void); + +/** + * @brief 用于销毁像素映射对象并回收该对象占有内存。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Pixmap 指向像素映射对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_PixmapDestroy(OH_Drawing_Pixmap*); + +/** + * @brief 获得像素映射的宽度。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Pixmap 指向像素映射对象的指针。 + * @return 返回像素映射的宽度 + * @since 12 + * @version 1.0 + */ +uint32_t OH_Drawing_PixmapGetWidth(OH_Drawing_Pixmap*); + +/** + * @brief 获得像素映射的高度。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Pixmap 指向像素映射对象的指针。 + * @return 返回像素映射的高度。 + * @since 12 + * @version 1.0 + */ +uint32_t OH_Drawing_PixmapGetHeight(OH_Drawing_Pixmap*); + +#ifdef __cplusplus +} +#endif +/** @} */ +#endif \ No newline at end of file diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_rect.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_rect.h index 69015172..f5b7ca1a 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_rect.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_rect.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -70,6 +70,140 @@ OH_Drawing_Rect* OH_Drawing_RectCreate(float left, float top, float right, float */ void OH_Drawing_RectDestroy(OH_Drawing_Rect*); +/** + * @brief 用于获取矩形对象高度。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Rect 指向矩形对象的指针。 + * @return 返回矩形对象的高度。 + * @since 12 + * @version 1.0 + */ +float OH_Drawing_RectGetHeight(OH_Drawing_Rect*); + +/** + * @brief 用于获取矩形对象的宽度。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Rect 指向矩形对象的指针。 + * @return 返回矩形对象的宽度。 + * @since 12 + * @version 1.0 + */ +float OH_Drawing_RectGetWidth(OH_Drawing_Rect*); + +/** + * @brief 如果矩形other与矩形cRect相交,则返回真并将矩形cRect设置为该交集, + * 否则返回假且不更改矩形cRect。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param rect 指向矩形对象的指针。 + * @param other 指向矩形对象的指针。 + * @return 真表示这两个矩形相交,假表示不相交。 + * @since 12 + * @version 1.0 + */ +bool OH_Drawing_RectIntersect(OH_Drawing_Rect* rect, OH_Drawing_Rect* other); + +/** + * @brief 用于设置矩形左上角的横坐标。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param rect 指向矩形对象的指针。 + * @param left 矩形左上角的横坐标。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_RectSetLeft(OH_Drawing_Rect* rect, float left); + +/** + * @brief 用于设置矩形左上角的纵坐标。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param rect 指向矩形对象的指针。 + * @param top 矩形左上角的纵坐标。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_RectSetTop(OH_Drawing_Rect* rect, float top); + +/** + * @brief 用于设置矩形右下角的横坐标。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param rect 指向矩形对象的指针。 + * @param right 矩形右下角的横坐标。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_RectSetRight(OH_Drawing_Rect* rect, float right); + +/** + * @brief 用于设置矩形右下角的纵坐标。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param rect 指向矩形对象的指针。 + * @param bottom 矩形右下角的纵坐标。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_RectSetBottom(OH_Drawing_Rect* rect, float bottom); + +/** + * @brief 用于获取矩形左上角的横坐标。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Rect 指向矩形对象的指针。 + * @return 矩形左上角的横坐标。 + * @since 12 + * @version 1.0 + */ +float OH_Drawing_RectGetLeft(OH_Drawing_Rect*); + +/** + * @brief 用于获取矩形左上角的纵坐标。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Rect 指向矩形对象的指针。 + * @return 矩形左上角的纵坐标。 + * @since 12 + * @version 1.0 + */ +float OH_Drawing_RectGetTop(OH_Drawing_Rect*); + +/** + * @brief 用于获取矩形右下角的横坐标。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Rect 指向矩形对象的指针。 + * @return 矩形右下角的横坐标。 + * @since 12 + * @version 1.0 + */ +float OH_Drawing_RectGetRight(OH_Drawing_Rect*); + +/** + * @brief 用于获取矩形右下角的纵坐标。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Rect 指向矩形对象的指针。 + * @return 矩形右下角的纵坐标。 + * @since 12 + * @version 1.0 + */ +float OH_Drawing_RectGetBottom(OH_Drawing_Rect*); + +/** + * @brief 用于将原矩形对象复制到目的矩形对象。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param sRect 指向原矩形对象的指针。 + * @param dRect 指向目的矩形对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_RectCopy(OH_Drawing_Rect* sRect, OH_Drawing_Rect* dRect); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_shader_effect.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_shader_effect.h index 0cb06ff8..a5c09b97 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_shader_effect.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_shader_effect.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -122,6 +122,23 @@ OH_Drawing_ShaderEffect* OH_Drawing_ShaderEffectCreateRadialGradient(const OH_Dr OH_Drawing_ShaderEffect* OH_Drawing_ShaderEffectCreateSweepGradient(const OH_Drawing_Point* centerPt, const uint32_t* colors, const float* pos, uint32_t size, OH_Drawing_TileMode); +/** + * @brief 创建图像着色器。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Image 指向图片对象{@link OH_Drawing_Image}的指针。 + * @param tileX 水平方向着色器效果平铺模式类型,支持可选的具体模式可见{@Link OH_Drawing_TileMoe}枚举。 + * @param tileY 垂直方向着色器效果平铺模式类型,支持可选的具体模式可见{@Link OH_Drawing_TileMoe}枚举。 + * @param OH_Drawing_SamplingOptions 指向采样选项对象{@link OH_Drawing_SamplingOptions}的指针。 + * @param OH_Drawing_Matrix 指向矩阵对象{@link OH_Drawing_Matrix}的指针。 + * 如果matrix为空,默认为单位矩阵。 + * @return 返回创建的着色器对象的指针。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_ShaderEffect* OH_Drawing_ShaderEffectCreateImageShader(OH_Drawing_Image*, + OH_Drawing_TileMode tileX, OH_Drawing_TileMode tileY, OH_Drawing_SamplingOptions*, OH_Drawing_Matrix*); + /** * @brief 销毁着色器对象,并收回该对象占用的内存。 * diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_typeface.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_typeface.h index 52f06b13..aaa46e49 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_typeface.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_typeface.h @@ -92,6 +92,115 @@ OH_Drawing_Typeface* OH_Drawing_TypefaceCreateFromStream(OH_Drawing_MemoryStream */ void OH_Drawing_TypefaceDestroy(OH_Drawing_Typeface*); +/** + * @brief 创建一个OH_Drawing_FontMgr对象并返回该对象的指针,由开发者管理该指针的生命周期,通过 + * {@link OH_Drawing_FontMgrDestroy}接口释放。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @return 返回一个指向创建的OH_Drawing_FontMgr对象指针。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_FontMgr* OH_Drawing_FontMgrCreate(void); + +/** + * @brief 用于销毁OH_Drawing_FontMgr对象并回收该对象占有的内存。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_FontMgr 指向OH_Drawing_FontMgr对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_FontMgrDestroy(OH_Drawing_FontMgr*); + +/** + * @brief 获取指向给定字体样式集族名称的OH_Drawing_FontStyleSet对象的指针, + * 由用户管理该指针的生命周期,通过{@link OH_Drawing_FontStyleSetDestroy}接口释放。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_FontMgr 指向OH_Drawing_FontMgr对象的指针。 + * @param familyName 待匹配的字体样式集的族名称。 + * @return 返回指向已匹配OH_Drawing_FontStyleSet对象的指针, + * 如果待匹配的字体样式集的族名称为空指针,则返回默认字体样式集指针, + * 如果未匹配到该字体样式集族名称,则返回空指针。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_FontStyleSet* OH_Drawing_FontMgrMatchFamily(const OH_Drawing_FontMgr*, const char* familyName); + +/** + * @brief 根据给定的字体样式和字体族名称,获取指向OH_Drawing_Typeface对象的指针, + * 由开发者管理该指针的生命周期,通过{@link OH_Drawing_FontStyleSetDestroy}接口释放。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_FontMgr 指向OH_Drawing_FontMgr对象的指针。 + * @param familyName 待匹配的字体样式集的族名称。 + * @param fontStyle 指向待匹配OH_Drawing_TextFontStyle对象的指针。 + * @return 返回最接近字体样式的OH_Drawing_Typeface对象的指针, + * 如果待匹配的字体样式集的族名称为空指针,则返回默认字体样式设置的字体, + * 如果未匹配到该字体样式集族名称,则返回空指针。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_Typeface* OH_Drawing_FontMgrMatchFamilyStyle(const OH_Drawing_FontMgr*, const char* familyName, + const OH_Drawing_TextFontStyle* fontStyle); + +/** + * @brief 为给定字符获取指向OH_Drawing_Typeface对象的指针, + * 由开发者管理该指针的生命周期,通过{@link OH_Drawg_TypefaceDestroy}接口释放。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_FontMgr 指向OH_Drawing_FontMgr对象的指针。 + * @param familyName 待匹配的字体样式集的族名称。 + * @param fontStyle 指向待匹配OH_Drawing_TextFontStyle对象的指针。 + * @param bcp47 用来指示character语言编码数组,是ISO 639、15924和3166-1语言编码的组合。 + * @param bcp47Count 参数bcp47数组大小。 + * @param character 待匹配的UTF8字符值。 + * @return 返回匹配到的OH_Drawing_Typeface对象的指针, + * 如果待匹配的字体样式集的族名称为空指针,则返回默认字体样式设置的字体, + * 如果匹配不到给定字符的字体,则返回空指针。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_Typeface* OH_Drawing_FontMgrMatchFamilyStyleCharacter(const OH_Drawing_FontMgr*, const char familyName[], + const OH_Drawing_TextFontStyle* fontStyle, + const char* bcp47[], int bcp47Count, int32_t character); + +/** + * @brief 用于销毁OH_Drawing_FontStyleSet对象并回收该对象占有的内存。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_FontStyleSet 指向OH_Drawing_FontStyleSet对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_FontStyleSetDestroy(OH_Drawing_FontStyleSet*); + +/** + * @brief 创建OH_Drawing_TextFontStyle对象并返回该对象指针, + * 由开发者管理该指针生命周期,通过{@Link OH_Drawing_TextFontStyleDestroy}接口释放。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param weight 字重。 + * @param width 字宽。 + * @param OH_Drawing_FontStyleSlant 字体倾斜类型。 + * @return 返回指向创建的OH_Drawing_TextFontStyle对象的指针, 由开发者管理该指针的生命周期,通过 + * {@link OH_Drawing_TextFontStyleDestroy}接口释放。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_TextFontStyle* OH_Drawing_TextFontStyleCreate(uint32_t weight, uint32_t width, OH_Drawing_FontStyleSlant); + +/** + * @brief 用于销毁OH_Drawing_TextFontStyle对象并回收该对象占有的内存。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_TextFontStyle 指向OH_Drawing_TextFontStyle对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_TextFontStyleDestroy(OH_Drawing_TextFontStyle*); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_types.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_types.h index 695f8714..0b6a2dbe 100644 --- a/zh-cn/native_sdk/graphic/native_drawing/drawing_types.h +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_types.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -94,6 +94,14 @@ typedef struct OH_Drawing_Bitmap OH_Drawing_Bitmap; */ typedef struct OH_Drawing_Point OH_Drawing_Point; +/** + * @brief Defines a ColorSpace, which is used to determine how Quartz interprets color information. + * + * @since 12 + * @version 1.0 + */ +typedef struct OH_Drawing_ColorSpace OH_Drawing_ColorSpace; + /** * @brief 定义一个二维的坐标点。 * @@ -243,6 +251,14 @@ typedef struct OH_Drawing_SamplingOptions OH_Drawing_SamplingOptions; */ typedef struct OH_Drawing_TextBlobBuilder OH_Drawing_TextBlobBuilder; +/** + * @brief 用于描述位图映射。 + * + * @since 12 + * @version 1.0 + */ +typedef struct OH_Drawing_Rect OH_Drawing_Pixmap; + /** * @brief 用于描述位图像素的存储格式。 * @@ -401,6 +417,22 @@ typedef enum OH_Drawing_TextEncoding { TEXT_ENCODING_GLYPH_ID, } OH_Drawing_TextEncoding; +/** + * @brief 使用4个四个浮点数分量表示RGBA颜色,每个分量的值在0到1之间。 + * @since 12 + * @version 1.0 + */ +typedef struct OH_Drawing_Color4f { + /** 红色分量 */ + float red; + /** 绿色分量 */ + float green; + /** 蓝色分量 */ + float blue; + /** 透明度分量 */ + float alpha; +} OH_Drawing_Color4f; + #ifdef __cplusplus } #endif -- Gitee From cb60acff2a835e3255dc56729ee3690366f3acd6 Mon Sep 17 00:00:00 2001 From: wang_wei <1049829758@qq.com> Date: Mon, 11 Mar 2024 12:56:34 +0000 Subject: [PATCH 2/2] ww Signed-off-by: wang_wei <1049829758@qq.com> --- .../graphic/native_drawing/drawing_region.h | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 zh-cn/native_sdk/graphic/native_drawing/drawing_region.h diff --git a/zh-cn/native_sdk/graphic/native_drawing/drawing_region.h b/zh-cn/native_sdk/graphic/native_drawing/drawing_region.h new file mode 100644 index 00000000..19e500c5 --- /dev/null +++ b/zh-cn/native_sdk/graphic/native_drawing/drawing_region.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef C_INCLUDE_DRAWING_REGION_H +#define C_INCLUDE_DRAWING_REGION_H + +/** + * @addtogroup Drawing + * @{ + * + * @brief Drawing模块提供包括2D图形渲染、文字绘制和图片显示等功能函数。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * + * @since 12 + * @version 1.0 + */ + +/** + * @file drawing_region.h + * + * @brief 文件中定义了与区域相关的功能函数。 + * + * @since 12 + * @version 1.0 + */ + +#include "drawing_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 用于创建一个区域对象。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @return 函数会返回一个指针,指针指向创建的区域对象。 + * @since 12 + * @version 1.0 + */ +OH_Drawing_Region* OH_Drawing_RegionCreate(void); + +/** + * @brief 用于给区域对象设置一个矩形。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Region 指向区域对象的指针。 + * @param OH_Drawing_Rect 指向矩形对象的指针。 + * @return 函数返回区域对象是否设置矩形,返回真则设置了矩形,返回假则没有设置矩形。 + * @since 12 + * @version 1.0 + */ +bool OH_Drawing_RegionSetRect(OH_Drawing_Region* region, OH_Drawing_Rect* rect); + +/** + * @brief 用于销毁区域对象并回收该对象占有的内存。 + * + * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing + * @param OH_Drawing_Region 指向区域对象的指针。 + * @since 12 + * @version 1.0 + */ +void OH_Drawing_RegionDestroy(OH_Drawing_Region*); + +#ifdef __cplusplus +} +#endif +/** @} */ +#endif \ No newline at end of file -- Gitee