• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "drawing_image_filter.h"
17 
18 #include "drawing_canvas_utils.h"
19 #include "drawing_helper.h"
20 
21 #include "effect/image_filter.h"
22 #include "effect/image_filter_lazy.h"
23 
24 using namespace OHOS;
25 using namespace Rosen;
26 using namespace Drawing;
27 
CatsToRect(const OH_Drawing_Rect & cRect)28 static const Rect& CatsToRect(const OH_Drawing_Rect& cRect)
29 {
30     return reinterpret_cast<const Rect&>(cRect);
31 }
32 
OH_Drawing_ImageFilterCreateBlur(float sigmaX,float sigmaY,OH_Drawing_TileMode cTileMode,OH_Drawing_ImageFilter * input)33 OH_Drawing_ImageFilter* OH_Drawing_ImageFilterCreateBlur(float sigmaX, float sigmaY, OH_Drawing_TileMode cTileMode,
34     OH_Drawing_ImageFilter* input)
35 {
36     NativeHandle<ImageFilter>* inputHandle = nullptr;
37     if (input) {
38         inputHandle = Helper::CastTo<OH_Drawing_ImageFilter*, NativeHandle<ImageFilter>*>(input);
39     }
40     NativeHandle<ImageFilter>* imageFilterHandle = new NativeHandle<ImageFilter>;
41     imageFilterHandle->value = ImageFilterLazy::CreateBlur(sigmaX, sigmaY, static_cast<TileMode>(cTileMode),
42         inputHandle ? inputHandle->value : nullptr, ImageBlurType::GAUSS);
43     if (imageFilterHandle->value == nullptr) {
44         delete imageFilterHandle;
45         return nullptr;
46     }
47     return Helper::CastTo<NativeHandle<ImageFilter>*, OH_Drawing_ImageFilter*>(imageFilterHandle);
48 }
49 
OH_Drawing_ImageFilterCreateBlurWithCrop(float sigmaX,float sigmaY,OH_Drawing_TileMode cTileMode,OH_Drawing_ImageFilter * input,const OH_Drawing_Rect * rect)50 OH_Drawing_ImageFilter* OH_Drawing_ImageFilterCreateBlurWithCrop(float sigmaX, float sigmaY,
51     OH_Drawing_TileMode cTileMode, OH_Drawing_ImageFilter* input, const OH_Drawing_Rect* rect)
52 {
53     NativeHandle<ImageFilter>* inputHandle = nullptr;
54     if (input) {
55         inputHandle = Helper::CastTo<OH_Drawing_ImageFilter*, NativeHandle<ImageFilter>*>(input);
56     }
57     NativeHandle<ImageFilter>* imageFilterHandle = new NativeHandle<ImageFilter>;
58     if (rect == nullptr) {
59         imageFilterHandle->value = ImageFilterLazy::CreateBlur(sigmaX, sigmaY, static_cast<TileMode>(cTileMode),
60             inputHandle ? inputHandle->value : nullptr, ImageBlurType::GAUSS);
61     } else {
62         imageFilterHandle->value = ImageFilterLazy::CreateBlur(sigmaX, sigmaY, static_cast<TileMode>(cTileMode),
63             inputHandle ? inputHandle->value : nullptr, ImageBlurType::GAUSS, CatsToRect(*rect));
64     }
65 
66     if (imageFilterHandle->value == nullptr) {
67         delete imageFilterHandle;
68         return nullptr;
69     }
70     return Helper::CastTo<NativeHandle<ImageFilter>*, OH_Drawing_ImageFilter*>(imageFilterHandle);
71 }
72 
OH_Drawing_ImageFilterCreateFromColorFilter(OH_Drawing_ColorFilter * cf,OH_Drawing_ImageFilter * input)73 OH_Drawing_ImageFilter* OH_Drawing_ImageFilterCreateFromColorFilter(
74     OH_Drawing_ColorFilter* cf, OH_Drawing_ImageFilter* input)
75 {
76     if (cf == nullptr) {
77         g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
78         return nullptr;
79     }
80     NativeHandle<ColorFilter>* colorFilterHandle = Helper::CastTo<OH_Drawing_ColorFilter*,
81         NativeHandle<ColorFilter>*>(cf);
82     NativeHandle<ImageFilter>* inputHandle = nullptr;
83     if (input) {
84         inputHandle = Helper::CastTo<OH_Drawing_ImageFilter*, NativeHandle<ImageFilter>*>(input);
85     }
86     NativeHandle<ImageFilter>* imageFilterHandle = new NativeHandle<ImageFilter>;
87     imageFilterHandle->value = ImageFilterLazy::CreateColorFilter(colorFilterHandle->value,
88         inputHandle ? inputHandle->value : nullptr);
89     if (imageFilterHandle->value == nullptr) {
90         delete imageFilterHandle;
91         return nullptr;
92     }
93     return Helper::CastTo<NativeHandle<ImageFilter>*, OH_Drawing_ImageFilter*>(imageFilterHandle);
94 }
95 
OH_Drawing_ImageFilterCreateOffset(float x,float y,OH_Drawing_ImageFilter * imageFilter)96 OH_Drawing_ImageFilter* OH_Drawing_ImageFilterCreateOffset(float x, float y, OH_Drawing_ImageFilter* imageFilter)
97 {
98     NativeHandle<ImageFilter>* inputHandle = imageFilter ? Helper::CastTo<OH_Drawing_ImageFilter*,
99         NativeHandle<ImageFilter>*>(imageFilter) : nullptr;
100     NativeHandle<ImageFilter>* imageFilterHandle = new NativeHandle<ImageFilter>;
101     imageFilterHandle->value =
102         ImageFilterLazy::CreateOffset(x, y, inputHandle ? inputHandle->value : nullptr);
103     if (imageFilterHandle->value == nullptr) {
104         delete imageFilterHandle;
105         return nullptr;
106     }
107     return Helper::CastTo<NativeHandle<ImageFilter>*, OH_Drawing_ImageFilter*>(imageFilterHandle);
108 }
109 
OH_Drawing_ImageFilterCreateFromShaderEffect(OH_Drawing_ShaderEffect * shaderEffect)110 OH_Drawing_ImageFilter* OH_Drawing_ImageFilterCreateFromShaderEffect(OH_Drawing_ShaderEffect* shaderEffect)
111 {
112     if (shaderEffect == nullptr) {
113         return nullptr;
114     }
115     NativeHandle<ShaderEffect>* shaderFilterHandle =
116         Helper::CastTo<OH_Drawing_ShaderEffect*, NativeHandle<ShaderEffect>*>(shaderEffect);
117     if (shaderFilterHandle->value == nullptr) {
118         return nullptr;
119     }
120     NativeHandle<ImageFilter>* imageFilterHandle = new NativeHandle<ImageFilter>;
121     imageFilterHandle->value = ImageFilterLazy::CreateShader(shaderFilterHandle->value);
122     if (imageFilterHandle->value == nullptr) {
123         delete imageFilterHandle;
124         return nullptr;
125     }
126     return Helper::CastTo<NativeHandle<ImageFilter>*, OH_Drawing_ImageFilter*>(imageFilterHandle);
127 }
128 
OH_Drawing_ImageFilterDestroy(OH_Drawing_ImageFilter * cImageFilter)129 void OH_Drawing_ImageFilterDestroy(OH_Drawing_ImageFilter* cImageFilter)
130 {
131     if (!cImageFilter) {
132         return;
133     }
134     delete Helper::CastTo<OH_Drawing_ImageFilter*, NativeHandle<ImageFilter>*>(cImageFilter);
135 }
136