1 /*
2 * Copyright (c) 2024 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 "effect_filter.h"
17
18 #include "filter/filter.h"
19 #include "sk_image_chain.h"
20 #include "sk_image_filter_factory.h"
21
22 #include "utils/log.h"
23
24 using namespace OHOS;
25 using namespace Rosen;
26
CastToFilter(OH_Filter * filter)27 static Filter* CastToFilter(OH_Filter* filter)
28 {
29 return reinterpret_cast<Filter*>(filter);
30 }
31
CastToOH_Filter(Filter * filter)32 static OH_Filter* CastToOH_Filter(Filter* filter)
33 {
34 return reinterpret_cast<OH_Filter*>(filter);
35 }
36
OH_Filter_CreateEffect(OH_PixelmapNative * pixelmap,OH_Filter ** filter)37 EffectErrorCode OH_Filter_CreateEffect(OH_PixelmapNative* pixelmap, OH_Filter** filter)
38 {
39 if (!pixelmap || !filter) {
40 return EFFECT_BAD_PARAMETER;
41 }
42 *filter = CastToOH_Filter(new Filter(pixelmap->GetInnerPixelmap()));
43 if (*filter == nullptr) {
44 return EFFECT_BAD_PARAMETER;
45 }
46 return EFFECT_SUCCESS;
47 }
48
OH_Filter_Release(OH_Filter * filter)49 EffectErrorCode OH_Filter_Release(OH_Filter* filter)
50 {
51 if (filter == nullptr) {
52 return EFFECT_BAD_PARAMETER;
53 }
54 delete CastToFilter(filter);
55 return EFFECT_SUCCESS;
56 }
57
OH_Filter_Blur(OH_Filter * filter,float radius)58 EffectErrorCode OH_Filter_Blur(OH_Filter* filter, float radius)
59 {
60 if (!filter || !(CastToFilter(filter)->Blur(radius))) {
61 return EFFECT_BAD_PARAMETER;
62 }
63 return EFFECT_SUCCESS;
64 }
65
OH_Filter_BlurWithTileMode(OH_Filter * filter,float radius,EffectTileMode tileMode)66 EffectErrorCode OH_Filter_BlurWithTileMode(OH_Filter* filter, float radius, EffectTileMode tileMode)
67 {
68 SkTileMode skTileMode = static_cast<SkTileMode>(tileMode);
69 if (!filter || !(CastToFilter(filter)->Blur(radius, skTileMode))) {
70 return EFFECT_BAD_PARAMETER;
71 }
72 return EFFECT_SUCCESS;
73 }
74
OH_Filter_Brighten(OH_Filter * filter,float brightness)75 EffectErrorCode OH_Filter_Brighten(OH_Filter* filter, float brightness)
76 {
77 if (!filter || !(CastToFilter(filter)->Brightness(brightness))) {
78 return EFFECT_BAD_PARAMETER;
79 }
80 return EFFECT_SUCCESS;
81 }
82
OH_Filter_GrayScale(OH_Filter * filter)83 EffectErrorCode OH_Filter_GrayScale(OH_Filter* filter)
84 {
85 if (!filter || !(CastToFilter(filter)->Grayscale())) {
86 return EFFECT_BAD_PARAMETER;
87 }
88 return EFFECT_SUCCESS;
89 }
90
OH_Filter_Invert(OH_Filter * filter)91 EffectErrorCode OH_Filter_Invert(OH_Filter* filter)
92 {
93 if (!filter || !(CastToFilter(filter)->Invert())) {
94 return EFFECT_BAD_PARAMETER;
95 }
96 return EFFECT_SUCCESS;
97 }
98
OH_Filter_SetColorMatrix(OH_Filter * filter,OH_Filter_ColorMatrix * matrix)99 EffectErrorCode OH_Filter_SetColorMatrix(OH_Filter* filter, OH_Filter_ColorMatrix* matrix)
100 {
101 if (!filter || !matrix) {
102 return EFFECT_BAD_PARAMETER;
103 }
104 PixelColorMatrix colorMatrix;
105 for (size_t i = 0; i < colorMatrix.MATRIX_SIZE; i++) {
106 colorMatrix.val[i] = matrix->val[i];
107 }
108 if (!(CastToFilter(filter)->SetColorMatrix(colorMatrix))) {
109 return EFFECT_BAD_PARAMETER;
110 }
111 return EFFECT_SUCCESS;
112 }
113
OH_Filter_GetEffectPixelMap(OH_Filter * filter,OH_PixelmapNative ** pixelmap)114 EffectErrorCode OH_Filter_GetEffectPixelMap(OH_Filter* filter, OH_PixelmapNative** pixelmap)
115 {
116 if (!pixelmap || !filter) {
117 return EFFECT_BAD_PARAMETER;
118 }
119 *pixelmap = new OH_PixelmapNative(CastToFilter(filter)->GetPixelMap());
120 if (*pixelmap == nullptr) {
121 return EFFECT_BAD_PARAMETER;
122 }
123 return EFFECT_SUCCESS;
124 }