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,110 +1,110 @@
1
- package com.dynamsoft.reactnativelib.basicutils
2
-
3
- import android.content.Context
4
- import android.graphics.Point
5
- import android.graphics.Rect
6
- import android.graphics.drawable.Drawable
7
- import androidx.appcompat.content.res.AppCompatResources
8
- import com.dynamsoft.core.basic_structures.DSRect
9
- import com.dynamsoft.dce.CameraView
10
- import com.facebook.react.bridge.Arguments
11
- import com.facebook.react.bridge.ReadableMap
12
- import com.facebook.react.bridge.ReadableType
13
- import com.facebook.react.bridge.WritableMap
14
-
15
-
16
- fun ReadableMap.toRect() = Rect().apply {
17
- left = if (hasKey("x")) getInt("x") else left
18
- top = if (hasKey("y")) getInt("y") else top
19
- right = (if (hasKey("width")) getInt("width") else 0) + left
20
- bottom = (if (hasKey("height")) getInt("height") else 0) + top
21
- }
22
-
23
- fun ReadableMap.toScanRegion() = DSRect().apply {
24
- top = if (hasKey("top")) getDouble("top").toFloat() else top
25
- bottom = if (hasKey("bottom")) getDouble("bottom").toFloat() else bottom
26
- left = if (hasKey("left")) getDouble("left").toFloat() else left
27
- right = if (hasKey("right")) getDouble("right").toFloat() else right
28
- if (hasKey("measuredInPercentage")) {
29
- when (getType("measuredInPercentage")) {
30
- ReadableType.Number -> measuredInPercentage = getInt("measuredInPercentage") != 0
31
- ReadableType.Boolean -> measuredInPercentage = getBoolean("measuredInPercentage")
32
- else -> {/*keep*/
33
- }
34
- }
35
- }
36
- }
37
-
38
- fun DSRect.toWritableMap(): WritableMap = Arguments.createMap().apply {
39
- putDouble("top", this@toWritableMap.top.toDouble())
40
- putDouble("bottom", this@toWritableMap.bottom.toDouble())
41
- putDouble("left", this@toWritableMap.left.toDouble())
42
- putDouble("right", this@toWritableMap.right.toDouble())
43
- putBoolean("measuredInPercentage", this@toWritableMap.measuredInPercentage)
44
- }
45
-
46
- fun ReadableMap.toTorchButtonState(): CameraViewButtonState {
47
- val rect = if (hasKey("location")) getMap("location")!!.toRect() else Rect(25,100,70,145)
48
- val visible = if (hasKey("visible")) getBoolean("visible") else null
49
- val torchOnImageBase64 = if (hasKey("torchOnImageBase64")) getString("torchOnImageBase64") else null
50
- val torchOffImageBase64 = if (hasKey("torchOffImageBase64")) getString("torchOffImageBase64") else null
51
- return CameraViewButtonState(rect, visible, torchOnImageBase64, torchOffImageBase64)
52
- }
53
-
54
- fun ReadableMap.toCameraToggleButtonState(): CameraViewButtonState {
55
- val rect = if (hasKey("location")) getMap("location")!!.toRect() else Rect(25,100,70,145)
56
- val visible = if (hasKey("visible")) getBoolean("visible") else false
57
- val cameraImageBase64 = if (hasKey("cameraToggleImageBase64")) getString("cameraToggleImageBase64") else null
58
- return CameraViewButtonState(rect, visible, cameraBase64 = cameraImageBase64)
59
- }
60
-
61
- fun CameraView.setTorchButtonState(torchButtonState: CameraViewButtonState) {
62
- setTorchButton(
63
- torchButtonState.getLeftTopPoint(), torchButtonState.getWidth(), torchButtonState.getHeight(),
64
- torchButtonState.getTouchOnDrawable(context), torchButtonState.getTouchOffDrawable(context)
65
- )
66
- torchButtonState.visible?.apply {
67
- torchButtonVisible = this
68
- }
69
- }
70
-
71
- fun CameraView.setCameraToggleButtonState(cameraToggleButtonState: CameraViewButtonState) {
72
- setCameraToggleButton(
73
- cameraToggleButtonState.getLeftTopPoint(), cameraToggleButtonState.getWidth(), cameraToggleButtonState.getHeight(),
74
- cameraToggleButtonState.getCameraToggleDrawable(context)
75
- )
76
- }
77
-
78
- class CameraViewButtonState(
79
- val location: Rect,
80
- val visible: Boolean? = null,
81
- val touchOnBase64: String? = null,
82
- val touchOffBase64: String? = null,
83
- val cameraBase64: String? = null,
84
- ) {
85
- fun getLeftTopPoint() = Point(location.left, location.top)
86
- fun getWidth() = location.width()
87
- fun getHeight() = location.height()
88
-
89
- fun getTouchOnDrawable(context: Context): Drawable {
90
- return base64ToDrawable(touchOnBase64, context.resources!!) ?: AppCompatResources.getDrawable(
91
- context,
92
- com.dynamsoft.R.drawable.icon_flash_on
93
- )!!
94
- }
95
-
96
- fun getTouchOffDrawable(context: Context): Drawable {
97
- return base64ToDrawable(touchOffBase64, context.resources!!) ?: AppCompatResources.getDrawable(
98
- context,
99
- com.dynamsoft.R.drawable.icon_flash_off
100
- )!!
101
- }
102
-
103
- fun getCameraToggleDrawable(context: Context): Drawable {
104
- return base64ToDrawable(cameraBase64, context.resources!!) ?: AppCompatResources.getDrawable(context, com.dynamsoft.R.drawable.icon_turn_camera)!!
105
- }
106
-
107
- override fun toString(): String {
108
- return "CameraViewButtonState(location=$location, visible=$visible, touchOnBase64=$touchOnBase64, touchOffBase64=$touchOffBase64)"
109
- }
110
- }
1
+ package com.dynamsoft.reactnativelib.basicutils
2
+
3
+ import android.content.Context
4
+ import android.graphics.Point
5
+ import android.graphics.Rect
6
+ import android.graphics.drawable.Drawable
7
+ import androidx.appcompat.content.res.AppCompatResources
8
+ import com.dynamsoft.core.basic_structures.DSRect
9
+ import com.dynamsoft.dce.CameraView
10
+ import com.facebook.react.bridge.Arguments
11
+ import com.facebook.react.bridge.ReadableMap
12
+ import com.facebook.react.bridge.ReadableType
13
+ import com.facebook.react.bridge.WritableMap
14
+
15
+
16
+ fun ReadableMap.toRect() = Rect().apply {
17
+ left = if (hasKey("x")) getInt("x") else left
18
+ top = if (hasKey("y")) getInt("y") else top
19
+ right = (if (hasKey("width")) getInt("width") else 0) + left
20
+ bottom = (if (hasKey("height")) getInt("height") else 0) + top
21
+ }
22
+
23
+ fun ReadableMap.toScanRegion() = DSRect().apply {
24
+ top = if (hasKey("top")) getDouble("top").toFloat() else top
25
+ bottom = if (hasKey("bottom")) getDouble("bottom").toFloat() else bottom
26
+ left = if (hasKey("left")) getDouble("left").toFloat() else left
27
+ right = if (hasKey("right")) getDouble("right").toFloat() else right
28
+ if (hasKey("measuredInPercentage")) {
29
+ when (getType("measuredInPercentage")) {
30
+ ReadableType.Number -> measuredInPercentage = getInt("measuredInPercentage") != 0
31
+ ReadableType.Boolean -> measuredInPercentage = getBoolean("measuredInPercentage")
32
+ else -> {/*keep*/
33
+ }
34
+ }
35
+ }
36
+ }
37
+
38
+ fun DSRect.toWritableMap(): WritableMap = Arguments.createMap().apply {
39
+ putDouble("top", this@toWritableMap.top.toDouble())
40
+ putDouble("bottom", this@toWritableMap.bottom.toDouble())
41
+ putDouble("left", this@toWritableMap.left.toDouble())
42
+ putDouble("right", this@toWritableMap.right.toDouble())
43
+ putBoolean("measuredInPercentage", this@toWritableMap.measuredInPercentage)
44
+ }
45
+
46
+ fun ReadableMap.toTorchButtonState(): CameraViewButtonState {
47
+ val rect = if (hasKey("location")) getMap("location")!!.toRect() else Rect(25,100,70,145)
48
+ val visible = if (hasKey("visible")) getBoolean("visible") else null
49
+ val torchOnImageBase64 = if (hasKey("torchOnImageBase64")) getString("torchOnImageBase64") else null
50
+ val torchOffImageBase64 = if (hasKey("torchOffImageBase64")) getString("torchOffImageBase64") else null
51
+ return CameraViewButtonState(rect, visible, torchOnImageBase64, torchOffImageBase64)
52
+ }
53
+
54
+ fun ReadableMap.toCameraToggleButtonState(): CameraViewButtonState {
55
+ val rect = if (hasKey("location")) getMap("location")!!.toRect() else Rect(25,100,70,145)
56
+ val visible = if (hasKey("visible")) getBoolean("visible") else false
57
+ val cameraImageBase64 = if (hasKey("cameraToggleImageBase64")) getString("cameraToggleImageBase64") else null
58
+ return CameraViewButtonState(rect, visible, cameraBase64 = cameraImageBase64)
59
+ }
60
+
61
+ fun CameraView.setTorchButtonState(torchButtonState: CameraViewButtonState) {
62
+ setTorchButton(
63
+ torchButtonState.getLeftTopPoint(), torchButtonState.getWidth(), torchButtonState.getHeight(),
64
+ torchButtonState.getTouchOnDrawable(context), torchButtonState.getTouchOffDrawable(context)
65
+ )
66
+ torchButtonState.visible?.apply {
67
+ torchButtonVisible = this
68
+ }
69
+ }
70
+
71
+ fun CameraView.setCameraToggleButtonState(cameraToggleButtonState: CameraViewButtonState) {
72
+ setCameraToggleButton(
73
+ cameraToggleButtonState.getLeftTopPoint(), cameraToggleButtonState.getWidth(), cameraToggleButtonState.getHeight(),
74
+ cameraToggleButtonState.getCameraToggleDrawable(context)
75
+ )
76
+ }
77
+
78
+ class CameraViewButtonState(
79
+ val location: Rect,
80
+ val visible: Boolean? = null,
81
+ val touchOnBase64: String? = null,
82
+ val touchOffBase64: String? = null,
83
+ val cameraBase64: String? = null,
84
+ ) {
85
+ fun getLeftTopPoint() = Point(location.left, location.top)
86
+ fun getWidth() = location.width()
87
+ fun getHeight() = location.height()
88
+
89
+ fun getTouchOnDrawable(context: Context): Drawable {
90
+ return base64ToDrawable(touchOnBase64, context.resources!!) ?: AppCompatResources.getDrawable(
91
+ context,
92
+ com.dynamsoft.R.drawable.icon_flash_on
93
+ )!!
94
+ }
95
+
96
+ fun getTouchOffDrawable(context: Context): Drawable {
97
+ return base64ToDrawable(touchOffBase64, context.resources!!) ?: AppCompatResources.getDrawable(
98
+ context,
99
+ com.dynamsoft.R.drawable.icon_flash_off
100
+ )!!
101
+ }
102
+
103
+ fun getCameraToggleDrawable(context: Context): Drawable {
104
+ return base64ToDrawable(cameraBase64, context.resources!!) ?: AppCompatResources.getDrawable(context, com.dynamsoft.R.drawable.icon_turn_camera)!!
105
+ }
106
+
107
+ override fun toString(): String {
108
+ return "CameraViewButtonState(location=$location, visible=$visible, touchOnBase64=$touchOnBase64, touchOffBase64=$touchOffBase64)"
109
+ }
110
+ }
@@ -1,50 +1,50 @@
1
- package com.dynamsoft.reactnativelib.basicutils
2
-
3
- import com.dynamsoft.core.basic_structures.CapturedResultItem
4
- import com.dynamsoft.dcp.ParsedResult
5
- import com.dynamsoft.dcp.ParsedResultItem
6
- import com.facebook.react.bridge.Arguments
7
- import com.facebook.react.bridge.WritableArray
8
- import com.facebook.react.bridge.WritableMap
9
-
10
-
11
- /*
12
- *
13
- * export interface itemField {
14
- * value?: string,
15
- * mappingStatus?: EnumMappingStatus | number,
16
- * validationStatus?: EnumValidationStatus | number
17
- * }
18
- *
19
- * export interface ParsedResultItem {
20
- * codeType: string
21
- * jsonString: string
22
- * parsedFields?: Map<String, itemField>
23
- * }
24
- * */
25
- fun ParsedResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
26
- merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
27
- putString("codeType", codeType)
28
- putString("jsonString", jsonString)
29
- val fieldsMap = Arguments.createMap()
30
- parsedFields.entries.forEach {
31
- val fieldMap = Arguments.createMap().apply {
32
- putString("value", it.value)
33
- putInt("mappingStatus", getFieldMappingStatus(it.key))
34
- putInt("validationStatus", getFieldValidationStatus(it.key))
35
- }
36
- fieldsMap.putMap(it.key, fieldMap)
37
- }
38
- putMap("parsedFields", fieldsMap)
39
- }
40
-
41
- fun Array<out ParsedResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
42
- forEach { pushMap(it.toWritableMap()) }
43
- }
44
-
45
- fun ParsedResult.toWritableMap(): WritableMap = Arguments.createMap().apply {
46
- putInt("errorCode", errorCode)
47
- putString("originalImageHashId", originalImageHashId)
48
- putString("errorMessage", errorMessage)
49
- putArray("items", items.toWritableArray())
1
+ package com.dynamsoft.reactnativelib.basicutils
2
+
3
+ import com.dynamsoft.core.basic_structures.CapturedResultItem
4
+ import com.dynamsoft.dcp.ParsedResult
5
+ import com.dynamsoft.dcp.ParsedResultItem
6
+ import com.facebook.react.bridge.Arguments
7
+ import com.facebook.react.bridge.WritableArray
8
+ import com.facebook.react.bridge.WritableMap
9
+
10
+
11
+ /*
12
+ *
13
+ * export interface itemField {
14
+ * value?: string,
15
+ * mappingStatus?: EnumMappingStatus | number,
16
+ * validationStatus?: EnumValidationStatus | number
17
+ * }
18
+ *
19
+ * export interface ParsedResultItem {
20
+ * codeType: string
21
+ * jsonString: string
22
+ * parsedFields?: Map<String, itemField>
23
+ * }
24
+ * */
25
+ fun ParsedResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
26
+ merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
27
+ putString("codeType", codeType)
28
+ putString("jsonString", jsonString)
29
+ val fieldsMap = Arguments.createMap()
30
+ parsedFields.entries.forEach {
31
+ val fieldMap = Arguments.createMap().apply {
32
+ putString("value", it.value)
33
+ putInt("mappingStatus", getFieldMappingStatus(it.key))
34
+ putInt("validationStatus", getFieldValidationStatus(it.key))
35
+ }
36
+ fieldsMap.putMap(it.key, fieldMap)
37
+ }
38
+ putMap("parsedFields", fieldsMap)
39
+ }
40
+
41
+ fun Array<out ParsedResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
42
+ forEach { pushMap(it.toWritableMap()) }
43
+ }
44
+
45
+ fun ParsedResult.toWritableMap(): WritableMap = Arguments.createMap().apply {
46
+ putInt("errorCode", errorCode)
47
+ putString("originalImageHashId", originalImageHashId)
48
+ putString("errorMessage", errorMessage)
49
+ putArray("items", items.toWritableArray())
50
50
  }
@@ -1,86 +1,86 @@
1
- package com.dynamsoft.reactnativelib.basicutils
2
-
3
- import com.dynamsoft.core.basic_structures.CapturedResultItem
4
- import com.dynamsoft.ddn.DeskewedImageResultItem
5
- import com.dynamsoft.ddn.DetectedQuadResultItem
6
- import com.dynamsoft.ddn.EnhancedImageResultItem
7
- import com.dynamsoft.ddn.ProcessedDocumentResult
8
- import com.dynamsoft.ddn.SimplifiedDocumentNormalizerSettings
9
- import com.facebook.react.bridge.Arguments
10
- import com.facebook.react.bridge.ReadableMap
11
- import com.facebook.react.bridge.WritableArray
12
- import com.facebook.react.bridge.WritableMap
13
-
14
-
15
- fun ProcessedDocumentResult.toWritableMap(): WritableMap = Arguments.createMap().apply {
16
- merge(this@toWritableMap.toSharedWritableMap())
17
- putArray("deskewedImageResultItems", deskewedImageResultItems.toWritableArray())
18
- putArray("detectedQuadResultItems", detectedQuadResultItems.toWritableArray())
19
- putArray("enhancedImageResultItems", enhancedImageResultItems.toWritableArray())
20
- }
21
-
22
- fun DetectedQuadResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
23
- merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
24
- putMap("location", location.toWritableMap())
25
- putInt("confidenceAsDocumentBoundary", confidenceAsDocumentBoundary)
26
- putInt("crossVerificationStatus", crossVerificationStatus)
27
- }
28
-
29
-
30
- fun Array<out DetectedQuadResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
31
- forEach { pushMap(it.toWritableMap()) }
32
- }
33
-
34
-
35
- fun DeskewedImageResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
36
- merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
37
- putMap("sourceDeskewQuad", sourceDeskewQuad.toWritableMap())
38
- putInt("crossVerificationStatus", crossVerificationStatus)
39
- putArray("originalToLocalMatrix", FloatArray(9).apply { originalToLocalMatrix.getValues(this) }.toWritableArray())
40
- }
41
-
42
- fun Array<out DeskewedImageResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
43
- forEach { pushMap(it.toWritableMap()) }
44
- }
45
-
46
- fun EnhancedImageResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
47
- merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
48
- putArray("originalToLocalMatrix", FloatArray(9).apply { originalToLocalMatrix.getValues(this) }.toWritableArray())
49
- }
50
-
51
- fun Array<out EnhancedImageResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
52
- forEach { pushMap(it.toWritableMap()) }
53
- }
54
-
55
-
56
-
57
- fun SimplifiedDocumentNormalizerSettings.toWritableMap(): WritableMap = Arguments.createMap().apply {
58
- putArray("grayscaleTransformationModes", grayscaleTransformationModes.toWritableArray())
59
- putArray("grayscaleEnhancementModes", grayscaleEnhancementModes.toWritableArray())
60
- putArray("pageSize", pageSize.toWritableArray())
61
- putInt("colourMode", colourMode)
62
- putInt("brightness", brightness)
63
- putInt("contrast", contrast)
64
- putInt("maxThreadsInOneTask", maxThreadsInOneTask)
65
- putInt("scaleDownThreshold", scaleDownThreshold)
66
- putInt("minQuadrilateralAreaRatio", minQuadrilateralAreaRatio)
67
- putInt("expectedDocumentsCount", expectedDocumentsCount)
68
- }
69
-
70
- fun SimplifiedDocumentNormalizerSettings.updateFromReadableMap(newSettings: ReadableMap) {
71
- colourMode = if (newSettings.hasKey("colourMode")) newSettings.getInt("colourMode") else colourMode
72
- brightness = if (newSettings.hasKey("brightness")) newSettings.getInt("brightness") else brightness
73
- contrast = if (newSettings.hasKey("contrast")) newSettings.getInt("contrast") else contrast
74
- maxThreadsInOneTask = if (newSettings.hasKey("maxThreadsInOneTask")) newSettings.getInt("maxThreadsInOneTask") else maxThreadsInOneTask
75
- scaleDownThreshold = if (newSettings.hasKey("scaleDownThreshold")) newSettings.getInt("scaleDownThreshold") else scaleDownThreshold
76
- pageSize = if (newSettings.hasKey("pageSize")) newSettings.getArray("pageSize")?.toIntArray() else pageSize
77
-
78
- grayscaleTransformationModes = if (newSettings.hasKey("grayscaleTransformationModes"))
79
- newSettings.getArray("grayscaleTransformationModes")?.toIntArray() else grayscaleTransformationModes
80
-
81
- grayscaleEnhancementModes = if (newSettings.hasKey("grayscaleEnhancementModes"))
82
- newSettings.getArray("grayscaleEnhancementModes")?.toIntArray() else grayscaleEnhancementModes
83
-
84
- minQuadrilateralAreaRatio = if (newSettings.hasKey("minQuadrilateralAreaRatio")) newSettings.getInt("minQuadrilateralAreaRatio") else minQuadrilateralAreaRatio
85
- expectedDocumentsCount = if (newSettings.hasKey("expectedDocumentsCount")) newSettings.getInt("expectedDocumentsCount") else expectedDocumentsCount
1
+ package com.dynamsoft.reactnativelib.basicutils
2
+
3
+ import com.dynamsoft.core.basic_structures.CapturedResultItem
4
+ import com.dynamsoft.ddn.DeskewedImageResultItem
5
+ import com.dynamsoft.ddn.DetectedQuadResultItem
6
+ import com.dynamsoft.ddn.EnhancedImageResultItem
7
+ import com.dynamsoft.ddn.ProcessedDocumentResult
8
+ import com.dynamsoft.ddn.SimplifiedDocumentNormalizerSettings
9
+ import com.facebook.react.bridge.Arguments
10
+ import com.facebook.react.bridge.ReadableMap
11
+ import com.facebook.react.bridge.WritableArray
12
+ import com.facebook.react.bridge.WritableMap
13
+
14
+
15
+ fun ProcessedDocumentResult.toWritableMap(): WritableMap = Arguments.createMap().apply {
16
+ merge(this@toWritableMap.toSharedWritableMap())
17
+ putArray("deskewedImageResultItems", deskewedImageResultItems.toWritableArray())
18
+ putArray("detectedQuadResultItems", detectedQuadResultItems.toWritableArray())
19
+ putArray("enhancedImageResultItems", enhancedImageResultItems.toWritableArray())
20
+ }
21
+
22
+ fun DetectedQuadResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
23
+ merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
24
+ putMap("location", location.toWritableMap())
25
+ putInt("confidenceAsDocumentBoundary", confidenceAsDocumentBoundary)
26
+ putInt("crossVerificationStatus", crossVerificationStatus)
27
+ }
28
+
29
+
30
+ fun Array<out DetectedQuadResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
31
+ forEach { pushMap(it.toWritableMap()) }
32
+ }
33
+
34
+
35
+ fun DeskewedImageResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
36
+ merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
37
+ putMap("sourceDeskewQuad", sourceDeskewQuad.toWritableMap())
38
+ putInt("crossVerificationStatus", crossVerificationStatus)
39
+ putArray("originalToLocalMatrix", FloatArray(9).apply { originalToLocalMatrix.getValues(this) }.toWritableArray())
40
+ }
41
+
42
+ fun Array<out DeskewedImageResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
43
+ forEach { pushMap(it.toWritableMap()) }
44
+ }
45
+
46
+ fun EnhancedImageResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
47
+ merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
48
+ putArray("originalToLocalMatrix", FloatArray(9).apply { originalToLocalMatrix.getValues(this) }.toWritableArray())
49
+ }
50
+
51
+ fun Array<out EnhancedImageResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
52
+ forEach { pushMap(it.toWritableMap()) }
53
+ }
54
+
55
+
56
+
57
+ fun SimplifiedDocumentNormalizerSettings.toWritableMap(): WritableMap = Arguments.createMap().apply {
58
+ putArray("grayscaleTransformationModes", grayscaleTransformationModes.toWritableArray())
59
+ putArray("grayscaleEnhancementModes", grayscaleEnhancementModes.toWritableArray())
60
+ putArray("pageSize", pageSize.toWritableArray())
61
+ putInt("colourMode", colourMode)
62
+ putInt("brightness", brightness)
63
+ putInt("contrast", contrast)
64
+ putInt("maxThreadsInOneTask", maxThreadsInOneTask)
65
+ putInt("scaleDownThreshold", scaleDownThreshold)
66
+ putInt("minQuadrilateralAreaRatio", minQuadrilateralAreaRatio)
67
+ putInt("expectedDocumentsCount", expectedDocumentsCount)
68
+ }
69
+
70
+ fun SimplifiedDocumentNormalizerSettings.updateFromReadableMap(newSettings: ReadableMap) {
71
+ colourMode = if (newSettings.hasKey("colourMode")) newSettings.getInt("colourMode") else colourMode
72
+ brightness = if (newSettings.hasKey("brightness")) newSettings.getInt("brightness") else brightness
73
+ contrast = if (newSettings.hasKey("contrast")) newSettings.getInt("contrast") else contrast
74
+ maxThreadsInOneTask = if (newSettings.hasKey("maxThreadsInOneTask")) newSettings.getInt("maxThreadsInOneTask") else maxThreadsInOneTask
75
+ scaleDownThreshold = if (newSettings.hasKey("scaleDownThreshold")) newSettings.getInt("scaleDownThreshold") else scaleDownThreshold
76
+ pageSize = if (newSettings.hasKey("pageSize")) newSettings.getArray("pageSize")?.toIntArray() else pageSize
77
+
78
+ grayscaleTransformationModes = if (newSettings.hasKey("grayscaleTransformationModes"))
79
+ newSettings.getArray("grayscaleTransformationModes")?.toIntArray() else grayscaleTransformationModes
80
+
81
+ grayscaleEnhancementModes = if (newSettings.hasKey("grayscaleEnhancementModes"))
82
+ newSettings.getArray("grayscaleEnhancementModes")?.toIntArray() else grayscaleEnhancementModes
83
+
84
+ minQuadrilateralAreaRatio = if (newSettings.hasKey("minQuadrilateralAreaRatio")) newSettings.getInt("minQuadrilateralAreaRatio") else minQuadrilateralAreaRatio
85
+ expectedDocumentsCount = if (newSettings.hasKey("expectedDocumentsCount")) newSettings.getInt("expectedDocumentsCount") else expectedDocumentsCount
86
86
  }
@@ -1,72 +1,72 @@
1
- package com.dynamsoft.reactnativelib.basicutils
2
-
3
- import com.dynamsoft.core.basic_structures.CapturedResultItem
4
- import com.dynamsoft.dlr.CharacterResult
5
- import com.dynamsoft.dlr.RecognizedTextLinesResult
6
- import com.dynamsoft.dlr.SimplifiedLabelRecognizerSettings
7
- import com.dynamsoft.dlr.TextLineResultItem
8
- import com.facebook.react.bridge.Arguments
9
- import com.facebook.react.bridge.ReadableMap
10
- import com.facebook.react.bridge.WritableArray
11
- import com.facebook.react.bridge.WritableMap
12
-
13
- fun Array<CharacterResult>.toWitableArray() :WritableArray = Arguments.createArray().apply {
14
- forEach { pushMap(it.toWritableMap()) }
15
- }
16
-
17
- fun CharacterResult.toWritableMap() : WritableMap = Arguments.createMap().apply {
18
- putString("characterH",characterH.toString())
19
- putString("characterM",characterM.toString())
20
- putString("characterL",characterL.toString())
21
- putInt("characterHConfidence",characterHConfidence)
22
- putInt("characterMConfidence",characterMConfidence)
23
- putInt("characterLConfidence",characterLConfidence)
24
- putMap("location", location.toWritableMap())
25
- }
26
-
27
- fun TextLineResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
28
- merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
29
- putMap("location", location.toWritableMap())
30
- putArray("characterResults", characterResults.toWitableArray())
31
- putString("text", text)
32
- putString("rawText", rawText)
33
- putString("specificationName", specificationName)
34
- putInt("confidence", confidence)
35
- }
36
-
37
- fun Array<out TextLineResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
38
- forEach { pushMap(it.toWritableMap()) }
39
- }
40
-
41
- fun RecognizedTextLinesResult.toWritableMap(): WritableMap = Arguments.createMap().apply {
42
- putInt("errorCode", errorCode)
43
- putString("originalImageHashId", originalImageHashId)
44
- putString("errorMessage", errorMessage)
45
- putArray("items", items.toWritableArray())
46
- putArray("rotationTransformMatrix",FloatArray(9).apply { rotationTransformMatrix.getValues(this) }.toWritableArray())
47
- }
48
-
49
- fun SimplifiedLabelRecognizerSettings.toWritableMap(): WritableMap = Arguments.createMap().apply {
50
- putArray("grayscaleTransformationModes", grayscaleTransformationModes.toWritableArray())
51
- putArray("grayscaleEnhancementModes", grayscaleEnhancementModes.toWritableArray())
52
- putString("characterModelName", characterModelName)
53
- putString("lineStringRegExPattern", lineStringRegExPattern)
54
- putInt("scaleDownThreshold", scaleDownThreshold)
55
- putInt("maxThreadsInOneTask", maxThreadsInOneTask)
56
- }
57
-
58
- fun SimplifiedLabelRecognizerSettings.updateFromReadableMap(newSettings: ReadableMap) {
59
- characterModelName = if (newSettings.hasKey("characterModelName")) newSettings.getString("characterModelName") else characterModelName
60
- lineStringRegExPattern =
61
- if (newSettings.hasKey("lineStringRegExPattern")) newSettings.getString("lineStringRegExPattern") else lineStringRegExPattern
62
-
63
- scaleDownThreshold = if (newSettings.hasKey("scaleDownThreshold")) newSettings.getInt("scaleDownThreshold") else scaleDownThreshold
64
-
65
- grayscaleTransformationModes = if (newSettings.hasKey("grayscaleTransformationModes"))
66
- newSettings.getArray("grayscaleTransformationModes")?.toIntArray() else grayscaleTransformationModes
67
-
68
- grayscaleEnhancementModes = if (newSettings.hasKey("grayscaleEnhancementModes"))
69
- newSettings.getArray("grayscaleEnhancementModes")?.toIntArray() else grayscaleEnhancementModes
70
-
71
- maxThreadsInOneTask = if (newSettings.hasKey("maxThreadsInOneTask")) newSettings.getInt("maxThreadsInOneTask") else maxThreadsInOneTask
72
- }
1
+ package com.dynamsoft.reactnativelib.basicutils
2
+
3
+ import com.dynamsoft.core.basic_structures.CapturedResultItem
4
+ import com.dynamsoft.dlr.CharacterResult
5
+ import com.dynamsoft.dlr.RecognizedTextLinesResult
6
+ import com.dynamsoft.dlr.SimplifiedLabelRecognizerSettings
7
+ import com.dynamsoft.dlr.TextLineResultItem
8
+ import com.facebook.react.bridge.Arguments
9
+ import com.facebook.react.bridge.ReadableMap
10
+ import com.facebook.react.bridge.WritableArray
11
+ import com.facebook.react.bridge.WritableMap
12
+
13
+ fun Array<CharacterResult>.toWitableArray() :WritableArray = Arguments.createArray().apply {
14
+ forEach { pushMap(it.toWritableMap()) }
15
+ }
16
+
17
+ fun CharacterResult.toWritableMap() : WritableMap = Arguments.createMap().apply {
18
+ putString("characterH",characterH.toString())
19
+ putString("characterM",characterM.toString())
20
+ putString("characterL",characterL.toString())
21
+ putInt("characterHConfidence",characterHConfidence)
22
+ putInt("characterMConfidence",characterMConfidence)
23
+ putInt("characterLConfidence",characterLConfidence)
24
+ putMap("location", location.toWritableMap())
25
+ }
26
+
27
+ fun TextLineResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply {
28
+ merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap())
29
+ putMap("location", location.toWritableMap())
30
+ putArray("characterResults", characterResults.toWitableArray())
31
+ putString("text", text)
32
+ putString("rawText", rawText)
33
+ putString("specificationName", specificationName)
34
+ putInt("confidence", confidence)
35
+ }
36
+
37
+ fun Array<out TextLineResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
38
+ forEach { pushMap(it.toWritableMap()) }
39
+ }
40
+
41
+ fun RecognizedTextLinesResult.toWritableMap(): WritableMap = Arguments.createMap().apply {
42
+ putInt("errorCode", errorCode)
43
+ putString("originalImageHashId", originalImageHashId)
44
+ putString("errorMessage", errorMessage)
45
+ putArray("items", items.toWritableArray())
46
+ putArray("rotationTransformMatrix",FloatArray(9).apply { rotationTransformMatrix.getValues(this) }.toWritableArray())
47
+ }
48
+
49
+ fun SimplifiedLabelRecognizerSettings.toWritableMap(): WritableMap = Arguments.createMap().apply {
50
+ putArray("grayscaleTransformationModes", grayscaleTransformationModes.toWritableArray())
51
+ putArray("grayscaleEnhancementModes", grayscaleEnhancementModes.toWritableArray())
52
+ putString("characterModelName", characterModelName)
53
+ putString("lineStringRegExPattern", lineStringRegExPattern)
54
+ putInt("scaleDownThreshold", scaleDownThreshold)
55
+ putInt("maxThreadsInOneTask", maxThreadsInOneTask)
56
+ }
57
+
58
+ fun SimplifiedLabelRecognizerSettings.updateFromReadableMap(newSettings: ReadableMap) {
59
+ characterModelName = if (newSettings.hasKey("characterModelName")) newSettings.getString("characterModelName") else characterModelName
60
+ lineStringRegExPattern =
61
+ if (newSettings.hasKey("lineStringRegExPattern")) newSettings.getString("lineStringRegExPattern") else lineStringRegExPattern
62
+
63
+ scaleDownThreshold = if (newSettings.hasKey("scaleDownThreshold")) newSettings.getInt("scaleDownThreshold") else scaleDownThreshold
64
+
65
+ grayscaleTransformationModes = if (newSettings.hasKey("grayscaleTransformationModes"))
66
+ newSettings.getArray("grayscaleTransformationModes")?.toIntArray() else grayscaleTransformationModes
67
+
68
+ grayscaleEnhancementModes = if (newSettings.hasKey("grayscaleEnhancementModes"))
69
+ newSettings.getArray("grayscaleEnhancementModes")?.toIntArray() else grayscaleEnhancementModes
70
+
71
+ maxThreadsInOneTask = if (newSettings.hasKey("maxThreadsInOneTask")) newSettings.getInt("maxThreadsInOneTask") else maxThreadsInOneTask
72
+ }