У меня есть растровое изображение QRcode. Я хочу прочитать QR-код, поэтому я использую Обнаружение штрих-кода с Mobile Vision API , он не работает, и я также использую Zxing, он работает, но это занимает много времени, если не найден QR-код на изображении, могу ли я сделать тайм-аут по этому методу.
//Vision API
Bitmap pic = api.getBitmapNavCam();
String sPic = convert(pic,x);
public String convert(Bitmap myBitmap,double x){
String text = "";
BarcodeDetector detector = new BarcodeDetector.Builder(getApplicationContext())
.setBarcodeFormats(Barcode.DATA_MATRIX | Barcode.QR_CODE).build();
if(!detector.isOperational()){
Log.d(TAG,"no QR");
}
Frame frame = new Frame.Builder().setBitmap(myBitmap).build();
SparseArray<Barcode> barcodes = detector.detect(frame);
Barcode thisCode = barcodes.valueAt(0);
text = thisCode.rawValue;
Log.d(TAG,"rawVal= "+x+", "+text);
return text;
}
*
//Zxing
public String convert(Bitmap mp,double pos) {
final long start = System.currentTimeMillis();
String decodText;
int width = mp.getWidth();
int height = mp.getHeight();
int[] pixels = new int[width * height];
mp.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
Log.d(TAG, "doing Convoert: "+pos+", "+width+", "+height);
decodText = "";
try {
final com.google.zxing.Result result = new MultiFormatReader().decode(new BinaryBitmap(new HybridBinarizer(source)));
final long end = System.currentTimeMillis();
Log.d(TAG, "QRCode decode in " + (end - start) + "ms");
decodText = result.getText();
} catch (Exception e) {
decodText = "";
final long endx = System.currentTimeMillis();
Log.d(TAG, "Error Read Bitmap: "+pos+", " + e+" , " + (endx - start) + "ms");
}finally {
return decodText;
}
}