Я не могу заставить свой QR-сканер zxing обнаруживать QR-коды. Я протестировал следующее на эмуляторе и Huawei P20.
Я предположил, что мой QR-код в порядке, поскольку я установил приложение сканера штрих-кода zxing на свой телефон, и оно отлично его обнаруживает.
У меня программа предварительного просмотра камеры работает нормально, и обратный вызов называется нормально. Просто обнаружение вроде ничего не обнаруживает. Я пробовал использовать размер кадра макета, а также размер предварительного просмотра, вы можете увидеть их значения в комментариях к коду. Интересно, не правильно ли я получаю ширину / высоту.
Из моей деятельности ...
override fun onPreviewFrame(data: ByteArray, camera: Camera) {
val length = data.size // 1382400
val previewFormat = camera.parameters.previewFormat // 17 or 0x11 = NV21
try {
// Tried this initially
// val size = camera.parameters.previewSize
// val width = size.width // 320
// val height = size.height // 240
val previewFrame : FrameLayout = findViewById(R.id.camera_preview)
val width = previewFrame.width // 1100
val height = previewFrame.height // 825
val source = PlanarYUVLuminanceSource(data, width, height, 0, 0, width, height, false)
val bitmap = BinaryBitmap(HybridBinarizer(source))
val result = mQrReader.decodeWithState(bitmap)
// Never gets here
qrList.add(result)
adapter?.notifyDataSetChanged()
} catch (nfe: NotFoundException) {
// continue
} catch (e: Exception) {
Toast.makeText(this, "Error: ${e.message}", Toast.LENGTH_SHORT).show()
} finally {
mQrReader.reset()
camera.setOneShotPreviewCallback(this)
}
}
Из моего макета ...
<FrameLayout
android:id="@+id/camera_preview"
android:layout_width="400dp"
android:layout_height="300dp" />
Gradle ...
implementation 'com.google.zxing:core:3.3.3'
В другом сообщении SO Шон Оуэн упоминает, что формат не менялся. Я быстро go в любом случае в отчаянии ...
mCamera!!.parameters.previewFormat = YUV_420_888
, но это вызывает исключение Invalid pixel_format=35
при открытии камеры.