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 "imageEffect.h"
17
18 #include "napi/native_api.h"
19 #include "utils/common_utils.h"
20 #include "utils/pixelmap_helper.h"
21 #include <bits/alltypes.h>
22 #include <hilog/log.h>
23 #include <multimedia/image_effect/image_effect.h>
24 #include <multimedia/image_effect/image_effect_errors.h>
25 #include <multimedia/image_effect/image_effect_filter.h>
26 #include <multimedia/image_framework/image_pixel_map_mdk.h>
27 #include <multimedia/image_framework/image/picture_native.h>
28 #include <native_window/external_window.h>
29 #include <string>
30
31 #define MY_LOG_DOMAIN 0x0000
32 #define MY_LOG_TAG "ImageEffectNDK"
33 #define LOG(fmt, ...) (void)OH_LOG_Print(LOG_APP, LOG_DEBUG, MY_LOG_DOMAIN, MY_LOG_TAG, fmt, ##__VA_ARGS__)
34
35 #define OH_EFFECT_BRIGHTNESS_FILTER "Brightness"
36 #define OH_EFFECT_CONTRAST_FILTER "Contrast"
37 #define OH_EFFECT_CROP_FILTER "Crop"
38 #define KEY_FILTER_INTENSITY "FilterIntensity"
39 #define IMAGE_EFFECT_NAME "imageEdit"
40 #define CUSTOM_FILTER "CustomCrop"
41
42 #define CASE_INDEX_1 1
43 #define CASE_INDEX_2 2
44 #define CASE_INDEX_3 3
45 #define CASE_INDEX_4 4
46 #define CASE_INDEX_5 5
47 #define CASE_INDEX_6 6
48 #define CASE_INDEX_7 7
49 #define CASE_INDEX_8 8
50 #define CASE_INDEX_9 9
51 #define CASE_INDEX_10 10
52 #define CASE_INDEX_11 11
53
54 #define IMAGE_EFFECT_2 2
55 #define IMAGE_EFFECT_100 100
56 #define IMAGE_EFFECT_100F 100.f
57 #define IMAGE_EFFECT_50F 50.f
58 #define IMAGE_EFFECT_100D 100.0
59 #define IMAGE_EFFECT_1000 1000
60 #define IMAGE_EFFECT_1024 1024
61 #define IMAGE_EFFECT_1048576 1048576
62 #define IMAGE_EFFECT_1073741824 1073741824
63 #define IMAGE_EFFECT_1080 1080
64 #define IMAGE_EFFECT_4090 4090
65 #define IMAGE_EFFECT_5120 5120
66 #define IMAGE_EFFECT_CODE_401 401
67 #define IMAGE_EFFECT_1722514390000 1722514390000
68
69 const std::string g_jpgUri = std::string("file:///data/test/resource/image_effect_1k_test1.jpg");
70 static std::string imagePath;
71 static std::string outImagePath;
72
savePixelMapForPath(napi_env env,napi_callback_info info)73 napi_value savePixelMapForPath(napi_env env, napi_callback_info info)
74 {
75 napi_value result = nullptr;
76 napi_get_undefined(env, &result);
77 size_t argc = 1;
78 napi_value args[1] = {nullptr};
79 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
80 imagePath = CommonUtils::GetStringArgument(env, args[0]);
81 napi_value ret;
82 int status = -1;
83 if (imagePath.length() > 0) {
84 status = 0;
85 }
86 napi_create_int32(env, status, &ret);
87 return ret;
88 }
89
creatOutPixeMapForPath(napi_env env,napi_callback_info info)90 napi_value creatOutPixeMapForPath(napi_env env, napi_callback_info info)
91 {
92 napi_value result = nullptr;
93 napi_get_undefined(env, &result);
94 size_t argc = 1;
95 napi_value args[1] = {nullptr};
96 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
97 outImagePath = CommonUtils::GetStringArgument(env, args[0]);
98 napi_value ret;
99 int status = -1;
100 if (outImagePath.length() > 0) {
101 status = 0;
102 }
103 napi_create_int32(env, status, &ret);
104 return ret;
105 }
106
getFilterDelegate()107 ImageEffect_FilterDelegate getFilterDelegate()
108 {
109 ImageEffect_FilterDelegate filterDelegate = {
110 .setValue = [](OH_EffectFilter *filter, const char *key, const ImageEffect_Any *value) { return true; },
111 .render = [](OH_EffectFilter *filter, OH_EffectBufferInfo *info,
112 OH_EffectFilterDelegate_PushData pushData) { return true; },
113 .save = [](OH_EffectFilter *filter, char **info) { return true; },
114 .restore = [](const char *info) {
115 OH_EffectFilter *filter = OH_EffectFilter_Create(CUSTOM_FILTER);
116 return filter;
117 }
118 };
119 return filterDelegate;
120 }
121
122 /**---------------------------------------------- EffectFilterRender ------------------------------------------------**/
OHEffectFilterRender(napi_env env,napi_callback_info info)123 napi_value OHEffectFilterRender(napi_env env, napi_callback_info info)
124 {
125 size_t argc = 1;
126 napi_value args[1] = {nullptr};
127 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
128 int32_t index;
129 napi_get_value_int32(env, args[0], &index);
130 std::shared_ptr<OH_PixelmapNative> pixelmapNativePtr = PixelMapHelper::Decode(imagePath);
131 OH_PixelmapNative *inputPixelmap = pixelmapNativePtr.get();
132 OH_PixelmapNative *outputPixelmap = inputPixelmap;
133 ImageEffect_FilterDelegate filterDelegate = getFilterDelegate();
134 // 创建 OH_EffectFilterInfo 实例
135 OH_EffectFilterInfo *customFilterInfo = OH_EffectFilterInfo_Create();
136 // 设置自定义滤镜滤镜名
137 OH_EffectFilterInfo_SetFilterName(customFilterInfo, CUSTOM_FILTER);
138 // 设置自定义滤镜所支持的内存类型
139 ImageEffect_BufferType bufferTypeArray[] = {ImageEffect_BufferType::EFFECT_BUFFER_TYPE_PIXEL};
140 OH_EffectFilterInfo_SetSupportedBufferTypes(
141 customFilterInfo, sizeof(bufferTypeArray) / sizeof(ImageEffect_BufferType), bufferTypeArray);
142 // 设置自定义滤镜所支持的像素格式
143 ImageEffect_Format formatArray[] = {ImageEffect_Format::EFFECT_PIXEL_FORMAT_RGBA8888};
144 OH_EffectFilterInfo_SetSupportedFormats(customFilterInfo, sizeof(formatArray) / sizeof(ImageEffect_Format),
145 formatArray);
146 // 注册自定义滤镜
147 ImageEffect_ErrorCode errorCode = OH_EffectFilter_Register(customFilterInfo, &filterDelegate);
148 // 创建滤镜。比如:创建对比度效果器
149 OH_EffectFilter *filter = OH_EffectFilter_Create(CUSTOM_FILTER);
150
151 std::shared_ptr<OH_PixelmapNative> outPixePtr = PixelMapHelper::Decode(outImagePath);
152
153 // 生效滤镜效果
154 switch (index) {
155 case CASE_INDEX_1:
156 outputPixelmap = nullptr;
157 break;
158 case CASE_INDEX_2:
159 outputPixelmap = inputPixelmap;
160 break;
161 case CASE_INDEX_3:
162 outputPixelmap = outPixePtr.get();
163 break;
164 default:
165 break;
166 }
167 errorCode = OH_EffectFilter_Render(filter, inputPixelmap, outputPixelmap);
168 OH_EffectFilter_Release(filter);
169 napi_value ret;
170 napi_create_int32(env, errorCode, &ret);
171 return ret;
172 }
173
174 /**-------------------------------------------------- Effect -------------------------------------------------------**/
OHImageEffectCreate(napi_env env,napi_callback_info info)175 napi_value OHImageEffectCreate(napi_env env, napi_callback_info info)
176 {
177 size_t argc = 1;
178 napi_value args[1] = {nullptr};
179 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
180 int32_t index;
181 napi_get_value_int32(env, args[0], &index);
182
183 OH_ImageEffect *imageEffect = nullptr;
184 switch (index) {
185 case CASE_INDEX_1:
186 imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
187 break;
188 case CASE_INDEX_2:
189 imageEffect = OH_ImageEffect_Create(nullptr);
190 break;
191 default:
192 break;
193 }
194
195 int code = IMAGE_EFFECT_CODE_401;
196 if (imageEffect != nullptr) {
197 OH_ImageEffect_Release(imageEffect);
198 code = 0;
199 }
200 napi_value ret;
201 napi_create_int32(env, code, &ret);
202 return ret;
203 }
204
OHImageEffectConfigure(napi_env env,napi_callback_info info)205 napi_value OHImageEffectConfigure(napi_env env, napi_callback_info info)
206 {
207 size_t argc = 1;
208 napi_value args[1] = {nullptr};
209 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
210 int32_t index;
211 napi_get_value_int32(env, args[0], &index);
212
213 OH_ImageEffect *imageEffect = nullptr;
214 const char *key = nullptr;
215 ImageEffect_Any value;
216 switch (index) {
217 case CASE_INDEX_1:
218 imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
219 key = "runningType";
220 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
221 value.dataValue.int32Value = IMAGE_EFFECT_2;
222 break;
223 case CASE_INDEX_2:
224 key = "runningType";
225 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
226 value.dataValue.floatValue = IMAGE_EFFECT_100F;
227 imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
228 break;
229 case CASE_INDEX_3:
230 imageEffect = nullptr;
231 key = "runningType";
232 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
233 value.dataValue.floatValue = IMAGE_EFFECT_100F;
234 break;
235 case CASE_INDEX_4:
236 imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
237 key = nullptr;
238 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
239 value.dataValue.floatValue = IMAGE_EFFECT_100F;
240 break;
241 case CASE_INDEX_5:
242 imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
243 key = nullptr;
244 default:
245 break;
246 }
247 ImageEffect_ErrorCode code = OH_ImageEffect_Configure(imageEffect, key, &value);
248 OH_ImageEffect_Release(imageEffect);
249
250 napi_value ret;
251 napi_create_int32(env, code, &ret);
252 return ret;
253 }
254
OHImageEffectAddFilter(napi_env env,napi_callback_info info)255 napi_value OHImageEffectAddFilter(napi_env env, napi_callback_info info)
256 {
257 size_t argc = 1;
258 napi_value args[1] = {nullptr};
259 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
260 int32_t index;
261 napi_get_value_int32(env, args[0], &index);
262
263 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
264 OH_EffectFilter *filter = nullptr;
265 switch (index) {
266 case CASE_INDEX_1:
267 filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
268 break;
269 case CASE_INDEX_2:
270 filter = OH_ImageEffect_AddFilter(nullptr, OH_EFFECT_BRIGHTNESS_FILTER);
271 break;
272 case CASE_INDEX_3:
273 filter = OH_ImageEffect_AddFilter(imageEffect, nullptr);
274 break;
275 default:
276 break;
277 }
278 OH_ImageEffect_Release(imageEffect);
279
280 int code = IMAGE_EFFECT_CODE_401;
281 if (filter != nullptr) {
282 code = 0;
283 }
284 napi_value ret;
285 napi_create_int32(env, code, &ret);
286 return ret;
287 }
288
OHImageEffectAddFilterByFilter(napi_env env,napi_callback_info info)289 napi_value OHImageEffectAddFilterByFilter(napi_env env, napi_callback_info info)
290 {
291 size_t argc = 1;
292 napi_value args[1] = {nullptr};
293 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
294 int32_t index;
295 napi_get_value_int32(env, args[0], &index);
296
297 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
298 ImageEffect_ErrorCode errorCode = ImageEffect_ErrorCode::EFFECT_SUCCESS;
299 OH_EffectFilter *filter = OH_EffectFilter_Create(OH_EFFECT_BRIGHTNESS_FILTER);
300 switch (index) {
301 case CASE_INDEX_1:
302 errorCode = OH_ImageEffect_AddFilterByFilter(imageEffect, filter);
303 break;
304 case CASE_INDEX_2:
305 errorCode = OH_ImageEffect_AddFilterByFilter(nullptr, filter);
306 break;
307 case CASE_INDEX_3:
308 errorCode = OH_ImageEffect_AddFilterByFilter(imageEffect, nullptr);
309 break;
310 default:
311 break;
312 }
313 OH_EffectFilter_Release(filter);
314 OH_ImageEffect_Release(imageEffect);
315
316 napi_value ret;
317 napi_create_int32(env, errorCode, &ret);
318 return ret;
319 }
320
OHImageEffectGetFilter(napi_env env,napi_callback_info info)321 napi_value OHImageEffectGetFilter(napi_env env, napi_callback_info info)
322 {
323 size_t argc = 1;
324 napi_value args[1] = {nullptr};
325 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
326 int32_t index;
327 napi_get_value_int32(env, args[0], &index);
328
329 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
330 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
331 int32_t getFilterIndex;
332 switch (index) {
333 case CASE_INDEX_1:
334 getFilterIndex = 0;
335 break;
336 case CASE_INDEX_2:
337 getFilterIndex = 1;
338 break;
339 default:
340 break;
341 }
342 OH_EffectFilter *getFilter = OH_ImageEffect_GetFilter(imageEffect, getFilterIndex);
343 OH_ImageEffect_Release(imageEffect);
344
345 int status = IMAGE_EFFECT_CODE_401;
346 if (getFilter != nullptr) {
347 status = 0;
348 }
349 napi_value ret;
350 napi_create_int32(env, status, &ret);
351 return ret;
352 }
353
OHImageEffectGetFilterCount(napi_env env,napi_callback_info info)354 napi_value OHImageEffectGetFilterCount(napi_env env, napi_callback_info info)
355 {
356 size_t argc = 1;
357 napi_value args[1] = {nullptr};
358 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
359 int32_t index;
360 napi_get_value_int32(env, args[0], &index);
361
362 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
363 int32_t count = 0;
364 switch (index) {
365 case CASE_INDEX_1:
366 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
367 count = OH_ImageEffect_GetFilterCount(imageEffect);
368 break;
369 case CASE_INDEX_2:
370 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
371 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER);
372 count = OH_ImageEffect_GetFilterCount(imageEffect);
373 break;
374 case CASE_INDEX_3:
375 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
376 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER);
377 OH_ImageEffect_RemoveFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER);
378 count = OH_ImageEffect_GetFilterCount(imageEffect);
379 break;
380 case CASE_INDEX_4:
381 count = OH_ImageEffect_GetFilterCount(nullptr);
382 break;
383 default:
384 break;
385 }
386 OH_ImageEffect_Release(imageEffect);
387
388 int status = IMAGE_EFFECT_CODE_401;
389 if (count >= 0) {
390 status = 0;
391 }
392 napi_value ret;
393 napi_create_int32(env, status, &ret);
394 return ret;
395 }
396
OHImageEffectGetInputSurface(napi_env env,napi_callback_info info)397 napi_value OHImageEffectGetInputSurface(napi_env env, napi_callback_info info)
398 {
399 size_t argc = 1;
400 napi_value args[1] = {nullptr};
401 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
402 int32_t index;
403 napi_get_value_int32(env, args[0], &index);
404
405 OH_ImageEffect *imageEffect = nullptr;
406 switch (index) {
407 case CASE_INDEX_1:
408 imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
409 break;
410 case CASE_INDEX_2:
411 imageEffect = nullptr;
412 break;
413 default:
414 break;
415 }
416 OHNativeWindow *nativeWindow = nullptr;
417 ImageEffect_ErrorCode code = OH_ImageEffect_GetInputSurface(imageEffect, &nativeWindow);
418 OH_ImageEffect_Release(imageEffect);
419
420 napi_value ret;
421 napi_create_int32(env, code, &ret);
422 return ret;
423 }
424
OHImageEffectInsertFilter(napi_env env,napi_callback_info info)425 napi_value OHImageEffectInsertFilter(napi_env env, napi_callback_info info)
426 {
427 size_t argc = 1;
428 napi_value args[1] = {nullptr};
429 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
430 int32_t index;
431 napi_get_value_int32(env, args[0], &index);
432
433 OH_EffectFilter *insertFilter = nullptr;
434 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
435 switch (index) {
436 case CASE_INDEX_1:
437 insertFilter = OH_ImageEffect_InsertFilter(imageEffect, 1, OH_EFFECT_BRIGHTNESS_FILTER);
438 break;
439 case CASE_INDEX_2:
440 insertFilter = OH_ImageEffect_InsertFilter(nullptr, 0, OH_EFFECT_BRIGHTNESS_FILTER);
441 break;
442 case CASE_INDEX_3:
443 insertFilter = OH_ImageEffect_InsertFilter(imageEffect, -1, OH_EFFECT_BRIGHTNESS_FILTER);
444 break;
445 case CASE_INDEX_4:
446 insertFilter = OH_ImageEffect_InsertFilter(imageEffect, 0, nullptr);
447 break;
448 default:
449 break;
450 }
451 OH_ImageEffect_Release(imageEffect);
452
453 int status = IMAGE_EFFECT_CODE_401;
454 if (insertFilter != nullptr) {
455 status = 0;
456 }
457 napi_value ret;
458 napi_create_int32(env, status, &ret);
459 return ret;
460 }
461
OHImageEffectInsertFilterByFilter(napi_env env,napi_callback_info info)462 napi_value OHImageEffectInsertFilterByFilter(napi_env env, napi_callback_info info)
463 {
464 size_t argc = 1;
465 napi_value args[1] = {nullptr};
466 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
467 int32_t index;
468 napi_get_value_int32(env, args[0], &index);
469
470 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
471 OH_EffectFilter *filter = OH_EffectFilter_Create(OH_EFFECT_BRIGHTNESS_FILTER);
472 ImageEffect_ErrorCode errorCode = ImageEffect_ErrorCode::EFFECT_SUCCESS;
473 switch (index) {
474 case CASE_INDEX_1:
475 errorCode = OH_ImageEffect_InsertFilterByFilter(imageEffect, 1, filter);
476 break;
477 case CASE_INDEX_2:
478 errorCode = OH_ImageEffect_InsertFilterByFilter(nullptr, 0, filter);
479 break;
480 case CASE_INDEX_3:
481 errorCode = OH_ImageEffect_InsertFilterByFilter(imageEffect, -1, filter);
482 break;
483 case CASE_INDEX_4:
484 errorCode = OH_ImageEffect_InsertFilterByFilter(imageEffect, 0, nullptr);
485 break;
486 default:
487 break;
488 }
489 OH_EffectFilter_Release(filter);
490 OH_ImageEffect_Release(imageEffect);
491
492 napi_value ret;
493 napi_create_int32(env, errorCode, &ret);
494 return ret;
495 }
496
OHImageEffectReplaceFilter(napi_env env,napi_callback_info info)497 napi_value OHImageEffectReplaceFilter(napi_env env, napi_callback_info info)
498 {
499 size_t argc = 1;
500 napi_value args[1] = {nullptr};
501 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
502 int32_t index;
503 napi_get_value_int32(env, args[0], &index);
504
505 OH_EffectFilter *replaceFilter = nullptr;
506 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
507 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER);
508 switch (index) {
509 case CASE_INDEX_1:
510 replaceFilter = OH_ImageEffect_ReplaceFilter(imageEffect, 0, OH_EFFECT_BRIGHTNESS_FILTER);
511 break;
512 case CASE_INDEX_2:
513 replaceFilter = OH_ImageEffect_ReplaceFilter(nullptr, 0, OH_EFFECT_BRIGHTNESS_FILTER);
514 break;
515 case CASE_INDEX_3:
516 replaceFilter = OH_ImageEffect_ReplaceFilter(imageEffect, -1, OH_EFFECT_BRIGHTNESS_FILTER);
517 break;
518 case CASE_INDEX_4:
519 replaceFilter = OH_ImageEffect_ReplaceFilter(imageEffect, 0, nullptr);
520 break;
521 default:
522 break;
523 }
524 OH_ImageEffect_Release(imageEffect);
525
526 int status = IMAGE_EFFECT_CODE_401;
527 if (replaceFilter != nullptr) {
528 status = 0;
529 }
530 napi_value ret;
531 napi_create_int32(env, status, &ret);
532 return ret;
533 }
534
OHImageEffectReplaceFilterByFilter(napi_env env,napi_callback_info info)535 napi_value OHImageEffectReplaceFilterByFilter(napi_env env, napi_callback_info info)
536 {
537 size_t argc = 1;
538 napi_value args[1] = {nullptr};
539 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
540 int32_t index;
541 napi_get_value_int32(env, args[0], &index);
542
543 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
544 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER);
545 OH_EffectFilter *filter = OH_EffectFilter_Create(OH_EFFECT_BRIGHTNESS_FILTER);
546 ImageEffect_ErrorCode errorCode = ImageEffect_ErrorCode::EFFECT_SUCCESS;
547 switch (index) {
548 case CASE_INDEX_1:
549 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER);
550 errorCode = OH_ImageEffect_ReplaceFilterByFilter(imageEffect, 0, filter);
551 break;
552 case CASE_INDEX_2:
553 errorCode = OH_ImageEffect_ReplaceFilterByFilter(nullptr, 0, filter);
554 break;
555 case CASE_INDEX_3:
556 errorCode = OH_ImageEffect_ReplaceFilterByFilter(imageEffect, -1, filter);
557 break;
558 case CASE_INDEX_4:
559 errorCode = OH_ImageEffect_ReplaceFilterByFilter(imageEffect, 0, nullptr);
560 break;
561 default:
562 break;
563 }
564 OH_EffectFilter_Release(filter);
565 OH_ImageEffect_Release(imageEffect);
566
567 napi_value ret;
568 napi_create_int32(env, errorCode, &ret);
569 return ret;
570 }
571
OHImageEffectRelease(napi_env env,napi_callback_info info)572 napi_value OHImageEffectRelease(napi_env env, napi_callback_info info)
573 {
574 size_t argc = 1;
575 napi_value args[1] = {nullptr};
576 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
577 int32_t index;
578 napi_get_value_int32(env, args[0], &index);
579
580 OH_ImageEffect *imageEffect = nullptr;
581 switch (index) {
582 case CASE_INDEX_1:
583 imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
584 break;
585 case CASE_INDEX_2:
586 imageEffect = nullptr;
587 break;
588 default:
589 break;
590 }
591 ImageEffect_ErrorCode code = OH_ImageEffect_Release(imageEffect);
592 napi_value ret;
593 napi_create_int32(env, code, &ret);
594 return ret;
595 }
596
OHImageEffectRemoveFilter(napi_env env,napi_callback_info info)597 napi_value OHImageEffectRemoveFilter(napi_env env, napi_callback_info info)
598 {
599 size_t argc = 1;
600 napi_value args[1] = {nullptr};
601 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
602 int32_t index;
603 napi_get_value_int32(env, args[0], &index);
604
605 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
606 int32_t result;
607 switch (index) {
608 case CASE_INDEX_1:
609 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
610 result = OH_ImageEffect_RemoveFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
611 break;
612 case CASE_INDEX_2:
613 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
614 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CROP_FILTER);
615 result = OH_ImageEffect_RemoveFilter(imageEffect, OH_EFFECT_CROP_FILTER);
616 break;
617 case CASE_INDEX_3:
618 result = OH_ImageEffect_RemoveFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
619 break;
620 default:
621 break;
622 }
623 OH_ImageEffect_Release(imageEffect);
624
625 napi_value ret;
626 int32_t status = IMAGE_EFFECT_CODE_401;
627 if (result > 0) {
628 status = 0;
629 }
630 napi_create_int32(env, status, &ret);
631 return ret;
632 }
633
OHImageEffectRemoveFilterByIndex(napi_env env,napi_callback_info info)634 napi_value OHImageEffectRemoveFilterByIndex(napi_env env, napi_callback_info info)
635 {
636 size_t argc = 1;
637 napi_value args[1] = {nullptr};
638 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
639 int32_t index;
640 napi_get_value_int32(env, args[0], &index);
641
642 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
643 int32_t errorCode = ImageEffect_ErrorCode::EFFECT_SUCCESS;
644 OH_EffectFilter *brightnessFilter = OH_EffectFilter_Create(OH_EFFECT_BRIGHTNESS_FILTER);
645 switch (index) {
646 case CASE_INDEX_1:
647 OH_ImageEffect_AddFilterByFilter(imageEffect, brightnessFilter);
648 errorCode = OH_ImageEffect_RemoveFilterByIndex(imageEffect, 0);
649 break;
650 case CASE_INDEX_2:
651 OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER);
652 OH_ImageEffect_AddFilterByFilter(imageEffect, brightnessFilter);
653 errorCode = OH_ImageEffect_RemoveFilterByIndex(imageEffect, 1);
654 errorCode |= OH_ImageEffect_RemoveFilterByIndex(imageEffect, 0);
655 break;
656 case CASE_INDEX_3:
657 errorCode = OH_ImageEffect_RemoveFilterByIndex(imageEffect, 0);
658 break;
659 default:
660 break;
661 }
662 OH_EffectFilter_Release(brightnessFilter);
663 OH_ImageEffect_Release(imageEffect);
664
665 napi_value ret;
666 napi_create_int32(env, errorCode, &ret);
667 return ret;
668 }
669
OHImageEffectSave(napi_env env,napi_callback_info info)670 napi_value OHImageEffectSave(napi_env env, napi_callback_info info)
671 {
672 size_t argc = 1;
673 napi_value args[1] = {nullptr};
674 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
675 int32_t index;
676 napi_get_value_int32(env, args[0], &index);
677
678 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
679 ImageEffect_ErrorCode code;
680 char *imageEffectInfo = nullptr;
681 switch (index) {
682 case CASE_INDEX_1:
683 code = OH_ImageEffect_Save(imageEffect, &imageEffectInfo);
684 break;
685 case CASE_INDEX_2:
686 code = OH_ImageEffect_Save(nullptr, &imageEffectInfo);
687 break;
688 case CASE_INDEX_3:
689 code = OH_ImageEffect_Save(imageEffect, nullptr);
690 break;
691 default:
692 break;
693 }
694 OH_ImageEffect_Release(imageEffect);
695
696 napi_value ret;
697 napi_create_int32(env, code, &ret);
698 return ret;
699 }
700
OHImageEffectRestore(napi_env env,napi_callback_info info)701 napi_value OHImageEffectRestore(napi_env env, napi_callback_info info)
702 {
703 size_t argc = 1;
704 napi_value args[1] = {nullptr};
705 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
706 int32_t index;
707 napi_get_value_int32(env, args[0], &index);
708
709 OH_ImageEffect *saveImageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
710 OH_ImageEffect *restoreImageEffect = nullptr;
711 char *imageEffectInfo = nullptr;
712 switch (index) {
713 case CASE_INDEX_1:
714 OH_ImageEffect_Save(saveImageEffect, &imageEffectInfo);
715 restoreImageEffect = OH_ImageEffect_Restore(imageEffectInfo);
716 break;
717 case CASE_INDEX_2:
718 restoreImageEffect = OH_ImageEffect_Restore("");
719 break;
720 case CASE_INDEX_3:
721 restoreImageEffect = OH_ImageEffect_Restore(nullptr);
722 break;
723 default:
724 break;
725 }
726
727 int32_t code = 401;
728 if (restoreImageEffect != nullptr) {
729 code = 0;
730 }
731 napi_value ret = nullptr;
732 napi_create_int32(env, code, &ret);
733 return ret;
734 }
735
736 OH_NativeBuffer_Config config{
737 .width = 0x100,
738 .height = 0x100,
739 };
740
OHImageEffectSetInputNativeBuffer(napi_env env,napi_callback_info info)741 napi_value OHImageEffectSetInputNativeBuffer(napi_env env, napi_callback_info info)
742 {
743 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
744 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
745
746 ImageEffect_Any value;
747 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
748 value.dataValue.floatValue = IMAGE_EFFECT_100F;
749 ImageEffect_ErrorCode code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
750
751 OH_NativeBuffer *buffer = (OH_NativeBuffer *)0x1;
752 code = OH_ImageEffect_SetInputNativeBuffer(imageEffect, buffer);
753 napi_value ret;
754 napi_create_int32(env, code, &ret);
755 return ret;
756 }
757
OHImageEffectSetInputPixelmap(napi_env env,napi_callback_info info)758 napi_value OHImageEffectSetInputPixelmap(napi_env env, napi_callback_info info)
759 {
760 size_t argc = 1;
761 napi_value args[1] = {nullptr};
762 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
763 int32_t index;
764 napi_get_value_int32(env, args[0], &index);
765
766 std::shared_ptr<OH_PixelmapNative> pixelmapNativePtr = PixelMapHelper::Decode(imagePath);
767 OH_PixelmapNative *inputPixelmap = pixelmapNativePtr.get();
768 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
769 ImageEffect_ErrorCode code = EFFECT_UNKNOWN;
770 switch (index) {
771 case CASE_INDEX_1:
772 code = OH_ImageEffect_SetInputPixelmap(imageEffect, inputPixelmap);
773 break;
774 case CASE_INDEX_2:
775 code = OH_ImageEffect_SetInputPixelmap(nullptr, inputPixelmap);
776 break;
777 case CASE_INDEX_3:
778 code = OH_ImageEffect_SetInputPixelmap(imageEffect, nullptr);
779 break;
780 default:
781 break;
782 }
783 OH_ImageEffect_Release(imageEffect);
784 napi_value ret;
785 napi_create_int32(env, code, &ret);
786 return ret;
787 }
788
SetInputUri1(int32_t index,OH_ImageEffect * imageEffect,OH_EffectFilter * filter)789 ImageEffect_ErrorCode SetInputUri1(int32_t index, OH_ImageEffect *imageEffect, OH_EffectFilter *filter)
790 {
791 ImageEffect_Any value;
792 ImageEffect_ErrorCode code;
793 switch (index) {
794 case CASE_INDEX_1:
795 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
796 value.dataValue.int32Value = INT32_MIN;
797 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
798 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
799 break;
800 case CASE_INDEX_2:
801 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
802 value.dataValue.floatValue = IMAGE_EFFECT_100F;
803 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
804 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
805 break;
806 case CASE_INDEX_3:
807 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_DOUBLE;
808 value.dataValue.doubleValue = IMAGE_EFFECT_100D;
809 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
810 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
811 break;
812 case CASE_INDEX_4:
813 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_CHAR;
814 value.dataValue.charValue = 'A';
815 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
816 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
817 break;
818 default:
819 break;
820 }
821 return code;
822 }
823
SetInputUri2(int32_t index,OH_ImageEffect * imageEffect,OH_EffectFilter * filter)824 ImageEffect_ErrorCode SetInputUri2(int32_t index, OH_ImageEffect *imageEffect, OH_EffectFilter *filter)
825 {
826 ImageEffect_Any value;
827 ImageEffect_ErrorCode code;
828 switch (index) {
829 case CASE_INDEX_5:
830 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_LONG;
831 value.dataValue.longValue = 100L;
832 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
833 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
834 break;
835 case CASE_INDEX_6:
836 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_BOOL;
837 value.dataValue.boolValue = true;
838 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
839 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
840 break;
841 case CASE_INDEX_7:
842 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_PTR;
843 value.dataValue.ptrValue = nullptr;
844 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
845 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
846 break;
847 case CASE_INDEX_8:
848 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
849 value.dataValue.int32Value = IMAGE_EFFECT_100;
850 code = OH_EffectFilter_SetValue(filter, nullptr, &value);
851 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
852 break;
853 default:
854 break;
855 }
856 return code;
857 }
858
OHImageEffectSetInputUri(napi_env env,napi_callback_info info)859 napi_value OHImageEffectSetInputUri(napi_env env, napi_callback_info info)
860 {
861 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
862 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
863 size_t argc = 1;
864 napi_value args[1] = {nullptr};
865 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
866 int32_t index;
867 napi_get_value_int32(env, args[0], &index);
868 ImageEffect_Any value;
869 ImageEffect_ErrorCode code;
870 switch (index) {
871 case CASE_INDEX_1:
872 case CASE_INDEX_2:
873 case CASE_INDEX_3:
874 case CASE_INDEX_4:
875 code = SetInputUri1(index, imageEffect, filter);
876 break;
877 case CASE_INDEX_5:
878 case CASE_INDEX_6:
879 case CASE_INDEX_7:
880 case CASE_INDEX_8:
881 code = SetInputUri2(index, imageEffect, filter);
882 break;
883 case CASE_INDEX_9:
884 code = OH_ImageEffect_SetInputUri(nullptr, nullptr);
885 break;
886 case CASE_INDEX_10:
887 code = OH_ImageEffect_SetInputUri(nullptr, g_jpgUri.c_str());
888 break;
889 case CASE_INDEX_11:
890 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
891 value.dataValue.int32Value = IMAGE_EFFECT_100;
892 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
893 code = OH_ImageEffect_SetInputUri(imageEffect, nullptr);
894 break;
895 default:
896 break;
897 }
898 OH_ImageEffect_Release(imageEffect);
899 napi_value ret;
900 napi_create_int32(env, code, &ret);
901 return ret;
902 }
903
OHImageEffectSetOutputNativeBuffer(napi_env env,napi_callback_info info)904 napi_value OHImageEffectSetOutputNativeBuffer(napi_env env, napi_callback_info info)
905 {
906 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
907 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
908
909 ImageEffect_Any value;
910 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
911 value.dataValue.floatValue = IMAGE_EFFECT_100F;
912 ImageEffect_ErrorCode code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
913
914 OH_NativeBuffer *nativeBuffer = (OH_NativeBuffer *)0x1;
915 if (code == EFFECT_SUCCESS) {
916 code = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer);
917 }
918 OH_NativeBuffer *outNativeBuffer = (OH_NativeBuffer *)0x2;
919 if (code == EFFECT_SUCCESS) {
920 code = OH_ImageEffect_SetOutputNativeBuffer(imageEffect, outNativeBuffer);
921 }
922 napi_value ret;
923 napi_create_int32(env, code, &ret);
924 return ret;
925 }
926
OHImageEffectSetOutputPixelmap(napi_env env,napi_callback_info info)927 napi_value OHImageEffectSetOutputPixelmap(napi_env env, napi_callback_info info)
928 {
929 size_t argc = 1;
930 napi_value args[1] = {nullptr};
931 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
932 int32_t index;
933 napi_get_value_int32(env, args[0], &index);
934
935 std::shared_ptr<OH_PixelmapNative> pixelmapNativePtr = PixelMapHelper::Decode(imagePath);
936 OH_PixelmapNative *outputPixelmap = pixelmapNativePtr.get();
937 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
938 ImageEffect_ErrorCode code = EFFECT_UNKNOWN;
939 switch (index) {
940 case CASE_INDEX_1:
941 code = OH_ImageEffect_SetOutputPixelmap(imageEffect, outputPixelmap);
942 break;
943 case CASE_INDEX_2:
944 code = OH_ImageEffect_SetOutputPixelmap(nullptr, outputPixelmap);
945 break;
946 case CASE_INDEX_3:
947 code = OH_ImageEffect_SetOutputPixelmap(imageEffect, nullptr);
948 break;
949 default:
950 break;
951 }
952 OH_ImageEffect_Release(imageEffect);
953 napi_value ret;
954 napi_create_int32(env, code, &ret);
955 return ret;
956 }
957
OHImageEffectSetOutputSurface(napi_env env,napi_callback_info info)958 napi_value OHImageEffectSetOutputSurface(napi_env env, napi_callback_info info)
959 {
960 size_t argc = 1;
961 napi_value args[1] = {nullptr};
962 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
963 int32_t index;
964 napi_get_value_int32(env, args[0], &index);
965
966 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
967 OHNativeWindow *nativeWindow = nullptr;
968 ImageEffect_ErrorCode code;
969 switch (index) {
970 case CASE_INDEX_1:
971 OH_ImageEffect_GetInputSurface(imageEffect, &nativeWindow);
972 code = OH_ImageEffect_SetOutputSurface(imageEffect, nativeWindow);
973 break;
974 case CASE_INDEX_2:
975 OH_ImageEffect_GetInputSurface(imageEffect, &nativeWindow);
976 code = OH_ImageEffect_SetOutputSurface(nullptr, nativeWindow);
977 break;
978 default:
979 break;
980 }
981
982 napi_value ret;
983 napi_create_int32(env, code, &ret);
984 return ret;
985 }
986
SetInputUri3(int32_t index,OH_ImageEffect * imageEffect,OH_EffectFilter * filter)987 ImageEffect_ErrorCode SetInputUri3(int32_t index, OH_ImageEffect *imageEffect, OH_EffectFilter *filter)
988 {
989 ImageEffect_Any value;
990 ImageEffect_ErrorCode code;
991 switch (index) {
992 case CASE_INDEX_1:
993 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
994 value.dataValue.int32Value = INT32_MIN;
995 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
996 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
997 break;
998 case CASE_INDEX_2:
999 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1000 value.dataValue.floatValue = IMAGE_EFFECT_100F;
1001 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1002 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
1003 break;
1004 case CASE_INDEX_3:
1005 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_DOUBLE;
1006 value.dataValue.doubleValue = IMAGE_EFFECT_100D;
1007 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1008 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
1009 break;
1010 case CASE_INDEX_4:
1011 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_CHAR;
1012 value.dataValue.charValue = 'A';
1013 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1014 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
1015 break;
1016 default:
1017 break;
1018 }
1019 return code;
1020 }
1021
SetInputUri4(int32_t index,OH_ImageEffect * imageEffect,OH_EffectFilter * filter)1022 ImageEffect_ErrorCode SetInputUri4(int32_t index, OH_ImageEffect *imageEffect, OH_EffectFilter *filter)
1023 {
1024 ImageEffect_Any value;
1025 ImageEffect_ErrorCode code;
1026 switch (index) {
1027 case CASE_INDEX_5:
1028 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_LONG;
1029 value.dataValue.longValue = 100L;
1030 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1031 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
1032 break;
1033 case CASE_INDEX_6:
1034 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_BOOL;
1035 value.dataValue.boolValue = true;
1036 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1037 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
1038 break;
1039 case CASE_INDEX_7:
1040 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_PTR;
1041 value.dataValue.ptrValue = nullptr;
1042 code = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1043 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
1044 break;
1045 case CASE_INDEX_8:
1046 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1047 value.dataValue.int32Value = IMAGE_EFFECT_100;
1048 code = OH_EffectFilter_SetValue(filter, nullptr, &value);
1049 code = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
1050 break;
1051 default:
1052 break;
1053 }
1054 return code;
1055 }
1056
OHImageEffectSetOutputUri(napi_env env,napi_callback_info info)1057 napi_value OHImageEffectSetOutputUri(napi_env env, napi_callback_info info)
1058 {
1059 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1060 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
1061 size_t argc = 1;
1062 napi_value args[1] = {nullptr};
1063 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1064 int32_t index;
1065 napi_get_value_int32(env, args[0], &index);
1066 ImageEffect_Any value;
1067 ImageEffect_ErrorCode code;
1068 switch (index) {
1069 case CASE_INDEX_1:
1070 case CASE_INDEX_2:
1071 case CASE_INDEX_3:
1072 case CASE_INDEX_4:
1073 code = SetInputUri3(index, imageEffect, filter);
1074 break;
1075 case CASE_INDEX_5:
1076 case CASE_INDEX_6:
1077 case CASE_INDEX_7:
1078 case CASE_INDEX_8:
1079 code = SetInputUri4(index, imageEffect, filter);
1080 break;
1081 case CASE_INDEX_9:
1082 code = OH_ImageEffect_SetInputUri(nullptr, nullptr);
1083 break;
1084 case CASE_INDEX_10:
1085 code = OH_ImageEffect_SetInputUri(nullptr, g_jpgUri.c_str());
1086 break;
1087 case CASE_INDEX_11:
1088 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1089 value.dataValue.int32Value = IMAGE_EFFECT_100;
1090 code = OH_EffectFilter_SetValue(filter, nullptr, &value);
1091 code = OH_ImageEffect_SetInputUri(imageEffect, nullptr);
1092 break;
1093 default:
1094 break;
1095 }
1096 if (code == EFFECT_SUCCESS) {
1097 code = OH_ImageEffect_SetOutputUri(imageEffect, g_jpgUri.c_str());
1098 }
1099 OH_ImageEffect_Release(imageEffect);
1100 napi_value ret;
1101 napi_create_int32(env, code, &ret);
1102 return ret;
1103 }
1104
OHImageEffectStart(napi_env env,napi_callback_info info)1105 napi_value OHImageEffectStart(napi_env env, napi_callback_info info)
1106 {
1107 std::shared_ptr<OH_PixelmapNative> pixelmapNativePtr = PixelMapHelper::Decode(imagePath);
1108
1109 OH_PixelmapNative *inputPixelmap = pixelmapNativePtr.get();
1110 OH_PixelmapNative *outputPixelmap = inputPixelmap;
1111
1112 // 1、创建imageEffect实例,“ImageEdit”是imageEffect实例别名。
1113 OH_ImageEffect *imageEffect = OH_ImageEffect_Create("ImageEdit");
1114
1115 // 2、添加滤镜,多次调用该接口可以添加多个滤镜,组成滤镜链。
1116 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
1117
1118 // 3、设置滤镜参数, 滤镜强度设置为50
1119 ImageEffect_Any value;
1120 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1121 value.dataValue.floatValue = IMAGE_EFFECT_50F;
1122 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1123
1124 // 4、设置输入的Pixelmap
1125 errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, inputPixelmap);
1126 if (errorCode != EFFECT_SUCCESS) {
1127 napi_value ret;
1128 napi_create_int32(env, errorCode, &ret);
1129 return ret;
1130 }
1131 // 5、设置输出的Pixelmap(可选),不调用该接口时会在输入Pixelmap上直接生效滤镜效果
1132 errorCode = OH_ImageEffect_SetOutputPixelmap(imageEffect, outputPixelmap);
1133 if (errorCode != EFFECT_SUCCESS) {
1134 napi_value ret;
1135 napi_create_int32(env, errorCode, &ret);
1136 return ret;
1137 }
1138 // 6、执行生效滤镜效果
1139 errorCode = OH_ImageEffect_Start(imageEffect);
1140 // 7、释放imageEffect实例资源
1141 OH_ImageEffect_Release(imageEffect);
1142 napi_value ret;
1143 napi_create_int32(env, errorCode, &ret);
1144 return ret;
1145 }
1146
OHImageEffectStop(napi_env env,napi_callback_info info)1147 napi_value OHImageEffectStop(napi_env env, napi_callback_info info)
1148 {
1149 std::shared_ptr<OH_PixelmapNative> pixelmapNativePtr = PixelMapHelper::Decode(imagePath);
1150
1151 OH_PixelmapNative *inputPixelmap = pixelmapNativePtr.get();
1152 OH_PixelmapNative *outputPixelmap = inputPixelmap;
1153
1154 // 1、创建imageEffect实例,“ImageEdit”是imageEffect实例别名。
1155 OH_ImageEffect *imageEffect = OH_ImageEffect_Create("ImageEdit");
1156
1157 // 2、添加滤镜,多次调用该接口可以添加多个滤镜,组成滤镜链。
1158 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
1159
1160 // 3、设置滤镜参数, 滤镜强度设置为50
1161 ImageEffect_Any value;
1162 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1163 value.dataValue.floatValue = IMAGE_EFFECT_50F;
1164 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1165
1166 // 4、设置输入的Pixelmap
1167 errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, inputPixelmap);
1168 if (errorCode != EFFECT_SUCCESS) {
1169 napi_value ret;
1170 napi_create_int32(env, errorCode, &ret);
1171 return ret;
1172 }
1173 // 5、设置输出的Pixelmap(可选),不调用该接口时会在输入Pixelmap上直接生效滤镜效果
1174 errorCode = OH_ImageEffect_SetOutputPixelmap(imageEffect, outputPixelmap);
1175 if (errorCode != EFFECT_SUCCESS) {
1176 napi_value ret;
1177 napi_create_int32(env, errorCode, &ret);
1178 return ret;
1179 }
1180 // 6、执行生效滤镜效果
1181 errorCode = OH_ImageEffect_Start(imageEffect);
1182 if (errorCode != EFFECT_SUCCESS) {
1183 napi_value ret;
1184 napi_create_int32(env, errorCode, &ret);
1185 return ret;
1186 }
1187 // 7、执行生效滤镜效果
1188 errorCode = OH_ImageEffect_Stop(imageEffect);
1189
1190 // 7、释放imageEffect实例资源
1191 OH_ImageEffect_Release(imageEffect);
1192
1193 napi_value ret;
1194 napi_create_int32(env, errorCode, &ret);
1195 return ret;
1196 }
1197
OHImageEffectSetInputPicture(napi_env env,napi_callback_info info)1198 napi_value OHImageEffectSetInputPicture(napi_env env, napi_callback_info info)
1199 {
1200 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1201 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
1202
1203 OH_PictureNative *nativePicture = nullptr;
1204 ImageEffect_ErrorCode code = OH_ImageEffect_SetInputPicture(imageEffect, nativePicture);
1205 LOG("OH_ImageEffect_SetInputPicture code value: %d", code);
1206 napi_value ret;
1207 napi_create_int32(env, code, &ret);
1208 return ret;
1209 }
1210
OHImageEffectSetOutputPicture(napi_env env,napi_callback_info info)1211 napi_value OHImageEffectSetOutputPicture(napi_env env, napi_callback_info info)
1212 {
1213 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1214 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_BRIGHTNESS_FILTER);
1215
1216 OH_PictureNative *outNativePicture = nullptr;
1217 ImageEffect_ErrorCode code = OH_ImageEffect_SetOutputPicture(imageEffect, nullptr);
1218 LOG("OH_ImageEffect_SetOutputPicture code value: %d", code);
1219
1220 napi_value ret;
1221 napi_create_int32(env, code, &ret);
1222 return ret;
1223 }