package com.barcodescanner import android.util.Log import com.facebook.react.bridge.Promise import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.module.annotations.ReactModule import com.google.zxing.BinaryBitmap import com.google.zxing.MultiFormatReader import com.google.zxing.NotFoundException import com.google.zxing.RGBLuminanceSource import com.google.zxing.common.HybridBinarizer import java.io.File @ReactModule(name = ScanFromFileModule.NAME) class ScanFromFileModule(reactContext: ReactApplicationContext) : NativeScanQRFileSpec(reactContext) { companion object { const val NAME = "ScanQRFile" } override fun getName(): String { return NAME } override fun scan(filePath: String?, promise: Promise?) { runCatching { val bitmap = BitmapUtils.getResizedBitmap(filePath, 800, 600) if (bitmap == null) { promise?.resolve(null) } else { val width = bitmap.width val height = bitmap.height val pixels = IntArray(width * height) bitmap.getPixels(pixels, 0, width, 0, 0, width, height) val source = RGBLuminanceSource(width, height, pixels) val bBitmap = BinaryBitmap(HybridBinarizer(source)) val reader = MultiFormatReader() Log.e("ScanFromFileModule", "scan: " + bBitmap.width + " " + bBitmap.height) val result = reader.decodeWithState(bBitmap) Log.e("ScanFromFileModule","result: " + result.text) bitmap.recycle() promise?.resolve(result.text) } }.onFailure { it.printStackTrace() promise?.resolve(null) } } }