dynamsoft-capture-vision-react-native 2.6.1016 → 3.0.5100
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/LICENSE +2 -2
- package/README.md +7 -9
- package/android/build.gradle +73 -42
- package/android/src/main/cpp/CMakeLists.txt +22 -0
- package/android/src/main/cpp/ImgHO.cpp +95 -0
- package/android/src/main/cpp/ImgHO.h +34 -0
- package/android/src/main/cpp/JsiCore.cpp +284 -0
- package/android/src/main/cpp/JsiCore.h +51 -0
- package/android/src/main/cpp/JsiCvr.cpp +327 -0
- package/android/src/main/cpp/JsiCvr.h +54 -0
- package/android/src/main/cpp/JsiDbr.cpp +38 -0
- package/android/src/main/cpp/JsiDbr.h +26 -0
- package/android/src/main/cpp/JsiDce.cpp +59 -0
- package/android/src/main/cpp/JsiDce.h +17 -0
- package/android/src/main/cpp/JsiDcp.cpp +51 -0
- package/android/src/main/cpp/JsiDcp.h +31 -0
- package/android/src/main/cpp/JsiDdn.cpp +50 -0
- package/android/src/main/cpp/JsiDdn.h +28 -0
- package/android/src/main/cpp/JsiDlr.cpp +51 -0
- package/android/src/main/cpp/JsiDlr.h +26 -0
- package/android/src/main/cpp/JsiUtility.cpp +196 -0
- package/android/src/main/cpp/JsiUtility.h +16 -0
- package/android/src/main/cpp/RawBuffer.cpp +24 -0
- package/android/src/main/cpp/RawBuffer.h +24 -0
- package/android/src/main/cpp/android_log.h +14 -0
- 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/{oldarch → main/java}/com/dynamsoft/reactnativelib/CVRModule.kt +4 -4
- package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/DCEModule.kt +10 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +13 -85
- package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/VersionsModule.kt +2 -2
- package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +25 -25
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +23 -2
- package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +1 -1
- package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +19 -4
- package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForCore.kt +14 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForCvr.kt +12 -7
- package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForDBR.kt +1 -7
- package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForDCE.kt +2 -2
- package/android/src/main/java/com/dynamsoft/reactnativelib/utils/ForDDN.kt +27 -19
- package/dynamsoft-capture-vision-react-native.podspec +9 -7
- package/ios/CPP/DSImageData+HostObject.h +1 -1
- package/ios/CPP/RNDynamsoft+JSI.h +2 -2
- package/ios/CPP/RNDynamsoft+JSI.mm +18 -10
- package/ios/CPP/RNDynamsoft+Json.h +2 -13
- package/ios/CPP/RNDynamsoft+Json.m +48 -39
- package/ios/CPP/YeetJSIUtils.h +3 -1
- package/ios/CPP/YeetJSIUtils.mm +5 -0
- package/ios/RNDynamsoftCameraView.m +1 -1
- package/ios/RNDynamsoftCameraViewManager.m +23 -8
- package/ios/RNDynamsoftCaptureVisionRouter.mm +76 -45
- package/ios/RNDynamsoftImageEditorView.m +1 -1
- package/ios/RNDynamsoftImageEditorViewManager.mm +36 -13
- package/ios/RNDynamsoftImageManager.mm +33 -4
- package/ios/RNDynamsoftImageSourceAdapter.mm +1 -1
- package/ios/RNDynamsoftLicense.m +1 -1
- package/ios/RNDynamsoftMultiCrossFilter.m +9 -9
- package/ios/RNDynamsoftVersions.m +1 -13
- package/package.json +3 -11
- package/src/core/CapturedResultBase.tsx +18 -0
- package/src/core/EnumCaptureResultItemType.tsx +12 -6
- package/src/core/EnumCrossVerificationStatus.tsx +6 -6
- package/src/core/ImageData.tsx +1 -1
- package/src/core/index.tsx +1 -0
- package/src/cvr/CaptureVisionRouter.tsx +47 -51
- package/src/cvr/CapturedResult.tsx +24 -46
- package/src/cvr/CapturedResultReceiver.tsx +12 -19
- package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +2 -2
- package/src/cvr/SimplifiedCaptureVisionSettings.tsx +4 -4
- package/src/dbr/DecodedBarcodesResult.tsx +3 -17
- package/src/dce/CameraEnhancer.tsx +9 -0
- package/src/dce/DynamsoftCameraViewNativeComponent.ts +2 -2
- package/src/dce/EnumResolution.tsx +7 -0
- package/src/dce/NativeDynamsoftCameraViewModule.tsx +4 -0
- package/src/dce/index.tsx +1 -0
- package/src/dcp/ParsedResult.tsx +3 -14
- package/src/ddn/DeskewedImageResultItem.tsx +40 -0
- package/src/ddn/DetectedQuadResultItem.tsx +3 -1
- package/src/ddn/EnhancedImageResultItem.tsx +20 -0
- package/src/ddn/ProcessedDocumentResult.tsx +27 -0
- package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +18 -3
- package/src/ddn/index.tsx +3 -3
- package/src/dlr/RecognizedTextLinesResult.tsx +2 -16
- package/src/index.tsx +0 -1
- package/src/utility/ImageManager.tsx +66 -45
- package/android/src/main/java/com/dynamsoft/reactnativelib/rtu/BarcodeScannerModuleImpl.kt +0 -80
- package/android/src/main/java/com/dynamsoft/reactnativelib/rtu/MRZScannerModuleImpl.kt +0 -77
- package/android/src/main/java/com/dynamsoft/reactnativelib/rtu/ScannerInterface.kt +0 -47
- package/android/src/main/jniLibs/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/jniLibs/x86/librn_dys.so +0 -0
- package/android/src/main/jniLibs/x86_64/librn_dys.so +0 -0
- package/android/src/newarch/com/dynamsoft/reactnativelib/BarcodeScannerModule.kt +0 -22
- package/android/src/newarch/com/dynamsoft/reactnativelib/CVRModule.kt +0 -91
- package/android/src/newarch/com/dynamsoft/reactnativelib/CameraViewManager.kt +0 -52
- package/android/src/newarch/com/dynamsoft/reactnativelib/DCEModule.kt +0 -91
- package/android/src/newarch/com/dynamsoft/reactnativelib/ISAModule.kt +0 -60
- package/android/src/newarch/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +0 -16
- package/android/src/newarch/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +0 -24
- package/android/src/newarch/com/dynamsoft/reactnativelib/ImageManagerModule.kt +0 -12
- package/android/src/newarch/com/dynamsoft/reactnativelib/LicenseModule.kt +0 -14
- package/android/src/newarch/com/dynamsoft/reactnativelib/MRZScannerModule.kt +0 -22
- package/android/src/newarch/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +0 -58
- package/android/src/newarch/com/dynamsoft/reactnativelib/VersionsModule.kt +0 -41
- package/android/src/oldarch/com/dynamsoft/reactnativelib/BarcodeScannerModule.kt +0 -24
- package/android/src/oldarch/com/dynamsoft/reactnativelib/MRZScannerModule.kt +0 -24
- package/ios/RNDynamsoftBarcodeScanner.h +0 -14
- package/ios/RNDynamsoftBarcodeScanner.m +0 -169
- package/ios/RNDynamsoftMRZScanner.h +0 -14
- package/ios/RNDynamsoftMRZScanner.m +0 -140
- package/src/ddn/DetectedQuadsResult.tsx +0 -31
- package/src/ddn/NormalizedImageResultItem.tsx +0 -32
- package/src/ddn/NormalizedImagesResult.tsx +0 -27
- package/src/rtu/BarcodeScanConfig.tsx +0 -104
- package/src/rtu/BarcodeScanResult.tsx +0 -31
- package/src/rtu/BarcodeScanner.tsx +0 -112
- package/src/rtu/EnumResultState.tsx +0 -21
- package/src/rtu/MRZScanConfig.tsx +0 -67
- package/src/rtu/MRZScanResult.tsx +0 -84
- package/src/rtu/MRZScanner.tsx +0 -90
- package/src/rtu/NativeDynamsoftBarcodeScannerModule.tsx +0 -6
- package/src/rtu/NativeDynamsoftMRZScannerModule.tsx +0 -6
- package/src/rtu/index.tsx +0 -7
- /package/android/src/main/{withNamespace/AndroidManifest.xml → AndroidManifest.xml} +0 -0
- /package/android/src/main/{withoutNamespace/AndroidManifest.xml → AndroidManifest_noPackage.xml} +0 -0
- /package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/CameraViewManager.kt +0 -0
- /package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/ISAModule.kt +0 -0
- /package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +0 -0
- /package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +0 -0
- /package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/ImageManagerModule.kt +0 -0
- /package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/LicenseModule.kt +0 -0
- /package/android/src/{oldarch → main/java}/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/26.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CORE_JSICORE_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CORE_JSICORE_H_
|
|
7
|
+
|
|
8
|
+
#include "jsi/jsi.h"
|
|
9
|
+
#include "ImgHO.h"
|
|
10
|
+
#include <jni.h>
|
|
11
|
+
#include <string>
|
|
12
|
+
using namespace facebook::jsi;
|
|
13
|
+
using namespace std;
|
|
14
|
+
|
|
15
|
+
using namespace facebook::jsi;
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
extern JavaVM *gJvm;
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
namespace jsiConversion::core {
|
|
25
|
+
|
|
26
|
+
void jPointToJsObject(Runtime &rt, JNIEnv *env, jobject jPoint, Object &jsPoint);
|
|
27
|
+
void jQuadToJsObject(Runtime &rt, JNIEnv *env, jobject jQuad, Object &jsQuad);
|
|
28
|
+
void jCapturedItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, int &outType, Object &jsItem);
|
|
29
|
+
void jCapturedItemArrayToJsArray(Runtime &rt, JNIEnv *env, jobjectArray jItemArray, int *&outTypes, Array &jsItemArray);
|
|
30
|
+
|
|
31
|
+
// ImageData: java object <--> jsi HostObject
|
|
32
|
+
jobject getJImageDataFromHO(JNIEnv *env, const ImageDataHostObject &imageDataHO);
|
|
33
|
+
void getHOFromJImageData(JNIEnv *env, jobject jImageData, ImageDataHostObject &imageHO);
|
|
34
|
+
} // namespace jsiConversion::core
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
Value imageDataHOToBase64(ImageDataHostObject &imageDataHO, Runtime &rt);
|
|
39
|
+
|
|
40
|
+
void addImageToBuffer(ImageDataHostObject &imageDataHO, string &nativeIsaId);
|
|
41
|
+
ImageDataHostObject getImage(string &nativeIsaId);
|
|
42
|
+
|
|
43
|
+
namespace jsi_install {
|
|
44
|
+
void install_imageDataToBase64(Runtime &jsiRuntime);
|
|
45
|
+
namespace isa {
|
|
46
|
+
void install_addImageToBuffer(Runtime &jsiRuntime);
|
|
47
|
+
void install_getImageData(Runtime &jsiRuntime);
|
|
48
|
+
} // namespace isa
|
|
49
|
+
} // namespace jsi_install
|
|
50
|
+
|
|
51
|
+
#endif // REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CORE_JSICORE_H_
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#include "JsiCvr.h"
|
|
6
|
+
#include "ImgHO.h"
|
|
7
|
+
#include "JsiCore.h"
|
|
8
|
+
#include <jni.h>
|
|
9
|
+
#define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
|
|
10
|
+
|
|
11
|
+
jobject jCvrModule;
|
|
12
|
+
|
|
13
|
+
void install_cvrMethods(Runtime &runtime) {
|
|
14
|
+
jsi_install::cvr::install_captureImageData(runtime);
|
|
15
|
+
jsi_install::cvr::install_cvr_getOriginalImage(runtime);
|
|
16
|
+
jsi_install::cvr::install_getCurrentDeskewedImages(runtime);
|
|
17
|
+
jsi_install::cvr::install_getCurrentEnhancedImages(runtime);
|
|
18
|
+
jsi_install::cvr::install_captureFile(runtime);
|
|
19
|
+
jsi_install::cvr::install_captureFileBytes(runtime);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
extern "C"
|
|
23
|
+
JNIEXPORT void JNICALL
|
|
24
|
+
Java_com_dynamsoft_reactnativelib_cvr_CaptureVisionRouterModuleImpl_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
|
|
25
|
+
if (!env->IsSameObject(jCvrModule, thiz)) {
|
|
26
|
+
jCvrModule = env->NewWeakGlobalRef(thiz);
|
|
27
|
+
}
|
|
28
|
+
auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
|
|
29
|
+
if (runtime) {
|
|
30
|
+
install_cvrMethods(*runtime);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
namespace jsiConversion::cvr {
|
|
35
|
+
void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult) {
|
|
36
|
+
env->PushLocalFrame(8);
|
|
37
|
+
jclass jclsCapturedResult = env->FindClass("com/dynamsoft/cvr/CapturedResult");
|
|
38
|
+
SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, originalImageHashId)
|
|
39
|
+
SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, errorMessage)
|
|
40
|
+
|
|
41
|
+
jfieldID errorCode = env->GetFieldID(jclsCapturedResult, "errorCode", "I");
|
|
42
|
+
jsCapturedResult.setProperty(rt, "errorCode", env->GetIntField(jCapturedResult, errorCode));
|
|
43
|
+
|
|
44
|
+
jfieldID fiMatrix = env->GetFieldID(jclsCapturedResult, "rotationTransformMatrix", "Landroid/graphics/Matrix;");
|
|
45
|
+
jobject jMatrix = env->GetObjectField(jCapturedResult, fiMatrix);
|
|
46
|
+
if(jMatrix) {
|
|
47
|
+
jclass clsMatrix = env->GetObjectClass(jMatrix);
|
|
48
|
+
jmethodID getValues = env->GetMethodID(clsMatrix, "getValues", "([F)V");
|
|
49
|
+
jfloatArray jValues = env->NewFloatArray(9);
|
|
50
|
+
env->CallVoidMethod(jMatrix, getValues, jValues);
|
|
51
|
+
float cValues[9];
|
|
52
|
+
env->GetFloatArrayRegion(jValues, 0, 9, cValues);
|
|
53
|
+
Array jsMatrix(rt, 9);
|
|
54
|
+
for (int i = 0; i < 9; ++i) {
|
|
55
|
+
jsMatrix.setValueAtIndex(rt, i, cValues[i]);
|
|
56
|
+
}
|
|
57
|
+
env->DeleteLocalRef(clsMatrix);
|
|
58
|
+
env->DeleteLocalRef(jValues);
|
|
59
|
+
jsCapturedResult.setProperty(rt, "rotationTransformMatrix", jsMatrix);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
jfieldID items = env->GetFieldID(jclsCapturedResult, "items", "[Lcom/dynamsoft/core/basic_structures/CapturedResultItem;");
|
|
63
|
+
jobjectArray jItems = (jobjectArray) env->GetObjectField(jCapturedResult, items);
|
|
64
|
+
Array jsItemArray(rt, 0);
|
|
65
|
+
int *types;
|
|
66
|
+
|
|
67
|
+
jsiConversion::core::jCapturedItemArrayToJsArray(rt, env, jItems, types, jsItemArray);
|
|
68
|
+
for (int i = 0; i < jsItemArray.size(rt); ++i) {
|
|
69
|
+
Object jsItem = jsItemArray.getValueAtIndex(rt, i).asObject(rt);
|
|
70
|
+
jobject jItem = env->GetObjectArrayElement(jItems, i);
|
|
71
|
+
int type = types[i];
|
|
72
|
+
if (type == CRIT_BARCODE) {
|
|
73
|
+
jsiConversion::dbr::jBarcodeResultItemToJsObject(rt, env, jItem, jsItem);
|
|
74
|
+
} else if (type == CRIT_TEXT_LINE) {
|
|
75
|
+
jsiConversion::dlr::jTextLineResultItemToJsObject(rt, env, jItem, jsItem);
|
|
76
|
+
} else if (type == CRIT_DETECTED_QUAD) {
|
|
77
|
+
jsiConversion::ddn::jDetectedQuadResultItemToJsObject(rt, env, jItem, jsItem);
|
|
78
|
+
} else if (type == CRIT_DESKEWED_IMAGE) {
|
|
79
|
+
jsiConversion::ddn::jDeskewedImageResultItemToJsObject(rt, env, jItem, jsItem);
|
|
80
|
+
} else if (type == CRIT_PARSED_RESULT) {
|
|
81
|
+
jsiConversion::dcp::jParsedResultItemToJsObject(rt, env, jItem, jsItem);
|
|
82
|
+
} else if(type == CRIT_ENHANCED_IMAGE) {
|
|
83
|
+
jsiConversion::ddn::jEnhancedImageResultItemToJsObject(rt, env, jItem, jsItem);
|
|
84
|
+
}
|
|
85
|
+
env->DeleteLocalRef(jItem);
|
|
86
|
+
}
|
|
87
|
+
delete types;
|
|
88
|
+
jsCapturedResult.setProperty(rt, "items", jsItemArray);
|
|
89
|
+
env->PopLocalFrame(nullptr);
|
|
90
|
+
}
|
|
91
|
+
}//namespace jsiConversion::cvr
|
|
92
|
+
|
|
93
|
+
namespace jsi_install::cvr {
|
|
94
|
+
void install_captureImageData(Runtime &jsiRuntime) {
|
|
95
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "captureImageData");
|
|
96
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
97
|
+
auto captureImageDataFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
98
|
+
auto obj = arguments[0].asObject(runtime);
|
|
99
|
+
auto imgHO = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
|
|
100
|
+
Object jsCapturedResult = captureImageDataHO(imgHO, runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
101
|
+
return jsCapturedResult;
|
|
102
|
+
});
|
|
103
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureImageDataFunc));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
void install_captureFile(Runtime &jsiRuntime) {
|
|
107
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "captureFile");
|
|
108
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
109
|
+
auto captureFileFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
110
|
+
auto filePath = arguments[0].asString(runtime);
|
|
111
|
+
Object jsCapturedResult = captureFile(filePath.utf8(runtime), runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
112
|
+
return jsCapturedResult;
|
|
113
|
+
});
|
|
114
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileFunc));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
void install_captureFileBytes(Runtime &jsiRuntime) {
|
|
118
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "captureFileBytes");
|
|
119
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
120
|
+
auto captureFileBytesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
|
|
121
|
+
ArrayBuffer fileBytes = arguments[0].asObject(runtime).getArrayBuffer(runtime);
|
|
122
|
+
Object jsCapturedResult = captureFileBytes(fileBytes, runtime, arguments[1].asString(runtime).utf8(runtime));
|
|
123
|
+
return jsCapturedResult;
|
|
124
|
+
});
|
|
125
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileBytesFunc));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
void install_getCurrentDeskewedImages(Runtime &jsiRuntime) {
|
|
129
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentDeskewedImages");
|
|
130
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
131
|
+
auto getCurrentDeskewedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
|
|
132
|
+
Array images = getCurrentDeskewedImages(runtime);
|
|
133
|
+
return images;
|
|
134
|
+
});
|
|
135
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentDeskewedImagesFunc));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
void install_getCurrentEnhancedImages(Runtime &jsiRuntime) {
|
|
139
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentEnhancedImages");
|
|
140
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
141
|
+
auto getCurrentEnhancedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
|
|
142
|
+
Array images = getCurrentEnhancedImages(runtime);
|
|
143
|
+
return images;
|
|
144
|
+
});
|
|
145
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentEnhancedImagesFunc));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
void install_cvr_getOriginalImage(Runtime &jsiRuntime) {
|
|
149
|
+
auto nameId = PropNameID::forAscii(jsiRuntime, "cvr_getOriginalImage");
|
|
150
|
+
if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
|
|
151
|
+
auto cvr_getOriginalImageFunc = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
|
|
152
|
+
string hashId = arguments[0].asString(runtime).utf8(runtime);
|
|
153
|
+
if (hashId.empty()) {
|
|
154
|
+
return {};
|
|
155
|
+
}
|
|
156
|
+
ImageDataHostObject imgHO = getOriginalImage(runtime, hashId);
|
|
157
|
+
if(imgHO.width == 0 && imgHO.height == 0) {
|
|
158
|
+
return {};
|
|
159
|
+
} else {
|
|
160
|
+
return Object::createFromHostObject(runtime, make_shared<ImageDataHostObject>(imgHO));
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(cvr_getOriginalImageFunc));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}//namespace jsi_install::cvr
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string templateName) {
|
|
170
|
+
JNIEnv *env;
|
|
171
|
+
bool needDetach = false;
|
|
172
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
173
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
174
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
175
|
+
needDetach = true;
|
|
176
|
+
}
|
|
177
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
178
|
+
auto captureMeth = env->GetMethodID(clzCvrModule, "captureImageDataCalledInJSI",
|
|
179
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
180
|
+
auto imageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
181
|
+
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, imageData, env->NewStringUTF(templateName.c_str()));
|
|
182
|
+
Object jsResult(rt);
|
|
183
|
+
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
184
|
+
env->DeleteLocalRef(clzCvrModule);
|
|
185
|
+
env->DeleteLocalRef(imageData);
|
|
186
|
+
if (needDetach) {
|
|
187
|
+
gJvm->DetachCurrentThread();
|
|
188
|
+
}
|
|
189
|
+
return jsResult;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
Object captureFile(string filePath, Runtime &rt, string templateName) {
|
|
193
|
+
JNIEnv *env;
|
|
194
|
+
bool needDetach = false;
|
|
195
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
196
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
197
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
198
|
+
needDetach = true;
|
|
199
|
+
}
|
|
200
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
201
|
+
auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileCalledInJSI",
|
|
202
|
+
"(Ljava/lang/String;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
203
|
+
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, env->NewStringUTF(filePath.c_str()), env->NewStringUTF(templateName.c_str()));
|
|
204
|
+
Object jsResult(rt);
|
|
205
|
+
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
206
|
+
env->DeleteLocalRef(clzCvrModule);
|
|
207
|
+
if (needDetach) {
|
|
208
|
+
gJvm->DetachCurrentThread();
|
|
209
|
+
}
|
|
210
|
+
return jsResult;
|
|
211
|
+
}
|
|
212
|
+
Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName) {
|
|
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
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
221
|
+
auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileBytesCalledInJSI",
|
|
222
|
+
"([BLjava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
|
|
223
|
+
auto pBytes = (jbyte *) fileBytes.data(rt);
|
|
224
|
+
int len = fileBytes.length(rt);
|
|
225
|
+
jbyteArray jBytes = env->NewByteArray(len);
|
|
226
|
+
env->SetByteArrayRegion(jBytes, 0, len, (jbyte *) pBytes);
|
|
227
|
+
auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, jBytes, env->NewStringUTF(templateName.c_str()));
|
|
228
|
+
Object jsResult(rt);
|
|
229
|
+
jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
|
|
230
|
+
env->DeleteLocalRef(clzCvrModule);
|
|
231
|
+
env->DeleteLocalRef(jBytes);
|
|
232
|
+
if (needDetach) {
|
|
233
|
+
gJvm->DetachCurrentThread();
|
|
234
|
+
}
|
|
235
|
+
return jsResult;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
Array getCurrentDeskewedImages(Runtime &runtime) {
|
|
239
|
+
JNIEnv *env;
|
|
240
|
+
bool needDetach = false;
|
|
241
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
242
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
243
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
244
|
+
needDetach = true;
|
|
245
|
+
}
|
|
246
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
247
|
+
auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentDeskewedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
248
|
+
auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
|
|
249
|
+
int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
|
|
250
|
+
Array array(runtime, count);
|
|
251
|
+
for (int i = 0; i < count; ++i) {
|
|
252
|
+
auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
|
|
253
|
+
ImageDataHostObject imgHO;
|
|
254
|
+
jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
|
|
255
|
+
auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
|
|
256
|
+
array.setValueAtIndex(runtime, i, obj);
|
|
257
|
+
env->DeleteLocalRef(imageData);
|
|
258
|
+
}
|
|
259
|
+
env->DeleteLocalRef(clzCvrModule);
|
|
260
|
+
if (jCurrentImages) {
|
|
261
|
+
env->DeleteLocalRef(jCurrentImages);
|
|
262
|
+
}
|
|
263
|
+
jCurrentImages = nullptr;
|
|
264
|
+
env->SetObjectField(jCvrModule, fiCurrentImages, jCurrentImages);
|
|
265
|
+
if (needDetach) {
|
|
266
|
+
gJvm->DetachCurrentThread();
|
|
267
|
+
}
|
|
268
|
+
return array;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
Array getCurrentEnhancedImages(Runtime &runtime) {
|
|
272
|
+
JNIEnv *env;
|
|
273
|
+
bool needDetach = false;
|
|
274
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
275
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
276
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
277
|
+
needDetach = true;
|
|
278
|
+
}
|
|
279
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
280
|
+
auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentEnhancedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
281
|
+
auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
|
|
282
|
+
int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
|
|
283
|
+
Array array(runtime, count);
|
|
284
|
+
for (int i = 0; i < count; ++i) {
|
|
285
|
+
auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
|
|
286
|
+
ImageDataHostObject imgHO;
|
|
287
|
+
jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
|
|
288
|
+
auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
|
|
289
|
+
array.setValueAtIndex(runtime, i, obj);
|
|
290
|
+
env->DeleteLocalRef(imageData);
|
|
291
|
+
}
|
|
292
|
+
env->DeleteLocalRef(clzCvrModule);
|
|
293
|
+
if (jCurrentImages) {
|
|
294
|
+
env->DeleteLocalRef(jCurrentImages);
|
|
295
|
+
}
|
|
296
|
+
jCurrentImages = nullptr;
|
|
297
|
+
env->SetObjectField(jCvrModule, fiCurrentImages, jCurrentImages);
|
|
298
|
+
if (needDetach) {
|
|
299
|
+
gJvm->DetachCurrentThread();
|
|
300
|
+
}
|
|
301
|
+
return array;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId) {
|
|
305
|
+
JNIEnv *env;
|
|
306
|
+
bool needDetach = false;
|
|
307
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
308
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
309
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
310
|
+
needDetach = true;
|
|
311
|
+
}
|
|
312
|
+
auto clzCvrModule = env->GetObjectClass(jCvrModule);
|
|
313
|
+
auto getOriginalImageCalledInJSI =
|
|
314
|
+
env->GetMethodID(clzCvrModule, "getOriginalImageCalledInJSI", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
315
|
+
auto jImageData = env->CallObjectMethod(jCvrModule, getOriginalImageCalledInJSI, env->NewStringUTF(imageHashId.c_str()));
|
|
316
|
+
ImageDataHostObject imgHO;
|
|
317
|
+
if (jImageData != nullptr) {
|
|
318
|
+
jsiConversion::core::getHOFromJImageData(env, jImageData, imgHO);
|
|
319
|
+
env->DeleteLocalRef(jImageData);
|
|
320
|
+
}
|
|
321
|
+
env->DeleteLocalRef(clzCvrModule);
|
|
322
|
+
if (needDetach) {
|
|
323
|
+
gJvm->DetachCurrentThread();
|
|
324
|
+
}
|
|
325
|
+
return imgHO;
|
|
326
|
+
}
|
|
327
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CVR_JSICVR_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CVR_JSICVR_H_
|
|
7
|
+
|
|
8
|
+
#include "jsi/jsi.h"
|
|
9
|
+
#include "string"
|
|
10
|
+
#include "ImgHO.h"
|
|
11
|
+
#include "JsiDbr.h"
|
|
12
|
+
#include "JsiDlr.h"
|
|
13
|
+
#include "JsiDdn.h"
|
|
14
|
+
#include "JsiDcp.h"
|
|
15
|
+
#include "jni.h"
|
|
16
|
+
|
|
17
|
+
using namespace facebook::jsi;
|
|
18
|
+
using namespace std;
|
|
19
|
+
|
|
20
|
+
int CRIT_BARCODE = 1 << 1;
|
|
21
|
+
int CRIT_TEXT_LINE = 1 << 2;
|
|
22
|
+
int CRIT_DETECTED_QUAD = 1 << 3;
|
|
23
|
+
int CRIT_DESKEWED_IMAGE = 1 << 4;
|
|
24
|
+
int CRIT_PARSED_RESULT = 1 << 5;
|
|
25
|
+
int CRIT_ENHANCED_IMAGE = 1 << 6;
|
|
26
|
+
|
|
27
|
+
#define SET_STRING_PROPERTY_BY_FIELD(jClass, jObj, jsObj, propertyName) \
|
|
28
|
+
jfieldID propertyName =env->GetFieldID(jClass, #propertyName, "Ljava/lang/String;"); \
|
|
29
|
+
jstring j##propertyName = (jstring) env->GetObjectField(jObj, propertyName); \
|
|
30
|
+
const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
|
|
31
|
+
jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
|
|
32
|
+
if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
|
|
33
|
+
|
|
34
|
+
namespace jsiConversion::cvr {
|
|
35
|
+
void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult);
|
|
36
|
+
}//namespace jsiConversion::cvr
|
|
37
|
+
|
|
38
|
+
namespace jsi_install::cvr {
|
|
39
|
+
void install_captureImageData(Runtime &jsiRuntime);
|
|
40
|
+
void install_getCurrentDeskewedImages(Runtime &jsiRuntime);
|
|
41
|
+
void install_getCurrentEnhancedImages(Runtime &jsiRuntime);
|
|
42
|
+
void install_captureFile(Runtime &jsiRuntime);
|
|
43
|
+
void install_captureFileBytes(Runtime &jsiRuntime);
|
|
44
|
+
void install_cvr_getOriginalImage(Runtime &jsiRuntime);
|
|
45
|
+
}//namespace jsi_install::cvr
|
|
46
|
+
|
|
47
|
+
Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string templateName);
|
|
48
|
+
Object captureFile(string filePath, Runtime &rt, string templateName);
|
|
49
|
+
Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName);
|
|
50
|
+
Array getCurrentDeskewedImages(Runtime &runtime);
|
|
51
|
+
Array getCurrentEnhancedImages(Runtime &runtime);
|
|
52
|
+
ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId);
|
|
53
|
+
|
|
54
|
+
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_CVR_JSICVR_H_
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#include "JsiDbr.h"
|
|
6
|
+
namespace jsiConversion::dbr {
|
|
7
|
+
void jBarcodeResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem) {
|
|
8
|
+
env->PushLocalFrame(10);
|
|
9
|
+
jclass clsItem = env->FindClass("com/dynamsoft/dbr/BarcodeResultItem");
|
|
10
|
+
jmethodID getFormat = env->GetMethodID(clsItem, "getFormat", "()J");
|
|
11
|
+
jsItem.setProperty(rt, "format", BigInt::fromInt64(rt, env->CallLongMethod(jItem, getFormat)));
|
|
12
|
+
|
|
13
|
+
SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, formatString, getFormatString)
|
|
14
|
+
SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, text, getText)
|
|
15
|
+
|
|
16
|
+
jmethodID getLocation = env->GetMethodID(clsItem, "getLocation", "()Lcom/dynamsoft/core/basic_structures/Quadrilateral;");
|
|
17
|
+
Object jsQuad(rt);
|
|
18
|
+
jsiConversion::core::jQuadToJsObject(rt, env, env->CallObjectMethod(jItem, getLocation), jsQuad);
|
|
19
|
+
jsItem.setProperty(rt, "location", jsQuad);
|
|
20
|
+
|
|
21
|
+
jmethodID getConfidence = env->GetMethodID(clsItem, "getConfidence", "()I");
|
|
22
|
+
jsItem.setProperty(rt, "confidence", env->CallIntMethod(jItem, getConfidence));
|
|
23
|
+
|
|
24
|
+
jmethodID getAngle = env->GetMethodID(clsItem, "getAngle", "()I");
|
|
25
|
+
jsItem.setProperty(rt, "angle", env->CallIntMethod(jItem, getAngle));
|
|
26
|
+
|
|
27
|
+
jmethodID getModuleSize = env->GetMethodID(clsItem, "getModuleSize", "()I");
|
|
28
|
+
jsItem.setProperty(rt, "moduleSize", env->CallIntMethod(jItem, getModuleSize));
|
|
29
|
+
|
|
30
|
+
jmethodID isMirrored = env->GetMethodID(clsItem, "isMirrored", "()Z");
|
|
31
|
+
jsItem.setProperty(rt, "isMirrored", (bool) env->CallBooleanMethod(jItem, isMirrored));
|
|
32
|
+
|
|
33
|
+
jmethodID isDPM = env->GetMethodID(clsItem, "isDPM", "()Z");
|
|
34
|
+
jsItem.setProperty(rt, "isDPM", (bool) env->CallBooleanMethod(jItem, isDPM));
|
|
35
|
+
|
|
36
|
+
env->PopLocalFrame(nullptr);
|
|
37
|
+
}
|
|
38
|
+
}//namespace jsiConversion::dbr
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DBR_JSIDBR_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DBR_JSIDBR_H_
|
|
7
|
+
|
|
8
|
+
#include "jni.h"
|
|
9
|
+
#include "jsi/jsi.h"
|
|
10
|
+
#include "JsiCore.h"
|
|
11
|
+
|
|
12
|
+
#define SET_STRING_PROPERTY_BY_METHOD(jClass, jObj, jsObj, propertyName, methodName) \
|
|
13
|
+
jmethodID methodName =env->GetMethodID(jClass, #methodName, "()Ljava/lang/String;"); \
|
|
14
|
+
jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName); \
|
|
15
|
+
const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
|
|
16
|
+
jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
|
|
17
|
+
if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
|
|
18
|
+
|
|
19
|
+
using namespace std;
|
|
20
|
+
using namespace facebook::jsi;
|
|
21
|
+
|
|
22
|
+
namespace jsiConversion::dbr {
|
|
23
|
+
void jBarcodeResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DBR_JSIDBR_H_
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/29.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#include "JsiDce.h"
|
|
6
|
+
#define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
|
|
7
|
+
|
|
8
|
+
jobject jImageEditorViewModule = nullptr;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
void install_editorView_methods(Runtime &jsiRuntime) {
|
|
12
|
+
jsi_install::dce::install_editorView_setOriginalImage(jsiRuntime);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
extern "C"
|
|
16
|
+
JNIEXPORT void JNICALL
|
|
17
|
+
Java_com_dynamsoft_reactnativelib_dce_ImageEditorViewModuleImpl_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
|
|
18
|
+
if (!env->IsSameObject(jImageEditorViewModule, thiz)) {
|
|
19
|
+
jImageEditorViewModule = env->NewWeakGlobalRef(thiz);
|
|
20
|
+
}
|
|
21
|
+
auto rt = reinterpret_cast<Runtime *>(jsiPtr);
|
|
22
|
+
install_editorView_methods(*rt);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
namespace jsi_install::dce {
|
|
27
|
+
void install_editorView_setOriginalImage(Runtime &jsiRuntime) {
|
|
28
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "editorView_setOriginalImage");
|
|
29
|
+
if(!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
30
|
+
auto setOriginalImageFcn = Function::createFromHostFunction(jsiRuntime, nameID, 2, JSI_FUNC {
|
|
31
|
+
auto imageDataObj = arguments[1].asObject(runtime);
|
|
32
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
33
|
+
setOriginalImageDataHOToEditorView(runtime, imageDataHostObject, (int) arguments[0].asNumber());
|
|
34
|
+
return {};
|
|
35
|
+
});
|
|
36
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(setOriginalImageFcn));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}//namespace jsi_install::dce
|
|
40
|
+
|
|
41
|
+
void setOriginalImageDataHOToEditorView(Runtime &rt, ImageDataHostObject &imageDataHO, int viewTag) {
|
|
42
|
+
JNIEnv *env;
|
|
43
|
+
bool needDetach = false;
|
|
44
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
45
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
46
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
47
|
+
needDetach = true;
|
|
48
|
+
}
|
|
49
|
+
auto clzImageEditorViewModule = env->GetObjectClass(jImageEditorViewModule);
|
|
50
|
+
auto setOriginalImageCalledInJSI =
|
|
51
|
+
env->GetMethodID(clzImageEditorViewModule, "setOriginalImageCalledInJSI", "(Lcom/dynamsoft/core/basic_structures/ImageData;I)V");
|
|
52
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
53
|
+
env->CallVoidMethod(jImageEditorViewModule, setOriginalImageCalledInJSI, jImageData, viewTag);
|
|
54
|
+
env->DeleteLocalRef(clzImageEditorViewModule);
|
|
55
|
+
env->DeleteLocalRef(jImageData);
|
|
56
|
+
if (needDetach) {
|
|
57
|
+
gJvm->DetachCurrentThread();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/29.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCE_JSIDCE_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCE_JSIDCE_H_
|
|
7
|
+
#include "JsiCore.h"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
namespace jsi_install::dce {
|
|
12
|
+
void install_editorView_setOriginalImage(Runtime &jsiRuntime);
|
|
13
|
+
}//namespace jsi_install::dce
|
|
14
|
+
|
|
15
|
+
void setOriginalImageDataHOToEditorView(Runtime &rt, ImageDataHostObject &imageDataHO, int viewTag);
|
|
16
|
+
|
|
17
|
+
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCE_JSIDCE_H_
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#include "JsiDcp.h"
|
|
6
|
+
|
|
7
|
+
namespace jsiConversion::dcp {
|
|
8
|
+
void jParsedResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem) {
|
|
9
|
+
jclass clsItem = env->FindClass("com/dynamsoft/dcp/ParsedResultItem");
|
|
10
|
+
|
|
11
|
+
SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, codeType, getCodeType)
|
|
12
|
+
SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, jsonString, getJsonString)
|
|
13
|
+
|
|
14
|
+
auto getParsedFields = env->GetMethodID(clsItem, "getParsedFields", "()Ljava/util/HashMap;");
|
|
15
|
+
jobject j_parsedFields = env->CallObjectMethod(jItem, getParsedFields);
|
|
16
|
+
|
|
17
|
+
jclass clsHashMap = env->FindClass("java/util/HashMap");
|
|
18
|
+
jmethodID keySet = env->GetMethodID(clsHashMap, "keySet", "()Ljava/util/Set;");
|
|
19
|
+
|
|
20
|
+
jclass clsSet = env->FindClass("java/util/Set");
|
|
21
|
+
jmethodID toArray = env->GetMethodID(clsSet, "toArray", "()[Ljava/lang/Object;");
|
|
22
|
+
|
|
23
|
+
if (!j_parsedFields) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
auto j_keySet = env->CallObjectMethod(j_parsedFields, keySet);
|
|
27
|
+
auto j_keyArray = (jobjectArray) env->CallObjectMethod(j_keySet, toArray);
|
|
28
|
+
int count = env->GetArrayLength(j_keyArray);
|
|
29
|
+
auto getFieldValue = env->GetMethodID(clsItem, "getFieldValue", "(Ljava/lang/String;)Ljava/lang/String;");
|
|
30
|
+
auto getFieldMappingStatus = env->GetMethodID(clsItem, "getFieldMappingStatus", "(Ljava/lang/String;)I");
|
|
31
|
+
auto getFieldValidationStatus = env->GetMethodID(clsItem, "getFieldValidationStatus", "(Ljava/lang/String;)I");
|
|
32
|
+
|
|
33
|
+
Object js_parsedFields(rt);
|
|
34
|
+
for (int i = 0; i < count; ++i) {
|
|
35
|
+
Object js_itemFiled(rt);
|
|
36
|
+
auto j_key = (jstring) env->GetObjectArrayElement(j_keyArray, i);
|
|
37
|
+
auto p_key = j_key?env->GetStringUTFChars(j_key, nullptr):"";
|
|
38
|
+
if(std::string(p_key).empty()) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
SET_STRING_PROPERTY_BY_METHOD2(jItem, js_itemFiled, value, getFieldValue, j_key)
|
|
42
|
+
js_itemFiled.setProperty(rt, "mappingStatus", env->CallIntMethod(jItem, getFieldMappingStatus, j_key));
|
|
43
|
+
js_itemFiled.setProperty(rt, "fieldValidationStatus", env->CallIntMethod(jItem, getFieldValidationStatus, j_key));
|
|
44
|
+
js_parsedFields.setProperty(rt, p_key, js_itemFiled);
|
|
45
|
+
if(j_key) {
|
|
46
|
+
env->ReleaseStringUTFChars(j_key, p_key);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
jsItem.setProperty(rt, "parsedFields", js_parsedFields);
|
|
50
|
+
}
|
|
51
|
+
}//namespace jsiConversion::dcp
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCP_JSIDCP_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCP_JSIDCP_H_
|
|
7
|
+
|
|
8
|
+
#define SET_STRING_PROPERTY_BY_METHOD(jClass, jObj, jsObj, propertyName, methodName) \
|
|
9
|
+
jmethodID methodName =env->GetMethodID(jClass, #methodName, "()Ljava/lang/String;"); \
|
|
10
|
+
jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName); \
|
|
11
|
+
const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
|
|
12
|
+
jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
|
|
13
|
+
if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
#define SET_STRING_PROPERTY_BY_METHOD2(jObj, jsObj, propertyName, methodName, ...) \
|
|
17
|
+
jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName, __VA_ARGS__); \
|
|
18
|
+
const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
|
|
19
|
+
jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
|
|
20
|
+
if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
#include "jni.h"
|
|
24
|
+
#include "jsi/jsi.h"
|
|
25
|
+
#include "JsiCore.h"
|
|
26
|
+
|
|
27
|
+
namespace jsiConversion::dcp{
|
|
28
|
+
void jParsedResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCP_JSIDCP_H_
|