react-native-rectangle-doc-scanner 3.232.0 → 3.233.0

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.
@@ -228,6 +228,42 @@ class DocumentDetector {
228
228
  return RectangleQuality.GOOD
229
229
  }
230
230
 
231
+ /**
232
+ * Evaluate rectangle quality in view coordinates (closer to iOS behavior).
233
+ */
234
+ fun evaluateRectangleQualityInView(
235
+ rectangle: Rectangle,
236
+ viewWidth: Int,
237
+ viewHeight: Int
238
+ ): RectangleQuality {
239
+ if (viewWidth == 0 || viewHeight == 0) {
240
+ return RectangleQuality.TOO_FAR
241
+ }
242
+
243
+ val minDim = min(viewWidth.toDouble(), viewHeight.toDouble())
244
+ val angleThreshold = max(60.0, minDim * 0.05)
245
+
246
+ val topYDiff = abs(rectangle.topRight.y - rectangle.topLeft.y)
247
+ val bottomYDiff = abs(rectangle.bottomLeft.y - rectangle.bottomRight.y)
248
+ val leftXDiff = abs(rectangle.topLeft.x - rectangle.bottomLeft.x)
249
+ val rightXDiff = abs(rectangle.topRight.x - rectangle.bottomRight.x)
250
+
251
+ if (topYDiff > angleThreshold || bottomYDiff > angleThreshold || leftXDiff > angleThreshold || rightXDiff > angleThreshold) {
252
+ return RectangleQuality.BAD_ANGLE
253
+ }
254
+
255
+ val margin = max(150.0, minDim * 0.15)
256
+ if (rectangle.topLeft.y > margin ||
257
+ rectangle.topRight.y > margin ||
258
+ rectangle.bottomLeft.y < (viewHeight - margin) ||
259
+ rectangle.bottomRight.y < (viewHeight - margin)
260
+ ) {
261
+ return RectangleQuality.TOO_FAR
262
+ }
263
+
264
+ return RectangleQuality.GOOD
265
+ }
266
+
231
267
  /**
232
268
  * Calculate perimeter of rectangle
233
269
  */
@@ -186,17 +186,17 @@ class DocumentScannerView(context: ThemedReactContext) : FrameLayout(context), L
186
186
  }
187
187
  lastDetectionTimestamp = now
188
188
 
189
- val quality = if (rectangle != null) {
190
- DocumentDetector.evaluateRectangleQuality(rectangle, imageWidth, imageHeight)
191
- } else {
192
- RectangleQuality.TOO_FAR
193
- }
194
-
195
189
  val rectangleOnScreen = if (rectangle != null && width > 0 && height > 0) {
196
190
  DocumentDetector.transformRectangleToViewCoordinates(rectangle, imageWidth, imageHeight, width, height)
197
191
  } else {
198
192
  null
199
193
  }
194
+ val quality = when {
195
+ rectangleOnScreen != null && width > 0 && height > 0 ->
196
+ DocumentDetector.evaluateRectangleQualityInView(rectangleOnScreen, width, height)
197
+ rectangle != null -> DocumentDetector.evaluateRectangleQuality(rectangle, imageWidth, imageHeight)
198
+ else -> RectangleQuality.TOO_FAR
199
+ }
200
200
 
201
201
  post {
202
202
  onRectangleDetected(rectangleOnScreen, rectangle, quality, imageWidth, imageHeight)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-rectangle-doc-scanner",
3
- "version": "3.232.0",
3
+ "version": "3.233.0",
4
4
  "description": "Native-backed document scanner for React Native with customizable overlays.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",