我想要做的事情:用相机搜索QR码,在检测到QR码时拍下照片,然后再扫描一下图片,找到图片中QR码的位置。我知道我可以从surfaceview中的surfaceholder获取QR码的位置,但是因为我需要根据QR码位置从图像中提取更多数据,我需要获取图像并再次在其上运行检测器
问题:在检测到并拍摄了QR码后,第二次“扫描”没有检测到图像中的QR码。
我的代码
barcodeDetector = new BarcodeDetector.Builder(this)
.setBarcodeFormats(Barcode.QR_CODE)
.build();
cameraSource = new CameraSource
.Builder(this, barcodeDetector)
.setRequestedPreviewSize(1794, 1080)
.setAutoFocusEnabled(true)
.build();
当检测到QR码时,运行该方法拍摄QR码的图片
cameraSource.takePicture(null, new CameraSource.PictureCallback() {
@Override
public void onPictureTaken(byte[] bytes) {
bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
detectorOnBitMap();
}
});
将字节数组转换为位图后,将调用以下方法
public void detectorOnBitMap() {
Frame frame = new Frame.Builder().setBitmap(bmp).build();
colorview.setImageBitmap(frame.getBitmap());
SparseArray<Barcode> barcodesTRUE = barcodeDetector.detect(frame);
if (barcodesTRUE.size() != 0) {
Log.d("TAG", "Found QR-code");
} else {
Log.d("Tag", "Did not find QR-code");
}
}
但不知何故,探测器在位图中找不到QR码。为什么?尝试在Imageview中显示位图,图片看起来应该如此。尝试将其保存到jpeg / png,然后在加载有效的图像后扫描它,但仅在压缩位图之后。将字节数组转换为位图时,我做错了吗?
提前致谢!