dynamsoft-capture-vision-react-native 3.0.5200 → 3.2.3000
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/android/build.gradle +20 -10
- package/android/gradle.properties +3 -3
- package/android/src/main/cpp/JsiCore.cpp +1 -1
- package/android/src/main/cpp/JsiDbr.cpp +208 -23
- package/android/src/main/cpp/JsiDcp.cpp +1 -1
- package/android/src/main/cpp/JsiDlr.cpp +10 -1
- package/android/src/main/cpp/JsiUtility.cpp +470 -62
- package/android/src/main/cpp/JsiUtility.h +13 -3
- package/android/src/main/dysJniLibs/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor81/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibsFor82/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +17 -2
- package/android/src/main/java/com/dynamsoft/reactnativelib/CameraViewManager.kt +13 -1
- package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +1 -1
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/Basic.kt +1 -1
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/ForCore.kt +1 -2
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/ForCvr.kt +1 -5
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/ForDBR.kt +74 -3
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/ForDCE.kt +33 -13
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/ForDCP.kt +1 -1
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/ForDDN.kt +1 -3
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/ForDLR.kt +6 -3
- package/android/src/main/java/com/dynamsoft/reactnativelib/{utils → basicutils}/ImageUtil.kt +2 -2
- package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +25 -5
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +6 -3
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +15 -3
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +1 -5
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +2 -4
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +1 -2
- package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +75 -3
- package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +2 -2
- package/dynamsoft-capture-vision-react-native.podspec +1 -1
- package/ios/CPP/ImageDataHostObject.cpp +1 -1
- package/ios/CPP/ImageDataHostObject.hpp +1 -1
- package/ios/CPP/RNDynamsoft+JSI.h +3 -0
- package/ios/CPP/RNDynamsoft+JSI.mm +119 -2
- package/ios/CPP/RNDynamsoft+Json.m +114 -14
- package/ios/CPP/YeetJSIUtils.h +2 -0
- package/ios/CPP/YeetJSIUtils.mm +15 -0
- package/ios/RNDynamsoftCameraView.h +4 -0
- package/ios/RNDynamsoftCameraView.m +25 -0
- package/ios/RNDynamsoftCameraViewManager.m +8 -2
- package/ios/RNDynamsoftCaptureVisionRouter.mm +149 -92
- package/ios/RNDynamsoftImageEditorViewManager.mm +71 -40
- package/ios/RNDynamsoftImageManager.mm +295 -81
- package/ios/RNDynamsoftImageSourceAdapter.mm +100 -65
- package/package.json +1 -1
- package/src/core/EnumGrayscaleEnhancementMode.tsx +1 -0
- package/src/core/EnumGrayscaleTransformationMode.tsx +1 -0
- package/src/core/EnumImageFileFormat.tsx +6 -0
- package/src/core/index.tsx +1 -0
- package/src/cvr/CaptureVisionRouter.tsx +33 -5
- package/src/dbr/BarcodeDetails.tsx +51 -0
- package/src/dbr/BarcodeResultItem.tsx +11 -0
- package/src/dbr/EnumBarcodeFormat.tsx +2 -0
- package/src/dbr/EnumDeblurMode.tsx +1 -0
- package/src/dbr/EnumLocalizationMode.tsx +1 -0
- package/src/dbr/EnumQRCodeErrorCorrectionLevel.tsx +6 -0
- package/src/dbr/index.tsx +2 -0
- package/src/dce/CameraEnhancer.tsx +14 -6
- package/src/dce/CameraView.tsx +10 -2
- package/src/dce/DynamsoftCameraViewNativeComponent.ts +25 -0
- package/src/dce/EnumCameraPosition.tsx +13 -1
- package/src/dce/EnumEnhancedFeatures.tsx +3 -4
- package/src/dce/ImageEditorView.tsx +1 -1
- package/src/dlr/CharacterResult.tsx +4 -1
- package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +2 -0
- package/src/dlr/TextLineResultItem.tsx +5 -0
- package/src/utility/EnumFilterType.tsx +5 -0
- package/src/utility/ImageManager.tsx +227 -9
- package/src/utility/index.tsx +1 -0
|
@@ -3,14 +3,19 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
#include "JsiUtility.h"
|
|
6
|
+
#include "RawBuffer.h"
|
|
7
|
+
|
|
6
8
|
jobject jImageManagerModule = nullptr;
|
|
7
9
|
jclass jclzQuad = nullptr;
|
|
8
10
|
jclass jclzPoint = nullptr;
|
|
11
|
+
jclass jclzDSRect = nullptr;
|
|
12
|
+
|
|
13
|
+
using namespace facebook::jsi;
|
|
9
14
|
|
|
10
15
|
jobject jsPointToJobject(Runtime &rt, JNIEnv *env, Object jsPoint) {
|
|
11
|
-
if(jsPoint.hasProperty(rt,"x") && jsPoint.hasProperty(rt,"y")) {
|
|
12
|
-
int x = jsPoint.getProperty(rt,"x").asNumber();
|
|
13
|
-
int y = jsPoint.getProperty(rt,"y").asNumber();
|
|
16
|
+
if (jsPoint.hasProperty(rt, "x") && jsPoint.hasProperty(rt, "y")) {
|
|
17
|
+
int x = jsPoint.getProperty(rt, "x").asNumber();
|
|
18
|
+
int y = jsPoint.getProperty(rt, "y").asNumber();
|
|
14
19
|
jmethodID init = env->GetMethodID(jclzPoint, "<init>", "(II)V");
|
|
15
20
|
jobject jPoint = env->NewObject(jclzPoint, init, x, y);
|
|
16
21
|
return jPoint;
|
|
@@ -19,8 +24,8 @@ jobject jsPointToJobject(Runtime &rt, JNIEnv *env, Object jsPoint) {
|
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
jobject jsQuadToJobject(Runtime &rt, JNIEnv *env, Object &jsQuad) {
|
|
22
|
-
if(jsQuad.hasProperty(rt,"points")) {
|
|
23
|
-
auto jsPoints = jsQuad.getProperty(rt,"points").asObject(rt).asArray(rt);
|
|
27
|
+
if (jsQuad.hasProperty(rt, "points")) {
|
|
28
|
+
auto jsPoints = jsQuad.getProperty(rt, "points").asObject(rt).asArray(rt);
|
|
24
29
|
int count = jsPoints.length(rt);
|
|
25
30
|
auto jPoints = env->NewObjectArray(count, jclzPoint, nullptr);
|
|
26
31
|
for (int i = 0; i < count; ++i) {
|
|
@@ -49,6 +54,22 @@ jobjectArray jsQuadArrayToJobjectArray(Runtime &rt, JNIEnv *env, Array &jsQuads)
|
|
|
49
54
|
return jQuads;
|
|
50
55
|
}
|
|
51
56
|
|
|
57
|
+
jobject jsDsRectToJobject(Runtime &rt, JNIEnv *env, Object &jsDSRect) {
|
|
58
|
+
if (!jsDSRect.hasProperty(rt, "left") || !jsDSRect.hasProperty(rt, "top") || !jsDSRect.hasProperty(rt, "right") || !jsDSRect.hasProperty(rt, "bottom") ||
|
|
59
|
+
!jsDSRect.hasProperty(rt, "measuredInPercentage")) {
|
|
60
|
+
return nullptr;
|
|
61
|
+
}
|
|
62
|
+
float top = (float) jsDSRect.getProperty(rt, "top").asNumber();
|
|
63
|
+
float left = (float) jsDSRect.getProperty(rt, "left").asNumber();
|
|
64
|
+
float bottom = (float) jsDSRect.getProperty(rt, "bottom").asNumber();
|
|
65
|
+
float right = (float) jsDSRect.getProperty(rt, "right").asNumber();
|
|
66
|
+
bool measuredInPercentage = jsDSRect.getProperty(rt, "measuredInPercentage").asBool();
|
|
67
|
+
jmethodID init = env->GetMethodID(jclzDSRect, "<init>", "(FFFFZ)V");
|
|
68
|
+
jobject jDSRect = env->NewObject(jclzDSRect, init, left, top, right, bottom, measuredInPercentage);
|
|
69
|
+
return jDSRect;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
52
73
|
void saveImageDataHOToFile(Runtime &rt, ImageDataHostObject &imageDataHO, string filePath, bool overWrite) {
|
|
53
74
|
JNIEnv *env;
|
|
54
75
|
bool needDetach = false;
|
|
@@ -68,6 +89,74 @@ void saveImageDataHOToFile(Runtime &rt, ImageDataHostObject &imageDataHO, string
|
|
|
68
89
|
}
|
|
69
90
|
}
|
|
70
91
|
|
|
92
|
+
ImageDataHostObject readImageDataHOFromFile(Runtime &rt, string filePath) {
|
|
93
|
+
JNIEnv *env;
|
|
94
|
+
bool needDetach = false;
|
|
95
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
96
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
97
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
98
|
+
needDetach = true;
|
|
99
|
+
}
|
|
100
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
101
|
+
jmethodID methodId = env->GetMethodID(clz, "readFromFileCalledInJsi", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
102
|
+
jstring jFilePath = env->NewStringUTF(filePath.c_str());
|
|
103
|
+
auto jImageData = env->CallObjectMethod(jImageManagerModule, methodId, jFilePath);
|
|
104
|
+
ImageDataHostObject imageHO;
|
|
105
|
+
jsiConversion::core::getHOFromJImageData(env, jImageData, imageHO);
|
|
106
|
+
env->DeleteLocalRef(clz);
|
|
107
|
+
env->DeleteLocalRef(jFilePath);
|
|
108
|
+
env->DeleteLocalRef(jImageData);
|
|
109
|
+
if (needDetach) {
|
|
110
|
+
gJvm->DetachCurrentThread();
|
|
111
|
+
}
|
|
112
|
+
return imageHO;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
ImageDataHostObject readImageDataHOFromMemory(Runtime &rt, unsigned char *buffer, int bufferSize) {
|
|
116
|
+
JNIEnv *env;
|
|
117
|
+
bool needDetach = false;
|
|
118
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
119
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
120
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
121
|
+
needDetach = true;
|
|
122
|
+
}
|
|
123
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
124
|
+
jmethodID methodId = env->GetMethodID(clz, "readFromMemoryCalledInJsi", "([B)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
125
|
+
auto jBuffer = env->NewByteArray(bufferSize);
|
|
126
|
+
env->SetByteArrayRegion(jBuffer, 0, bufferSize, (jbyte *) buffer);
|
|
127
|
+
auto jImageData = env->CallObjectMethod(jImageManagerModule, methodId, jBuffer);
|
|
128
|
+
ImageDataHostObject imageHO;
|
|
129
|
+
jsiConversion::core::getHOFromJImageData(env, jImageData, imageHO);
|
|
130
|
+
env->DeleteLocalRef(clz);
|
|
131
|
+
env->DeleteLocalRef(jBuffer);
|
|
132
|
+
env->DeleteLocalRef(jImageData);
|
|
133
|
+
if (needDetach) {
|
|
134
|
+
gJvm->DetachCurrentThread();
|
|
135
|
+
}
|
|
136
|
+
return imageHO;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
ArrayBuffer saveImageDataHOToMemory(Runtime &rt, ImageDataHostObject &imageDataHO, int fileFormat) {
|
|
140
|
+
JNIEnv *env;
|
|
141
|
+
bool needDetach = false;
|
|
142
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
143
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
144
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
145
|
+
needDetach = true;
|
|
146
|
+
}
|
|
147
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
148
|
+
jmethodID methodId = env->GetMethodID(clz, "saveToMemoryCalledInJsi", "(Lcom/dynamsoft/core/basic_structures/ImageData;I)[B");
|
|
149
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
150
|
+
auto jBuffer = (jbyteArray) env->CallObjectMethod(jImageManagerModule, methodId, jImageData, fileFormat);
|
|
151
|
+
auto pBuffer = (uint8_t *) env->GetByteArrayElements(jBuffer, nullptr);
|
|
152
|
+
int bufferSize = env->GetArrayLength(jBuffer);
|
|
153
|
+
auto mutableBuffer = std::make_shared<MutableRawBuffer>(pBuffer, bufferSize, false);
|
|
154
|
+
ArrayBuffer arrayBuffer(rt, mutableBuffer);
|
|
155
|
+
env->DeleteLocalRef(clz);
|
|
156
|
+
env->DeleteLocalRef(jImageData);
|
|
157
|
+
return arrayBuffer;
|
|
158
|
+
}
|
|
159
|
+
|
|
71
160
|
ImageDataHostObject drawOnImage(Runtime &rt, ImageDataHostObject &imageDataHO, Array &jsQuads, int color, int thickness) {
|
|
72
161
|
JNIEnv *env;
|
|
73
162
|
bool needDetach = false;
|
|
@@ -94,7 +183,7 @@ ImageDataHostObject drawOnImage(Runtime &rt, ImageDataHostObject &imageDataHO, A
|
|
|
94
183
|
return imageHOAfterDraw;
|
|
95
184
|
}
|
|
96
185
|
|
|
97
|
-
ImageDataHostObject cropImage(Runtime &rt, ImageDataHostObject &imageDataHO, Object &
|
|
186
|
+
ImageDataHostObject cropImage(Runtime &rt, ImageDataHostObject &imageDataHO, Object &jsDSRect) {
|
|
98
187
|
JNIEnv *env;
|
|
99
188
|
bool needDetach = false;
|
|
100
189
|
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
@@ -104,13 +193,13 @@ ImageDataHostObject cropImage(Runtime &rt, ImageDataHostObject &imageDataHO, Obj
|
|
|
104
193
|
}
|
|
105
194
|
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
106
195
|
jmethodID methodId = env->GetMethodID(clz, "cropImageCalledInJsi",
|
|
107
|
-
"(Lcom/dynamsoft/core/basic_structures/ImageData;Lcom/dynamsoft/core/basic_structures/
|
|
196
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;Lcom/dynamsoft/core/basic_structures/DSRect;)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
108
197
|
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
109
|
-
auto
|
|
110
|
-
auto jImageDataAfterCrop = env->CallObjectMethod(jImageManagerModule, methodId, jImageData,
|
|
198
|
+
auto jDSRect = jsDsRectToJobject(rt, env, jsDSRect);
|
|
199
|
+
auto jImageDataAfterCrop = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, jDSRect);
|
|
111
200
|
ImageDataHostObject imageHOAfterCrop;
|
|
112
201
|
jsiConversion::core::getHOFromJImageData(env, jImageDataAfterCrop, imageHOAfterCrop);
|
|
113
|
-
env->DeleteLocalRef(
|
|
202
|
+
env->DeleteLocalRef(jDSRect);
|
|
114
203
|
env->DeleteLocalRef(jImageDataAfterCrop);
|
|
115
204
|
env->DeleteLocalRef(clz);
|
|
116
205
|
env->DeleteLocalRef(jImageData);
|
|
@@ -120,62 +209,378 @@ ImageDataHostObject cropImage(Runtime &rt, ImageDataHostObject &imageDataHO, Obj
|
|
|
120
209
|
return imageHOAfterCrop;
|
|
121
210
|
}
|
|
122
211
|
|
|
212
|
+
ImageDataHostObject cropAndDeskewImage(Runtime &rt, ImageDataHostObject &imageDataHO, Object &jsQuad, int dstWidth, int dstHeight, int padding) {
|
|
213
|
+
JNIEnv *env;
|
|
214
|
+
bool needDetach = false;
|
|
215
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
216
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
217
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
218
|
+
needDetach = true;
|
|
219
|
+
}
|
|
220
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
221
|
+
jmethodID methodId = env->GetMethodID(clz, "cropAndDeskewImageCalledInJsi",
|
|
222
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;Lcom/dynamsoft/core/basic_structures/Quadrilateral;III)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
223
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
224
|
+
auto jQuad = jsQuadToJobject(rt, env, jsQuad);
|
|
225
|
+
auto jImageDataAfterCropAndDeskew = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, jQuad, dstWidth, dstHeight, padding);
|
|
226
|
+
ImageDataHostObject imageHOAfterCrop;
|
|
227
|
+
jsiConversion::core::getHOFromJImageData(env, jImageDataAfterCropAndDeskew, imageHOAfterCrop);
|
|
228
|
+
env->DeleteLocalRef(jQuad);
|
|
229
|
+
env->DeleteLocalRef(jImageDataAfterCropAndDeskew);
|
|
230
|
+
env->DeleteLocalRef(clz);
|
|
231
|
+
env->DeleteLocalRef(jImageData);
|
|
232
|
+
if (needDetach) {
|
|
233
|
+
gJvm->DetachCurrentThread();
|
|
234
|
+
}
|
|
235
|
+
return imageHOAfterCrop;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
const int type_adjust_brightness = 0;
|
|
240
|
+
const int type_adjust_contrast = 1;
|
|
241
|
+
const int type_filter = 2;
|
|
242
|
+
|
|
243
|
+
ImageDataHostObject adjustOrFilter(Runtime &rt, ImageDataHostObject &imageDataHO, int value, int type) {
|
|
244
|
+
JNIEnv *env;
|
|
245
|
+
bool needDetach = false;
|
|
246
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
247
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
248
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
249
|
+
needDetach = true;
|
|
250
|
+
}
|
|
251
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
252
|
+
jmethodID methodId;
|
|
253
|
+
switch (type) {
|
|
254
|
+
case type_adjust_brightness:
|
|
255
|
+
methodId = env->GetMethodID(clz, "adjustBrightnessCalledInJsi",
|
|
256
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;I)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
257
|
+
break;
|
|
258
|
+
case type_adjust_contrast:
|
|
259
|
+
methodId = env->GetMethodID(clz, "adjustContrastCalledInJsi",
|
|
260
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;I)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
261
|
+
break;
|
|
262
|
+
case type_filter:
|
|
263
|
+
default:
|
|
264
|
+
methodId = env->GetMethodID(clz, "filterImageCalledInJsi",
|
|
265
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;I)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
269
|
+
auto jImageDataAfter = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, value);
|
|
270
|
+
ImageDataHostObject imageHOAfter;
|
|
271
|
+
jsiConversion::core::getHOFromJImageData(env, jImageDataAfter, imageHOAfter);
|
|
272
|
+
env->DeleteLocalRef(jImageDataAfter);
|
|
273
|
+
env->DeleteLocalRef(clz);
|
|
274
|
+
env->DeleteLocalRef(jImageData);
|
|
275
|
+
if (needDetach) {
|
|
276
|
+
gJvm->DetachCurrentThread();
|
|
277
|
+
}
|
|
278
|
+
return imageHOAfter;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
ImageDataHostObject convertToGray(Runtime &rt, ImageDataHostObject &imageDataHO, float r, float g, float b) {
|
|
282
|
+
JNIEnv *env;
|
|
283
|
+
bool needDetach = false;
|
|
284
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
285
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
286
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
287
|
+
needDetach = true;
|
|
288
|
+
}
|
|
289
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
290
|
+
jmethodID methodId = env->GetMethodID(clz, "convertToGrayCalledInJsi",
|
|
291
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;FFF)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
292
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
293
|
+
auto jImageDataAfterConvert = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, r, g, b);
|
|
294
|
+
ImageDataHostObject imageHOAfterConvert;
|
|
295
|
+
jsiConversion::core::getHOFromJImageData(env, jImageDataAfterConvert, imageHOAfterConvert);
|
|
296
|
+
env->DeleteLocalRef(jImageDataAfterConvert);
|
|
297
|
+
env->DeleteLocalRef(clz);
|
|
298
|
+
env->DeleteLocalRef(jImageData);
|
|
299
|
+
if (needDetach) {
|
|
300
|
+
gJvm->DetachCurrentThread();
|
|
301
|
+
}
|
|
302
|
+
return imageHOAfterConvert;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
ImageDataHostObject convertToBinaryGlobal(Runtime &rt, ImageDataHostObject &imageDataHO, int threshold, bool invert) {
|
|
306
|
+
JNIEnv *env;
|
|
307
|
+
bool needDetach = false;
|
|
308
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
309
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
310
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
311
|
+
needDetach = true;
|
|
312
|
+
}
|
|
313
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
314
|
+
jmethodID methodId = env->GetMethodID(clz, "convertToBinaryGlobalCalledInJsi",
|
|
315
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;IZ)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
316
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
317
|
+
auto jImageDataAfterConvert = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, threshold, invert);
|
|
318
|
+
ImageDataHostObject imageHOAfterConvert;
|
|
319
|
+
jsiConversion::core::getHOFromJImageData(env, jImageDataAfterConvert, imageHOAfterConvert);
|
|
320
|
+
env->DeleteLocalRef(jImageDataAfterConvert);
|
|
321
|
+
env->DeleteLocalRef(clz);
|
|
322
|
+
env->DeleteLocalRef(jImageData);
|
|
323
|
+
if (needDetach) {
|
|
324
|
+
gJvm->DetachCurrentThread();
|
|
325
|
+
}
|
|
326
|
+
return imageHOAfterConvert;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
ImageDataHostObject convertToBinaryLocal(Runtime &rt, ImageDataHostObject &imageDataHO, int blockSize, int compensation, bool invert) {
|
|
330
|
+
JNIEnv *env;
|
|
331
|
+
bool needDetach = false;
|
|
332
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
333
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
334
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
335
|
+
needDetach = true;
|
|
336
|
+
}
|
|
337
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
338
|
+
jmethodID methodId = env->GetMethodID(clz, "convertToBinaryLocalCalledInJsi",
|
|
339
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;IIZ)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
340
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
341
|
+
auto jImageDataAfterConvert = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, blockSize, compensation, invert);
|
|
342
|
+
ImageDataHostObject imageHOAfterConvert;
|
|
343
|
+
jsiConversion::core::getHOFromJImageData(env, jImageDataAfterConvert, imageHOAfterConvert);
|
|
344
|
+
env->DeleteLocalRef(jImageDataAfterConvert);
|
|
345
|
+
env->DeleteLocalRef(clz);
|
|
346
|
+
env->DeleteLocalRef(jImageData);
|
|
347
|
+
if (needDetach) {
|
|
348
|
+
gJvm->DetachCurrentThread();
|
|
349
|
+
}
|
|
350
|
+
return imageHOAfterConvert;
|
|
351
|
+
}
|
|
352
|
+
|
|
123
353
|
|
|
124
354
|
#define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
|
|
125
355
|
|
|
126
356
|
namespace jsi_install::utility {
|
|
127
|
-
void
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
auto
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
jsiRuntime.global().
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
357
|
+
void install_imageIO_saveToFile(Runtime &jsiRuntime) {
|
|
358
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageIO_saveToFile");
|
|
359
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
360
|
+
auto saveToFileFcn = Function::createFromHostFunction(jsiRuntime, nameID, 3, JSI_FUNC {
|
|
361
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
362
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
363
|
+
auto filePath = arguments[1].asString(runtime).utf8(runtime);
|
|
364
|
+
bool overWrite = arguments[2].asBool();
|
|
365
|
+
saveImageDataHOToFile(runtime, imageDataHostObject, filePath, overWrite);
|
|
366
|
+
return {};
|
|
367
|
+
});
|
|
368
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(saveToFileFcn));
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
void install_imageIO_readFromFile(Runtime &jsiRuntime) {
|
|
373
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageIO_readFromFile");
|
|
374
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
375
|
+
auto readFromFileFcn = Function::createFromHostFunction(jsiRuntime, nameID, 1, JSI_FUNC {
|
|
376
|
+
auto filePath = arguments[0].asString(runtime).utf8(runtime);
|
|
377
|
+
auto imageDataHostObject = readImageDataHOFromFile(runtime, filePath);
|
|
378
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageDataHostObject));
|
|
379
|
+
});
|
|
380
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(readFromFileFcn));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
void install_imageIO_readFromMemory(Runtime &jsiRuntime) {
|
|
385
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageIO_readFromMemory");
|
|
386
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
387
|
+
auto readFromMemoryFcn = Function::createFromHostFunction(jsiRuntime, nameID, 1, JSI_FUNC {
|
|
388
|
+
auto buffer = arguments[0].asObject(runtime).getArrayBuffer(runtime);
|
|
389
|
+
auto pBuffer = (unsigned char *) buffer.data(runtime);
|
|
390
|
+
auto len = (int) buffer.length(runtime);
|
|
391
|
+
auto imageDataHostObject = readImageDataHOFromMemory(runtime, pBuffer, len);
|
|
392
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageDataHostObject));
|
|
393
|
+
});
|
|
394
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(readFromMemoryFcn));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
void install_imageIO_saveToMemory(Runtime &jsiRuntime) {
|
|
399
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageIO_saveToMemory");
|
|
400
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
401
|
+
auto saveToMemoryFcn = Function::createFromHostFunction(jsiRuntime, nameID, 2, JSI_FUNC {
|
|
402
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
403
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
404
|
+
int fileFormat = arguments[1].asNumber();
|
|
405
|
+
auto arrayBuffer = saveImageDataHOToMemory(runtime, imageDataHostObject, fileFormat);
|
|
406
|
+
return arrayBuffer;
|
|
407
|
+
});
|
|
408
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(saveToMemoryFcn));
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
void install_imageDrawer_drawOnImage(Runtime &jsiRuntime) {
|
|
413
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageDrawer_drawOnImage");
|
|
414
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
415
|
+
auto drawOnImageFcn = Function::createFromHostFunction(jsiRuntime, nameID, 4, JSI_FUNC {
|
|
416
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
417
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
418
|
+
auto jsQuads = arguments[1].asObject(runtime).asArray(runtime);
|
|
419
|
+
auto color = arguments[2].asNumber();
|
|
420
|
+
auto thickness = arguments[3].asNumber();
|
|
421
|
+
ImageDataHostObject imageHOAfterDraw = drawOnImage(runtime, imageDataHostObject, jsQuads, (int) color, (int) thickness);
|
|
422
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfterDraw));
|
|
423
|
+
});
|
|
424
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(drawOnImageFcn));
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
void install_imageProcessor_cropImage(Runtime &jsiRuntime) {
|
|
429
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageProcessor_cropImage");
|
|
430
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
431
|
+
auto cropImageFcn = Function::createFromHostFunction(jsiRuntime, nameID, 2, JSI_FUNC {
|
|
432
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
433
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
434
|
+
auto jsDsRect = arguments[1].asObject(runtime);
|
|
435
|
+
ImageDataHostObject imageHOAfterCrop = cropImage(runtime, imageDataHostObject, jsDsRect);
|
|
436
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfterCrop));
|
|
437
|
+
});
|
|
438
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(cropImageFcn));
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
void install_imageProcessor_cropAndDeskewImage(Runtime &jsiRuntime) {
|
|
443
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageProcessor_cropAndDeskewImage");
|
|
444
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
445
|
+
auto cropAndDeskewImageFcn = Function::createFromHostFunction(jsiRuntime, nameID, 5, JSI_FUNC {
|
|
446
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
447
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
448
|
+
auto jsQuads = arguments[1].asObject(runtime);
|
|
449
|
+
int dstWidth = arguments[2].asNumber();
|
|
450
|
+
int dstHeight = arguments[3].asNumber();
|
|
451
|
+
int padding = arguments[4].asNumber();
|
|
452
|
+
ImageDataHostObject imageHOAfterCrop = cropAndDeskewImage(runtime, imageDataHostObject, jsQuads, dstWidth, dstHeight, padding);
|
|
453
|
+
if (imageHOAfterCrop.buffer == nullptr) {
|
|
454
|
+
return Value::undefined();
|
|
455
|
+
}
|
|
456
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfterCrop));
|
|
457
|
+
});
|
|
458
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(cropAndDeskewImageFcn));
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
void install_imageProcessor_adjustBrightness(Runtime &jsiRuntime) {
|
|
463
|
+
PropNameID nameId = PropNameID::forAscii(jsiRuntime, "imageProcessor_adjustBrightness");
|
|
464
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
465
|
+
auto adjustOrFilterFcn = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
466
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
467
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
468
|
+
auto value = arguments[1].asNumber();
|
|
469
|
+
ImageDataHostObject imageHOAfter = adjustOrFilter(runtime, imageDataHostObject, (int) value, type_adjust_brightness);
|
|
470
|
+
if (imageHOAfter.buffer == nullptr) {
|
|
471
|
+
return Value::undefined();
|
|
472
|
+
}
|
|
473
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfter));
|
|
474
|
+
});
|
|
475
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(adjustOrFilterFcn));
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
void install_imageProcessor_adjustContrast(Runtime &jsiRuntime) {
|
|
480
|
+
PropNameID nameId = PropNameID::forAscii(jsiRuntime, "imageProcessor_adjustContrast");
|
|
481
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
482
|
+
auto adjustOrFilterFcn = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
483
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
484
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
485
|
+
auto value = arguments[1].asNumber();
|
|
486
|
+
ImageDataHostObject imageHOAfter = adjustOrFilter(runtime, imageDataHostObject, (int) value, type_adjust_contrast);
|
|
487
|
+
if (imageHOAfter.buffer == nullptr) {
|
|
488
|
+
return Value::undefined();
|
|
489
|
+
}
|
|
490
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfter));
|
|
491
|
+
});
|
|
492
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(adjustOrFilterFcn));
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
void install_imageProcessor_filterImage(Runtime &jsiRuntime) {
|
|
497
|
+
PropNameID nameId = PropNameID::forAscii(jsiRuntime, "imageProcessor_filterImage");
|
|
498
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
499
|
+
auto adjustOrFilterFcn = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
500
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
501
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
502
|
+
auto value = arguments[1].asNumber();
|
|
503
|
+
ImageDataHostObject imageHOAfter = adjustOrFilter(runtime, imageDataHostObject, (int) value, type_filter);
|
|
504
|
+
if (imageHOAfter.buffer == nullptr) {
|
|
505
|
+
return Value::undefined();
|
|
506
|
+
}
|
|
507
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfter));
|
|
508
|
+
});
|
|
509
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(adjustOrFilterFcn));
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
void install_imageProcessor_convertToGray(Runtime &jsiRuntime) {
|
|
514
|
+
PropNameID nameId = PropNameID::forAscii(jsiRuntime, "imageProcessor_convertToGray");
|
|
515
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
516
|
+
auto convertToGrayFcn = Function::createFromHostFunction(jsiRuntime, nameId, 4, JSI_FUNC {
|
|
517
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
518
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
519
|
+
float r = arguments[1].asNumber();
|
|
520
|
+
float g = arguments[2].asNumber();
|
|
521
|
+
float b = arguments[3].asNumber();
|
|
522
|
+
ImageDataHostObject grayImageHO = convertToGray(runtime, imageDataHostObject, r, g, b);
|
|
523
|
+
if (grayImageHO.buffer == nullptr) {
|
|
524
|
+
return Value::undefined();
|
|
525
|
+
}
|
|
526
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(grayImageHO));
|
|
527
|
+
});
|
|
528
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(convertToGrayFcn));
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
void install_imageProcessor_convertToBinaryGlobal(Runtime &jsiRuntime) {
|
|
533
|
+
PropNameID nameId = PropNameID::forAscii(jsiRuntime, "imageProcessor_convertToBinaryGlobal");
|
|
534
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
535
|
+
auto convertToBinaryGlobalFcn = Function::createFromHostFunction(jsiRuntime, nameId, 3, JSI_FUNC {
|
|
536
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
537
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
538
|
+
int threshold = arguments[1].asNumber();
|
|
539
|
+
bool isInvert = arguments[2].asBool();
|
|
540
|
+
ImageDataHostObject binaryImageHO = convertToBinaryGlobal(runtime, imageDataHostObject, threshold, isInvert);
|
|
541
|
+
if (binaryImageHO.buffer == nullptr) {
|
|
542
|
+
return Value::undefined();
|
|
543
|
+
}
|
|
544
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(binaryImageHO));
|
|
545
|
+
});
|
|
546
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(convertToBinaryGlobalFcn));
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
void install_imageProcessor_convertToBinaryLocal(Runtime &jsiRuntime) {
|
|
551
|
+
PropNameID nameId = PropNameID::forAscii(jsiRuntime, "imageProcessor_convertToBinaryLocal");
|
|
552
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
553
|
+
auto convertToBinaryLocalFcn = Function::createFromHostFunction(jsiRuntime, nameId, 4, JSI_FUNC {
|
|
554
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
555
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
556
|
+
int blockSize = arguments[1].asNumber();
|
|
557
|
+
int compensation = arguments[2].asNumber();
|
|
558
|
+
bool isInvert = arguments[3].asBool();
|
|
559
|
+
ImageDataHostObject binaryImageHO = convertToBinaryLocal(runtime, imageDataHostObject, blockSize, compensation, isInvert);
|
|
560
|
+
if (binaryImageHO.buffer == nullptr) {
|
|
561
|
+
return Value::undefined();
|
|
562
|
+
}
|
|
563
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(binaryImageHO));
|
|
564
|
+
});
|
|
565
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(convertToBinaryLocalFcn));
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
} //namespace jsi_install::utility
|
|
174
569
|
|
|
175
570
|
void install_imageManager_methods(Runtime &jsiRuntime) {
|
|
176
|
-
jsi_install::utility::
|
|
177
|
-
jsi_install::utility::
|
|
178
|
-
jsi_install::utility::
|
|
571
|
+
jsi_install::utility::install_imageIO_saveToFile(jsiRuntime);
|
|
572
|
+
jsi_install::utility::install_imageIO_readFromFile(jsiRuntime);
|
|
573
|
+
jsi_install::utility::install_imageIO_readFromMemory(jsiRuntime);
|
|
574
|
+
jsi_install::utility::install_imageIO_saveToMemory(jsiRuntime);
|
|
575
|
+
jsi_install::utility::install_imageDrawer_drawOnImage(jsiRuntime);
|
|
576
|
+
jsi_install::utility::install_imageProcessor_cropImage(jsiRuntime);
|
|
577
|
+
jsi_install::utility::install_imageProcessor_cropAndDeskewImage(jsiRuntime);
|
|
578
|
+
jsi_install::utility::install_imageProcessor_adjustBrightness(jsiRuntime);
|
|
579
|
+
jsi_install::utility::install_imageProcessor_adjustContrast(jsiRuntime);
|
|
580
|
+
jsi_install::utility::install_imageProcessor_filterImage(jsiRuntime);
|
|
581
|
+
jsi_install::utility::install_imageProcessor_convertToGray(jsiRuntime);
|
|
582
|
+
jsi_install::utility::install_imageProcessor_convertToBinaryGlobal(jsiRuntime);
|
|
583
|
+
jsi_install::utility::install_imageProcessor_convertToBinaryLocal(jsiRuntime);
|
|
179
584
|
}
|
|
180
585
|
|
|
181
586
|
|
|
@@ -185,12 +590,15 @@ Java_com_dynamsoft_reactnativelib_utility_ImageManagerModuleImpl_nativeInstall(J
|
|
|
185
590
|
if (!env->IsSameObject(jImageManagerModule, thiz)) {
|
|
186
591
|
jImageManagerModule = env->NewWeakGlobalRef(thiz);
|
|
187
592
|
}
|
|
188
|
-
if(jclzQuad == nullptr) {
|
|
593
|
+
if (jclzQuad == nullptr) {
|
|
189
594
|
jclzQuad = (jclass) env->NewWeakGlobalRef(env->FindClass("com/dynamsoft/core/basic_structures/Quadrilateral"));
|
|
190
595
|
}
|
|
191
|
-
if(jclzPoint == nullptr) {
|
|
596
|
+
if (jclzPoint == nullptr) {
|
|
192
597
|
jclzPoint = (jclass) env->NewWeakGlobalRef(env->FindClass("android/graphics/Point"));
|
|
193
598
|
}
|
|
599
|
+
if (jclzDSRect == nullptr) {
|
|
600
|
+
jclzDSRect = (jclass) env->NewWeakGlobalRef(env->FindClass("com/dynamsoft/core/basic_structures/DSRect"));
|
|
601
|
+
}
|
|
194
602
|
auto rt = reinterpret_cast<Runtime *>(jsiPtr);
|
|
195
603
|
install_imageManager_methods(*rt);
|
|
196
604
|
}
|
|
@@ -8,9 +8,19 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
namespace jsi_install::utility {
|
|
11
|
-
void
|
|
12
|
-
void
|
|
13
|
-
void
|
|
11
|
+
void install_imageIO_saveToFile(Runtime &jsiRuntime);
|
|
12
|
+
void install_imageIO_readFromFile(Runtime &jsiRuntime);
|
|
13
|
+
void install_imageIO_readFromMemory(Runtime &jsiRuntime);
|
|
14
|
+
void install_imageIO_saveToMemory(Runtime &jsiRuntime);
|
|
15
|
+
void install_imageDrawer_drawOnImage(Runtime &jsiRuntime);
|
|
16
|
+
void install_imageProcessor_cropImage(Runtime &jsiRuntime);
|
|
17
|
+
void install_imageProcessor_cropAndDeskewImage(Runtime &jsiRuntime);
|
|
18
|
+
void install_imageProcessor_adjustBrightness(Runtime &jsiRuntime);
|
|
19
|
+
void install_imageProcessor_adjustContrast(Runtime &jsiRuntime);
|
|
20
|
+
void install_imageProcessor_filterImage(Runtime &jsiRuntime);
|
|
21
|
+
void install_imageProcessor_convertToGray(Runtime &jsiRuntime);
|
|
22
|
+
void install_imageProcessor_convertToBinaryGlobal(Runtime &jsiRuntime);
|
|
23
|
+
void install_imageProcessor_convertToBinaryLocal(Runtime &jsiRuntime);
|
|
14
24
|
}//namespace jsi_install::dce
|
|
15
25
|
|
|
16
26
|
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_UTILITY_JSIUTILITY_H_
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|