package com.dynamsoft.reactnativelib.basicutils import com.dynamsoft.core.basic_structures.CapturedResultItem import com.dynamsoft.ddn.DeskewedImageResultItem import com.dynamsoft.ddn.DetectedQuadResultItem import com.dynamsoft.ddn.EnhancedImageResultItem import com.dynamsoft.ddn.ProcessedDocumentResult import com.dynamsoft.ddn.SimplifiedDocumentNormalizerSettings import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.WritableArray import com.facebook.react.bridge.WritableMap fun ProcessedDocumentResult.toWritableMap(): WritableMap = Arguments.createMap().apply { merge(this@toWritableMap.toSharedWritableMap()) putArray("deskewedImageResultItems", deskewedImageResultItems.toWritableArray()) putArray("detectedQuadResultItems", detectedQuadResultItems.toWritableArray()) putArray("enhancedImageResultItems", enhancedImageResultItems.toWritableArray()) } fun DetectedQuadResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply { merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap()) putMap("location", location.toWritableMap()) putInt("confidenceAsDocumentBoundary", confidenceAsDocumentBoundary) putInt("crossVerificationStatus", crossVerificationStatus) } fun Array.toWritableArray(): WritableArray = Arguments.createArray().apply { forEach { pushMap(it.toWritableMap()) } } fun DeskewedImageResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply { merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap()) putMap("sourceDeskewQuad", sourceDeskewQuad.toWritableMap()) putInt("crossVerificationStatus", crossVerificationStatus) putArray("originalToLocalMatrix", FloatArray(9).apply { originalToLocalMatrix.getValues(this) }.toWritableArray()) } fun Array.toWritableArray(): WritableArray = Arguments.createArray().apply { forEach { pushMap(it.toWritableMap()) } } fun EnhancedImageResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply { merge((this@toWritableMap as CapturedResultItem).toSharedWritableMap()) putArray("originalToLocalMatrix", FloatArray(9).apply { originalToLocalMatrix.getValues(this) }.toWritableArray()) } fun Array.toWritableArray(): WritableArray = Arguments.createArray().apply { forEach { pushMap(it.toWritableMap()) } } fun SimplifiedDocumentNormalizerSettings.toWritableMap(): WritableMap = Arguments.createMap().apply { putArray("grayscaleTransformationModes", grayscaleTransformationModes.toWritableArray()) putArray("grayscaleEnhancementModes", grayscaleEnhancementModes.toWritableArray()) putArray("pageSize", pageSize.toWritableArray()) putInt("colourMode", colourMode) putInt("brightness", brightness) putInt("contrast", contrast) putInt("maxThreadsInOneTask", maxThreadsInOneTask) putInt("scaleDownThreshold", scaleDownThreshold) putInt("minQuadrilateralAreaRatio", minQuadrilateralAreaRatio) putInt("expectedDocumentsCount", expectedDocumentsCount) } fun SimplifiedDocumentNormalizerSettings.updateFromReadableMap(newSettings: ReadableMap) { colourMode = if (newSettings.hasKey("colourMode")) newSettings.getInt("colourMode") else colourMode brightness = if (newSettings.hasKey("brightness")) newSettings.getInt("brightness") else brightness contrast = if (newSettings.hasKey("contrast")) newSettings.getInt("contrast") else contrast maxThreadsInOneTask = if (newSettings.hasKey("maxThreadsInOneTask")) newSettings.getInt("maxThreadsInOneTask") else maxThreadsInOneTask scaleDownThreshold = if (newSettings.hasKey("scaleDownThreshold")) newSettings.getInt("scaleDownThreshold") else scaleDownThreshold pageSize = if (newSettings.hasKey("pageSize")) newSettings.getArray("pageSize")?.toIntArray() else pageSize grayscaleTransformationModes = if (newSettings.hasKey("grayscaleTransformationModes")) newSettings.getArray("grayscaleTransformationModes")?.toIntArray() else grayscaleTransformationModes grayscaleEnhancementModes = if (newSettings.hasKey("grayscaleEnhancementModes")) newSettings.getArray("grayscaleEnhancementModes")?.toIntArray() else grayscaleEnhancementModes minQuadrilateralAreaRatio = if (newSettings.hasKey("minQuadrilateralAreaRatio")) newSettings.getInt("minQuadrilateralAreaRatio") else minQuadrilateralAreaRatio expectedDocumentsCount = if (newSettings.hasKey("expectedDocumentsCount")) newSettings.getInt("expectedDocumentsCount") else expectedDocumentsCount }