dynamsoft-capture-vision-react-native 3.4.1300 → 3.4.3010

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.
Files changed (198) hide show
  1. package/LICENSE +4 -4
  2. package/README.md +62 -62
  3. package/android/README.md +14 -14
  4. package/android/build.gradle +167 -163
  5. package/android/gradle.properties +20 -20
  6. package/android/settings.gradle +5 -5
  7. package/android/src/main/AndroidManifest.xml +6 -6
  8. package/android/src/main/AndroidManifest_noPackage.xml +5 -5
  9. package/android/src/main/cpp/CMakeLists.txt +21 -21
  10. package/android/src/main/cpp/ImgHO.cpp +94 -94
  11. package/android/src/main/cpp/ImgHO.h +34 -34
  12. package/android/src/main/cpp/JsiCore.cpp +296 -296
  13. package/android/src/main/cpp/JsiCore.h +51 -51
  14. package/android/src/main/cpp/JsiCvr.cpp +332 -332
  15. package/android/src/main/cpp/JsiCvr.h +54 -54
  16. package/android/src/main/cpp/JsiDbr.cpp +283 -283
  17. package/android/src/main/cpp/JsiDbr.h +26 -26
  18. package/android/src/main/cpp/JsiDce.cpp +59 -59
  19. package/android/src/main/cpp/JsiDce.h +17 -17
  20. package/android/src/main/cpp/JsiDcp.cpp +51 -51
  21. package/android/src/main/cpp/JsiDcp.h +31 -31
  22. package/android/src/main/cpp/JsiDdn.cpp +50 -50
  23. package/android/src/main/cpp/JsiDdn.h +28 -28
  24. package/android/src/main/cpp/JsiDlr.cpp +60 -60
  25. package/android/src/main/cpp/JsiDlr.h +26 -26
  26. package/android/src/main/cpp/JsiUtility.cpp +604 -604
  27. package/android/src/main/cpp/JsiUtility.h +26 -26
  28. package/android/src/main/cpp/RawBuffer.cpp +23 -23
  29. package/android/src/main/cpp/RawBuffer.h +24 -24
  30. package/android/src/main/cpp/android_log.h +14 -14
  31. package/android/src/main/dysJniLibsFor86/debug/arm64-v8a/librn_dys.so +0 -0
  32. package/android/src/main/dysJniLibsFor86/debug/armeabi-v7a/librn_dys.so +0 -0
  33. package/android/src/main/dysJniLibsFor86/debug/x86/librn_dys.so +0 -0
  34. package/android/src/main/dysJniLibsFor86/debug/x86_64/librn_dys.so +0 -0
  35. package/android/src/main/dysJniLibsFor86/release/arm64-v8a/librn_dys.so +0 -0
  36. package/android/src/main/dysJniLibsFor86/release/armeabi-v7a/librn_dys.so +0 -0
  37. package/android/src/main/dysJniLibsFor86/release/x86/librn_dys.so +0 -0
  38. package/android/src/main/dysJniLibsFor86/release/x86_64/librn_dys.so +0 -0
  39. package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +137 -137
  40. package/android/src/main/java/com/dynamsoft/reactnativelib/CameraViewManager.kt +62 -62
  41. package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +125 -125
  42. package/android/src/main/java/com/dynamsoft/reactnativelib/DynamsoftBaseModule.kt +8 -8
  43. package/android/src/main/java/com/dynamsoft/reactnativelib/ISAModule.kt +73 -73
  44. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +14 -14
  45. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +35 -35
  46. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageManagerModule.kt +15 -15
  47. package/android/src/main/java/com/dynamsoft/reactnativelib/LicenseModule.kt +29 -29
  48. package/android/src/main/java/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +83 -83
  49. package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +32 -32
  50. package/android/src/main/java/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -41
  51. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/Basic.kt +44 -44
  52. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCore.kt +50 -50
  53. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCvr.kt +129 -129
  54. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDBR.kt +157 -157
  55. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCE.kt +110 -110
  56. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCP.kt +49 -49
  57. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDDN.kt +85 -85
  58. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDLR.kt +72 -72
  59. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ImageUtil.kt +58 -58
  60. package/android/src/main/java/com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl.kt +120 -120
  61. package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +306 -306
  62. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +247 -247
  63. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraLifeCycleOwner.java +14 -14
  64. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +77 -77
  65. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +15 -15
  66. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +110 -110
  67. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +20 -20
  68. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNImageEditorView.kt +19 -19
  69. package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +39 -39
  70. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +120 -120
  71. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +111 -111
  72. package/app.plugin.js +21 -21
  73. package/dynamsoft-capture-vision-react-native.podspec +24 -24
  74. package/ios/CPP/DSImageData+HostObject.h +18 -18
  75. package/ios/CPP/DSImageData+HostObject.mm +38 -38
  76. package/ios/CPP/ImageDataHostObject.cpp +87 -87
  77. package/ios/CPP/ImageDataHostObject.hpp +35 -35
  78. package/ios/CPP/MutableRawBuffer.cpp +23 -23
  79. package/ios/CPP/MutableRawBuffer.hpp +23 -23
  80. package/ios/CPP/RNDynamsoft+JSI.h +22 -22
  81. package/ios/CPP/RNDynamsoft+JSI.mm +303 -303
  82. package/ios/CPP/RNDynamsoft+Json.h +93 -93
  83. package/ios/CPP/RNDynamsoft+Json.m +733 -733
  84. package/ios/CPP/YeetJSIUtils.h +56 -56
  85. package/ios/CPP/YeetJSIUtils.mm +208 -208
  86. package/ios/RNDynamsoftCameraView.h +31 -31
  87. package/ios/RNDynamsoftCameraView.m +108 -108
  88. package/ios/RNDynamsoftCameraViewManager.h +14 -14
  89. package/ios/RNDynamsoftCameraViewManager.m +195 -195
  90. package/ios/RNDynamsoftCaptureVisionRouter.h +18 -18
  91. package/ios/RNDynamsoftCaptureVisionRouter.mm +532 -532
  92. package/ios/RNDynamsoftImageEditorView.h +17 -17
  93. package/ios/RNDynamsoftImageEditorView.m +25 -25
  94. package/ios/RNDynamsoftImageEditorViewManager.h +14 -14
  95. package/ios/RNDynamsoftImageEditorViewManager.mm +183 -183
  96. package/ios/RNDynamsoftImageManager.h +14 -14
  97. package/ios/RNDynamsoftImageManager.mm +369 -369
  98. package/ios/RNDynamsoftImageSourceAdapter.h +19 -19
  99. package/ios/RNDynamsoftImageSourceAdapter.mm +255 -255
  100. package/ios/RNDynamsoftLicense.h +14 -14
  101. package/ios/RNDynamsoftLicense.m +62 -62
  102. package/ios/RNDynamsoftMultiCrossFilter.h +14 -14
  103. package/ios/RNDynamsoftMultiCrossFilter.m +145 -145
  104. package/ios/RNDynamsoftVersions.h +13 -13
  105. package/ios/RNDynamsoftVersions.m +27 -27
  106. package/package.json +48 -48
  107. package/src/NativeDynamsoftVersionsModule.tsx +20 -20
  108. package/src/VersionsModule.tsx +7 -7
  109. package/src/core/CapturedResultBase.tsx +18 -18
  110. package/src/core/CapturedResultItem.tsx +23 -23
  111. package/src/core/CoreModule.tsx +9 -9
  112. package/src/core/DSRect.tsx +29 -29
  113. package/src/core/EnumCaptureResultItemType.tsx +52 -52
  114. package/src/core/EnumColourChannelUsageType.tsx +26 -26
  115. package/src/core/EnumCrossVerificationStatus.tsx +46 -46
  116. package/src/core/EnumGrayscaleEnhancementMode.tsx +46 -46
  117. package/src/core/EnumGrayscaleTransformationMode.tsx +35 -35
  118. package/src/core/EnumImageFileFormat.tsx +6 -6
  119. package/src/core/EnumPixelFormat.tsx +53 -53
  120. package/src/core/ImageData.tsx +87 -87
  121. package/src/core/ImageSourceAdapter.tsx +160 -160
  122. package/src/core/NativeDynamsoftImageSourceAdapterModule.tsx +29 -29
  123. package/src/core/Point.tsx +13 -13
  124. package/src/core/Quadrilateral.tsx +12 -12
  125. package/src/core/index.tsx +18 -18
  126. package/src/cvr/CaptureVisionRouter.tsx +683 -683
  127. package/src/cvr/CaptureVisionRouterModule.tsx +9 -9
  128. package/src/cvr/CapturedResult.tsx +123 -123
  129. package/src/cvr/CapturedResultFilter.tsx +13 -13
  130. package/src/cvr/CapturedResultReceiver.tsx +71 -71
  131. package/src/cvr/EnumPresetTemplate.tsx +81 -81
  132. package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +25 -25
  133. package/src/cvr/SimplifiedCaptureVisionSettings.tsx +61 -61
  134. package/src/cvr/index.tsx +11 -11
  135. package/src/dbr/BarcodeDetails.tsx +51 -51
  136. package/src/dbr/BarcodeReaderModule.tsx +9 -9
  137. package/src/dbr/BarcodeResultItem.tsx +65 -65
  138. package/src/dbr/DecodedBarcodesResult.tsx +14 -14
  139. package/src/dbr/ECISegment.tsx +23 -23
  140. package/src/dbr/EnumBarcodeFormat.tsx +112 -112
  141. package/src/dbr/EnumDeblurMode.tsx +29 -29
  142. package/src/dbr/EnumLocalizationMode.tsx +27 -27
  143. package/src/dbr/EnumQRCodeErrorCorrectionLevel.tsx +6 -6
  144. package/src/dbr/SimplifiedBarcodeReaderSettings.tsx +80 -80
  145. package/src/dbr/index.tsx +9 -9
  146. package/src/dce/CameraEnhancer.tsx +254 -254
  147. package/src/dce/CameraEnhancerModule.tsx +9 -9
  148. package/src/dce/CameraView.tsx +100 -100
  149. package/src/dce/DynamsoftCameraViewNativeComponent.ts +96 -96
  150. package/src/dce/DynamsoftImageEditorViewNativeComponent.ts +9 -9
  151. package/src/dce/EnumCameraPosition.tsx +25 -25
  152. package/src/dce/EnumDrawingLayerId.tsx +17 -17
  153. package/src/dce/EnumEnhancedFeatures.tsx +24 -24
  154. package/src/dce/EnumFocusMode.tsx +6 -6
  155. package/src/dce/EnumResolution.tsx +8 -8
  156. package/src/dce/EnumTorchState.tsx +10 -10
  157. package/src/dce/FeedBack.tsx +28 -28
  158. package/src/dce/ImageEditorView.tsx +131 -131
  159. package/src/dce/NativeDynamsoftCameraViewModule.tsx +47 -47
  160. package/src/dce/NativeDynamsoftImageEditorViewModule.ts +9 -9
  161. package/src/dce/index.tsx +13 -13
  162. package/src/dcp/CodeParserDedicatorModule.tsx +9 -9
  163. package/src/dcp/CodeParserModule.tsx +9 -9
  164. package/src/dcp/EnumMappingStatus.tsx +14 -14
  165. package/src/dcp/EnumValidationStatus.tsx +14 -14
  166. package/src/dcp/ParsedResult.tsx +14 -14
  167. package/src/dcp/ParsedResultItem.tsx +50 -50
  168. package/src/dcp/index.tsx +8 -8
  169. package/src/ddn/DeskewedImageResultItem.tsx +40 -40
  170. package/src/ddn/DetectedQuadResultItem.tsx +31 -31
  171. package/src/ddn/DocumentNormalizerModule.tsx +9 -9
  172. package/src/ddn/EnhancedImageResultItem.tsx +20 -20
  173. package/src/ddn/EnumImageColourMode.tsx +14 -14
  174. package/src/ddn/ProcessedDocumentResult.tsx +27 -27
  175. package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +65 -65
  176. package/src/ddn/index.tsx +11 -11
  177. package/src/dip/ImageProcessingModule.tsx +9 -9
  178. package/src/dip/index.tsx +1 -1
  179. package/src/dlr/CharacterResult.tsx +28 -28
  180. package/src/dlr/LabelRecognizerModule.tsx +9 -9
  181. package/src/dlr/RecognizedTextLinesResult.tsx +19 -19
  182. package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +33 -33
  183. package/src/dlr/TextLineResultItem.tsx +41 -41
  184. package/src/dlr/index.tsx +8 -8
  185. package/src/index.tsx +13 -13
  186. package/src/license/LicenseManager.tsx +49 -49
  187. package/src/license/LicenseModule.tsx +9 -9
  188. package/src/license/NativeDynamsoftLicenseModule.tsx +7 -7
  189. package/src/license/index.tsx +7 -7
  190. package/src/utility/CrossVerificationCriteria.tsx +11 -11
  191. package/src/utility/EnumFilterType.tsx +5 -5
  192. package/src/utility/ImageManager.tsx +348 -348
  193. package/src/utility/MultiFrameResultCrossFilter.tsx +183 -183
  194. package/src/utility/NativeDynamsoftImageManagerModule.tsx +7 -7
  195. package/src/utility/NativeDynamsoftMultiCrossFilterModule.tsx +18 -18
  196. package/src/utility/UtilityModule.tsx +9 -9
  197. package/src/utility/index.tsx +4 -4
  198. package/android/.gitignore +0 -4
@@ -1,332 +1,332 @@
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
- if (jCvrModule) {
27
- env->DeleteWeakGlobalRef(jCvrModule);
28
- }
29
- jCvrModule = env->NewWeakGlobalRef(thiz);
30
- }
31
- auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
32
- if (runtime) {
33
- install_cvrMethods(*runtime);
34
- }
35
- }
36
-
37
- namespace jsiConversion::cvr {
38
- void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult) {
39
- env->PushLocalFrame(16);
40
- jclass jclsCapturedResult = env->FindClass("com/dynamsoft/cvr/CapturedResult");
41
- SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, originalImageHashId)
42
- SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, errorMessage)
43
-
44
- jfieldID errorCode = env->GetFieldID(jclsCapturedResult, "errorCode", "I");
45
- jsCapturedResult.setProperty(rt, "errorCode", env->GetIntField(jCapturedResult, errorCode));
46
-
47
- jfieldID fiMatrix = env->GetFieldID(jclsCapturedResult, "rotationTransformMatrix", "Landroid/graphics/Matrix;");
48
- jobject jMatrix = env->GetObjectField(jCapturedResult, fiMatrix);
49
- if(jMatrix) {
50
- jclass clsMatrix = env->GetObjectClass(jMatrix);
51
- jmethodID getValues = env->GetMethodID(clsMatrix, "getValues", "([F)V");
52
- jfloatArray jValues = env->NewFloatArray(9);
53
- env->CallVoidMethod(jMatrix, getValues, jValues);
54
- float cValues[9];
55
- env->GetFloatArrayRegion(jValues, 0, 9, cValues);
56
- Array jsMatrix(rt, 9);
57
- for (int i = 0; i < 9; ++i) {
58
- jsMatrix.setValueAtIndex(rt, i, cValues[i]);
59
- }
60
- env->DeleteLocalRef(clsMatrix);
61
- env->DeleteLocalRef(jValues);
62
- env->DeleteLocalRef(jMatrix);
63
- jsCapturedResult.setProperty(rt, "rotationTransformMatrix", jsMatrix);
64
- }
65
-
66
- jfieldID items = env->GetFieldID(jclsCapturedResult, "items", "[Lcom/dynamsoft/core/basic_structures/CapturedResultItem;");
67
- jobjectArray jItems = (jobjectArray) env->GetObjectField(jCapturedResult, items);
68
- Array jsItemArray(rt, 0);
69
- int *types = nullptr;
70
-
71
- jsiConversion::core::jCapturedItemArrayToJsArray(rt, env, jItems, types, jsItemArray);
72
- for (int i = 0; i < jsItemArray.size(rt); ++i) {
73
- Object jsItem = jsItemArray.getValueAtIndex(rt, i).asObject(rt);
74
- jobject jItem = env->GetObjectArrayElement(jItems, i);
75
- int type = types[i];
76
- if (type == CRIT_BARCODE) {
77
- jsiConversion::dbr::jBarcodeResultItemToJsObject(rt, env, jItem, jsItem);
78
- } else if (type == CRIT_TEXT_LINE) {
79
- jsiConversion::dlr::jTextLineResultItemToJsObject(rt, env, jItem, jsItem);
80
- } else if (type == CRIT_DETECTED_QUAD) {
81
- jsiConversion::ddn::jDetectedQuadResultItemToJsObject(rt, env, jItem, jsItem);
82
- } else if (type == CRIT_DESKEWED_IMAGE) {
83
- jsiConversion::ddn::jDeskewedImageResultItemToJsObject(rt, env, jItem, jsItem);
84
- } else if (type == CRIT_PARSED_RESULT) {
85
- jsiConversion::dcp::jParsedResultItemToJsObject(rt, env, jItem, jsItem);
86
- } else if(type == CRIT_ENHANCED_IMAGE) {
87
- jsiConversion::ddn::jEnhancedImageResultItemToJsObject(rt, env, jItem, jsItem);
88
- }
89
- env->DeleteLocalRef(jItem);
90
- }
91
- if(types) {
92
- delete[] types;
93
- }
94
- jsCapturedResult.setProperty(rt, "items", jsItemArray);
95
- env->PopLocalFrame(nullptr);
96
- }
97
- }//namespace jsiConversion::cvr
98
-
99
- namespace jsi_install::cvr {
100
- void install_captureImageData(Runtime &jsiRuntime) {
101
- auto nameId = PropNameID::forAscii(jsiRuntime, "captureImageData");
102
- if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
103
- auto captureImageDataFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
104
- auto obj = arguments[0].asObject(runtime);
105
- auto imgHO = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
106
- Object jsCapturedResult = captureImageDataHO(imgHO, runtime, arguments[1].asString(runtime).utf8(runtime));
107
- return jsCapturedResult;
108
- });
109
- jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureImageDataFunc));
110
- }
111
- }
112
- void install_captureFile(Runtime &jsiRuntime) {
113
- auto nameId = PropNameID::forAscii(jsiRuntime, "captureFile");
114
- if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
115
- auto captureFileFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
116
- auto filePath = arguments[0].asString(runtime);
117
- Object jsCapturedResult = captureFile(filePath.utf8(runtime), runtime, arguments[1].asString(runtime).utf8(runtime));
118
- return jsCapturedResult;
119
- });
120
- jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileFunc));
121
- }
122
- }
123
- void install_captureFileBytes(Runtime &jsiRuntime) {
124
- auto nameId = PropNameID::forAscii(jsiRuntime, "captureFileBytes");
125
- if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
126
- auto captureFileBytesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
127
- ArrayBuffer fileBytes = arguments[0].asObject(runtime).getArrayBuffer(runtime);
128
- Object jsCapturedResult = captureFileBytes(fileBytes, runtime, arguments[1].asString(runtime).utf8(runtime));
129
- return jsCapturedResult;
130
- });
131
- jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileBytesFunc));
132
- }
133
- }
134
- void install_getCurrentDeskewedImages(Runtime &jsiRuntime) {
135
- auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentDeskewedImages");
136
- if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
137
- auto getCurrentDeskewedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
138
- Array images = getCurrentDeskewedImages(runtime);
139
- return images;
140
- });
141
- jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentDeskewedImagesFunc));
142
- }
143
- }
144
- void install_getCurrentEnhancedImages(Runtime &jsiRuntime) {
145
- auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentEnhancedImages");
146
- if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
147
- auto getCurrentEnhancedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
148
- Array images = getCurrentEnhancedImages(runtime);
149
- return images;
150
- });
151
- jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentEnhancedImagesFunc));
152
- }
153
- }
154
- void install_cvr_getOriginalImage(Runtime &jsiRuntime) {
155
- auto nameId = PropNameID::forAscii(jsiRuntime, "cvr_getOriginalImage");
156
- if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
157
- auto cvr_getOriginalImageFunc = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
158
- string hashId = arguments[0].asString(runtime).utf8(runtime);
159
- if (hashId.empty()) {
160
- return {};
161
- }
162
- ImageDataHostObject imgHO = getOriginalImage(runtime, hashId);
163
- if(imgHO.width == 0 && imgHO.height == 0) {
164
- return {};
165
- } else {
166
- return Object::createFromHostObject(runtime, make_shared<ImageDataHostObject>(imgHO));
167
- }
168
- });
169
- jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(cvr_getOriginalImageFunc));
170
- }
171
- }
172
- }//namespace jsi_install::cvr
173
-
174
-
175
- Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string templateName) {
176
- JNIEnv *env;
177
- bool needDetach = false;
178
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
179
- if (state == JNI_EDETACHED || env == nullptr) {
180
- gJvm->AttachCurrentThread(&env, nullptr);
181
- needDetach = true;
182
- }
183
- env->PushLocalFrame(16);
184
- auto clzCvrModule = env->GetObjectClass(jCvrModule);
185
- auto captureMeth = env->GetMethodID(clzCvrModule, "captureImageDataCalledInJSI",
186
- "(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
187
- auto imageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
188
- auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, imageData, env->NewStringUTF(templateName.c_str()));
189
- Object jsResult(rt);
190
- jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
191
- env->PopLocalFrame(nullptr);
192
- if (needDetach) {
193
- gJvm->DetachCurrentThread();
194
- }
195
- return jsResult;
196
- }
197
-
198
- Object captureFile(string filePath, Runtime &rt, string templateName) {
199
- JNIEnv *env;
200
- bool needDetach = false;
201
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
202
- if (state == JNI_EDETACHED || env == nullptr) {
203
- gJvm->AttachCurrentThread(&env, nullptr);
204
- needDetach = true;
205
- }
206
- env->PushLocalFrame(8);
207
- auto clzCvrModule = env->GetObjectClass(jCvrModule);
208
- auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileCalledInJSI",
209
- "(Ljava/lang/String;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
210
- auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, env->NewStringUTF(filePath.c_str()), env->NewStringUTF(templateName.c_str()));
211
- Object jsResult(rt);
212
- jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
213
- env->PopLocalFrame(nullptr);
214
- if (needDetach) {
215
- gJvm->DetachCurrentThread();
216
- }
217
- return jsResult;
218
- }
219
- Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName) {
220
- JNIEnv *env;
221
- bool needDetach = false;
222
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
223
- if (state == JNI_EDETACHED || env == nullptr) {
224
- gJvm->AttachCurrentThread(&env, nullptr);
225
- needDetach = true;
226
- }
227
- env->PushLocalFrame(8);
228
- auto clzCvrModule = env->GetObjectClass(jCvrModule);
229
- auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileBytesCalledInJSI",
230
- "([BLjava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
231
- auto pBytes = (jbyte *) fileBytes.data(rt);
232
- int len = fileBytes.length(rt);
233
- jbyteArray jBytes = env->NewByteArray(len);
234
- env->SetByteArrayRegion(jBytes, 0, len, (jbyte *) pBytes);
235
- auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, jBytes, env->NewStringUTF(templateName.c_str()));
236
- Object jsResult(rt);
237
- jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
238
- env->PopLocalFrame(nullptr);
239
- if (needDetach) {
240
- gJvm->DetachCurrentThread();
241
- }
242
- return jsResult;
243
- }
244
-
245
- Array getCurrentDeskewedImages(Runtime &runtime) {
246
- JNIEnv *env;
247
- bool needDetach = false;
248
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
249
- if (state == JNI_EDETACHED || env == nullptr) {
250
- gJvm->AttachCurrentThread(&env, nullptr);
251
- needDetach = true;
252
- }
253
- auto clzCvrModule = env->GetObjectClass(jCvrModule);
254
- auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentDeskewedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
255
- auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
256
- int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
257
- Array array(runtime, count);
258
- for (int i = 0; i < count; ++i) {
259
- auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
260
- ImageDataHostObject imgHO;
261
- jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
262
- auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
263
- array.setValueAtIndex(runtime, i, obj);
264
- env->DeleteLocalRef(imageData);
265
- }
266
- env->DeleteLocalRef(clzCvrModule);
267
- if (jCurrentImages) {
268
- env->DeleteLocalRef(jCurrentImages);
269
- }
270
- env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
271
- if (needDetach) {
272
- gJvm->DetachCurrentThread();
273
- }
274
- return array;
275
- }
276
-
277
- Array getCurrentEnhancedImages(Runtime &runtime) {
278
- JNIEnv *env;
279
- bool needDetach = false;
280
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
281
- if (state == JNI_EDETACHED || env == nullptr) {
282
- gJvm->AttachCurrentThread(&env, nullptr);
283
- needDetach = true;
284
- }
285
- auto clzCvrModule = env->GetObjectClass(jCvrModule);
286
- auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentEnhancedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
287
- auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
288
- int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
289
- Array array(runtime, count);
290
- for (int i = 0; i < count; ++i) {
291
- auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
292
- ImageDataHostObject imgHO;
293
- jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
294
- auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
295
- array.setValueAtIndex(runtime, i, obj);
296
- env->DeleteLocalRef(imageData);
297
- }
298
- env->DeleteLocalRef(clzCvrModule);
299
- if (jCurrentImages) {
300
- env->DeleteLocalRef(jCurrentImages);
301
- }
302
- env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
303
- if (needDetach) {
304
- gJvm->DetachCurrentThread();
305
- }
306
- return array;
307
- }
308
-
309
- ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId) {
310
- JNIEnv *env;
311
- bool needDetach = false;
312
- int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
313
- if (state == JNI_EDETACHED || env == nullptr) {
314
- gJvm->AttachCurrentThread(&env, nullptr);
315
- needDetach = true;
316
- }
317
- env->PushLocalFrame(8);
318
- auto clzCvrModule = env->GetObjectClass(jCvrModule);
319
- auto getOriginalImageCalledInJSI =
320
- env->GetMethodID(clzCvrModule, "getOriginalImageCalledInJSI", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageData;");
321
- auto jImageData = env->CallObjectMethod(jCvrModule, getOriginalImageCalledInJSI, env->NewStringUTF(imageHashId.c_str()));
322
- ImageDataHostObject imgHO;
323
- if (jImageData != nullptr) {
324
- jsiConversion::core::getHOFromJImageData(env, jImageData, imgHO);
325
- }
326
- env->PopLocalFrame(nullptr);
327
- if (needDetach) {
328
- gJvm->DetachCurrentThread();
329
- }
330
- return imgHO;
331
- }
332
-
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
+ if (jCvrModule) {
27
+ env->DeleteWeakGlobalRef(jCvrModule);
28
+ }
29
+ jCvrModule = env->NewWeakGlobalRef(thiz);
30
+ }
31
+ auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
32
+ if (runtime) {
33
+ install_cvrMethods(*runtime);
34
+ }
35
+ }
36
+
37
+ namespace jsiConversion::cvr {
38
+ void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult) {
39
+ env->PushLocalFrame(16);
40
+ jclass jclsCapturedResult = env->FindClass("com/dynamsoft/cvr/CapturedResult");
41
+ SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, originalImageHashId)
42
+ SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, errorMessage)
43
+
44
+ jfieldID errorCode = env->GetFieldID(jclsCapturedResult, "errorCode", "I");
45
+ jsCapturedResult.setProperty(rt, "errorCode", env->GetIntField(jCapturedResult, errorCode));
46
+
47
+ jfieldID fiMatrix = env->GetFieldID(jclsCapturedResult, "rotationTransformMatrix", "Landroid/graphics/Matrix;");
48
+ jobject jMatrix = env->GetObjectField(jCapturedResult, fiMatrix);
49
+ if(jMatrix) {
50
+ jclass clsMatrix = env->GetObjectClass(jMatrix);
51
+ jmethodID getValues = env->GetMethodID(clsMatrix, "getValues", "([F)V");
52
+ jfloatArray jValues = env->NewFloatArray(9);
53
+ env->CallVoidMethod(jMatrix, getValues, jValues);
54
+ float cValues[9];
55
+ env->GetFloatArrayRegion(jValues, 0, 9, cValues);
56
+ Array jsMatrix(rt, 9);
57
+ for (int i = 0; i < 9; ++i) {
58
+ jsMatrix.setValueAtIndex(rt, i, cValues[i]);
59
+ }
60
+ env->DeleteLocalRef(clsMatrix);
61
+ env->DeleteLocalRef(jValues);
62
+ env->DeleteLocalRef(jMatrix);
63
+ jsCapturedResult.setProperty(rt, "rotationTransformMatrix", jsMatrix);
64
+ }
65
+
66
+ jfieldID items = env->GetFieldID(jclsCapturedResult, "items", "[Lcom/dynamsoft/core/basic_structures/CapturedResultItem;");
67
+ jobjectArray jItems = (jobjectArray) env->GetObjectField(jCapturedResult, items);
68
+ Array jsItemArray(rt, 0);
69
+ int *types = nullptr;
70
+
71
+ jsiConversion::core::jCapturedItemArrayToJsArray(rt, env, jItems, types, jsItemArray);
72
+ for (int i = 0; i < jsItemArray.size(rt); ++i) {
73
+ Object jsItem = jsItemArray.getValueAtIndex(rt, i).asObject(rt);
74
+ jobject jItem = env->GetObjectArrayElement(jItems, i);
75
+ int type = types[i];
76
+ if (type == CRIT_BARCODE) {
77
+ jsiConversion::dbr::jBarcodeResultItemToJsObject(rt, env, jItem, jsItem);
78
+ } else if (type == CRIT_TEXT_LINE) {
79
+ jsiConversion::dlr::jTextLineResultItemToJsObject(rt, env, jItem, jsItem);
80
+ } else if (type == CRIT_DETECTED_QUAD) {
81
+ jsiConversion::ddn::jDetectedQuadResultItemToJsObject(rt, env, jItem, jsItem);
82
+ } else if (type == CRIT_DESKEWED_IMAGE) {
83
+ jsiConversion::ddn::jDeskewedImageResultItemToJsObject(rt, env, jItem, jsItem);
84
+ } else if (type == CRIT_PARSED_RESULT) {
85
+ jsiConversion::dcp::jParsedResultItemToJsObject(rt, env, jItem, jsItem);
86
+ } else if(type == CRIT_ENHANCED_IMAGE) {
87
+ jsiConversion::ddn::jEnhancedImageResultItemToJsObject(rt, env, jItem, jsItem);
88
+ }
89
+ env->DeleteLocalRef(jItem);
90
+ }
91
+ if(types) {
92
+ delete[] types;
93
+ }
94
+ jsCapturedResult.setProperty(rt, "items", jsItemArray);
95
+ env->PopLocalFrame(nullptr);
96
+ }
97
+ }//namespace jsiConversion::cvr
98
+
99
+ namespace jsi_install::cvr {
100
+ void install_captureImageData(Runtime &jsiRuntime) {
101
+ auto nameId = PropNameID::forAscii(jsiRuntime, "captureImageData");
102
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
103
+ auto captureImageDataFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
104
+ auto obj = arguments[0].asObject(runtime);
105
+ auto imgHO = ImageDataHostObject::getHOFromObject(runtime, std::move(obj));
106
+ Object jsCapturedResult = captureImageDataHO(imgHO, runtime, arguments[1].asString(runtime).utf8(runtime));
107
+ return jsCapturedResult;
108
+ });
109
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureImageDataFunc));
110
+ }
111
+ }
112
+ void install_captureFile(Runtime &jsiRuntime) {
113
+ auto nameId = PropNameID::forAscii(jsiRuntime, "captureFile");
114
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
115
+ auto captureFileFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
116
+ auto filePath = arguments[0].asString(runtime);
117
+ Object jsCapturedResult = captureFile(filePath.utf8(runtime), runtime, arguments[1].asString(runtime).utf8(runtime));
118
+ return jsCapturedResult;
119
+ });
120
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileFunc));
121
+ }
122
+ }
123
+ void install_captureFileBytes(Runtime &jsiRuntime) {
124
+ auto nameId = PropNameID::forAscii(jsiRuntime, "captureFileBytes");
125
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
126
+ auto captureFileBytesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 2, JSI_FUNC {
127
+ ArrayBuffer fileBytes = arguments[0].asObject(runtime).getArrayBuffer(runtime);
128
+ Object jsCapturedResult = captureFileBytes(fileBytes, runtime, arguments[1].asString(runtime).utf8(runtime));
129
+ return jsCapturedResult;
130
+ });
131
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(captureFileBytesFunc));
132
+ }
133
+ }
134
+ void install_getCurrentDeskewedImages(Runtime &jsiRuntime) {
135
+ auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentDeskewedImages");
136
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
137
+ auto getCurrentDeskewedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
138
+ Array images = getCurrentDeskewedImages(runtime);
139
+ return images;
140
+ });
141
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentDeskewedImagesFunc));
142
+ }
143
+ }
144
+ void install_getCurrentEnhancedImages(Runtime &jsiRuntime) {
145
+ auto nameId = PropNameID::forAscii(jsiRuntime, "getCurrentEnhancedImages");
146
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
147
+ auto getCurrentEnhancedImagesFunc = Function::createFromHostFunction(jsiRuntime, nameId, 0, JSI_FUNC {
148
+ Array images = getCurrentEnhancedImages(runtime);
149
+ return images;
150
+ });
151
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(getCurrentEnhancedImagesFunc));
152
+ }
153
+ }
154
+ void install_cvr_getOriginalImage(Runtime &jsiRuntime) {
155
+ auto nameId = PropNameID::forAscii(jsiRuntime, "cvr_getOriginalImage");
156
+ if (!jsiRuntime.global().hasProperty(jsiRuntime, nameId)) {
157
+ auto cvr_getOriginalImageFunc = Function::createFromHostFunction(jsiRuntime, nameId, 1, JSI_FUNC {
158
+ string hashId = arguments[0].asString(runtime).utf8(runtime);
159
+ if (hashId.empty()) {
160
+ return {};
161
+ }
162
+ ImageDataHostObject imgHO = getOriginalImage(runtime, hashId);
163
+ if(imgHO.width == 0 && imgHO.height == 0) {
164
+ return {};
165
+ } else {
166
+ return Object::createFromHostObject(runtime, make_shared<ImageDataHostObject>(imgHO));
167
+ }
168
+ });
169
+ jsiRuntime.global().setProperty(jsiRuntime, nameId, std::move(cvr_getOriginalImageFunc));
170
+ }
171
+ }
172
+ }//namespace jsi_install::cvr
173
+
174
+
175
+ Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string templateName) {
176
+ JNIEnv *env;
177
+ bool needDetach = false;
178
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
179
+ if (state == JNI_EDETACHED || env == nullptr) {
180
+ gJvm->AttachCurrentThread(&env, nullptr);
181
+ needDetach = true;
182
+ }
183
+ env->PushLocalFrame(16);
184
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
185
+ auto captureMeth = env->GetMethodID(clzCvrModule, "captureImageDataCalledInJSI",
186
+ "(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
187
+ auto imageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
188
+ auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, imageData, env->NewStringUTF(templateName.c_str()));
189
+ Object jsResult(rt);
190
+ jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
191
+ env->PopLocalFrame(nullptr);
192
+ if (needDetach) {
193
+ gJvm->DetachCurrentThread();
194
+ }
195
+ return jsResult;
196
+ }
197
+
198
+ Object captureFile(string filePath, Runtime &rt, string templateName) {
199
+ JNIEnv *env;
200
+ bool needDetach = false;
201
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
202
+ if (state == JNI_EDETACHED || env == nullptr) {
203
+ gJvm->AttachCurrentThread(&env, nullptr);
204
+ needDetach = true;
205
+ }
206
+ env->PushLocalFrame(8);
207
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
208
+ auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileCalledInJSI",
209
+ "(Ljava/lang/String;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
210
+ auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, env->NewStringUTF(filePath.c_str()), env->NewStringUTF(templateName.c_str()));
211
+ Object jsResult(rt);
212
+ jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
213
+ env->PopLocalFrame(nullptr);
214
+ if (needDetach) {
215
+ gJvm->DetachCurrentThread();
216
+ }
217
+ return jsResult;
218
+ }
219
+ Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName) {
220
+ JNIEnv *env;
221
+ bool needDetach = false;
222
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
223
+ if (state == JNI_EDETACHED || env == nullptr) {
224
+ gJvm->AttachCurrentThread(&env, nullptr);
225
+ needDetach = true;
226
+ }
227
+ env->PushLocalFrame(8);
228
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
229
+ auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileBytesCalledInJSI",
230
+ "([BLjava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
231
+ auto pBytes = (jbyte *) fileBytes.data(rt);
232
+ int len = fileBytes.length(rt);
233
+ jbyteArray jBytes = env->NewByteArray(len);
234
+ env->SetByteArrayRegion(jBytes, 0, len, (jbyte *) pBytes);
235
+ auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, jBytes, env->NewStringUTF(templateName.c_str()));
236
+ Object jsResult(rt);
237
+ jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
238
+ env->PopLocalFrame(nullptr);
239
+ if (needDetach) {
240
+ gJvm->DetachCurrentThread();
241
+ }
242
+ return jsResult;
243
+ }
244
+
245
+ Array getCurrentDeskewedImages(Runtime &runtime) {
246
+ JNIEnv *env;
247
+ bool needDetach = false;
248
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
249
+ if (state == JNI_EDETACHED || env == nullptr) {
250
+ gJvm->AttachCurrentThread(&env, nullptr);
251
+ needDetach = true;
252
+ }
253
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
254
+ auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentDeskewedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
255
+ auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
256
+ int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
257
+ Array array(runtime, count);
258
+ for (int i = 0; i < count; ++i) {
259
+ auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
260
+ ImageDataHostObject imgHO;
261
+ jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
262
+ auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
263
+ array.setValueAtIndex(runtime, i, obj);
264
+ env->DeleteLocalRef(imageData);
265
+ }
266
+ env->DeleteLocalRef(clzCvrModule);
267
+ if (jCurrentImages) {
268
+ env->DeleteLocalRef(jCurrentImages);
269
+ }
270
+ env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
271
+ if (needDetach) {
272
+ gJvm->DetachCurrentThread();
273
+ }
274
+ return array;
275
+ }
276
+
277
+ Array getCurrentEnhancedImages(Runtime &runtime) {
278
+ JNIEnv *env;
279
+ bool needDetach = false;
280
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
281
+ if (state == JNI_EDETACHED || env == nullptr) {
282
+ gJvm->AttachCurrentThread(&env, nullptr);
283
+ needDetach = true;
284
+ }
285
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
286
+ auto fiCurrentImages = env->GetFieldID(clzCvrModule, "currentEnhancedImages", "[Lcom/dynamsoft/core/basic_structures/ImageData;");
287
+ auto jCurrentImages = (jobjectArray) env->GetObjectField(jCvrModule, fiCurrentImages);
288
+ int count = jCurrentImages ? env->GetArrayLength(jCurrentImages) : 0;
289
+ Array array(runtime, count);
290
+ for (int i = 0; i < count; ++i) {
291
+ auto imageData = env->GetObjectArrayElement(jCurrentImages, i);
292
+ ImageDataHostObject imgHO;
293
+ jsiConversion::core::getHOFromJImageData(env, imageData, imgHO);
294
+ auto obj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imgHO));
295
+ array.setValueAtIndex(runtime, i, obj);
296
+ env->DeleteLocalRef(imageData);
297
+ }
298
+ env->DeleteLocalRef(clzCvrModule);
299
+ if (jCurrentImages) {
300
+ env->DeleteLocalRef(jCurrentImages);
301
+ }
302
+ env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
303
+ if (needDetach) {
304
+ gJvm->DetachCurrentThread();
305
+ }
306
+ return array;
307
+ }
308
+
309
+ ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId) {
310
+ JNIEnv *env;
311
+ bool needDetach = false;
312
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
313
+ if (state == JNI_EDETACHED || env == nullptr) {
314
+ gJvm->AttachCurrentThread(&env, nullptr);
315
+ needDetach = true;
316
+ }
317
+ env->PushLocalFrame(8);
318
+ auto clzCvrModule = env->GetObjectClass(jCvrModule);
319
+ auto getOriginalImageCalledInJSI =
320
+ env->GetMethodID(clzCvrModule, "getOriginalImageCalledInJSI", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageData;");
321
+ auto jImageData = env->CallObjectMethod(jCvrModule, getOriginalImageCalledInJSI, env->NewStringUTF(imageHashId.c_str()));
322
+ ImageDataHostObject imgHO;
323
+ if (jImageData != nullptr) {
324
+ jsiConversion::core::getHOFromJImageData(env, jImageData, imgHO);
325
+ }
326
+ env->PopLocalFrame(nullptr);
327
+ if (needDetach) {
328
+ gJvm->DetachCurrentThread();
329
+ }
330
+ return imgHO;
331
+ }
332
+