Android Zxing меняет ориентацию на портрет
Я пытаюсь повернуть дисплей Zxing после прочтения нескольких вопросов и сообщений об этой проблеме.
После выполнения инструкций дисплей повернулся, но прямоугольник сканера
(как можно видеть на прикрепленном изображении).
Это то, что я сделал:
-
в CameraConfigurationManager:
camera.setDisplayOrientation(90);
-
в DecodeHandler.java
byte[] rotatedData = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
rotatedData[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width;
width = height;
height = tmp;
-
в CameraManager.java:
rect.left = rect.left * cameraResolution.y / screenResolution.x;
rect.right = rect.right * cameraResolution.y / screenResolution.x;
rect.top = rect.top * cameraResolution.x / screenResolution.y;
rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;
![enter image description here]()
Ответы
Ответ 1
После многих проблем я нашел проблему, и я надеюсь, что это поможет кому-то в будущем.
В методе initFromCameraParameters
в CameraConfigurationManager
есть предположение, что сканирование ALWAYS in landscape mode
, и для этого существует исправление, когда width < height
.
Если вы выполните шаги в вопросе и удалите эту проверку, она отлично работает.
Ответ 2
Спасибо за ваш ответ! это действительно помогло мне, одна вещь, которую я заметил, заключается в том, что, по крайней мере, на zxing 2.1 вам нужно передать "rotatedData" для buildLuminanceSource вместо "данных", строка будет выглядеть следующим образом:
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
Надеюсь, это поможет кому-то еще!
Ответ 3
Ну, я сделал небольшое изменение в ProjectLibrary (проект xzing) и смог изменить ориентацию ландшафта на портрет
В setDesiredCameraParameters method of class CameraConfigurationManager
добавлен
camera.setDisplayOrientation(90);
.. в моем исходном файле проекта AndroidManifest.xml
. Я установил screenOrientation = portrait
и его работу на моем ICS 4.0.3
<activity
android:name="com.google.zxing.client.android.CaptureActivity"
android:configChanges="orientation|keyboardHidden"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden" >
<intent-filter>
<action android:name="com.phonegap.plugins.barcodescanner.SCAN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Ответ 4
-
В CameraConfigurationManager
:
camera.setDisplayOrientation(90);
-
В DecodeHandler.java
:
byte[] rotatedData = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
rotatedData[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width;
width = height;
height = tmp;
-
В CameraManager.java
:
rect.left = rect.left * cameraResolution.y / screenResolution.x;
rect.right = rect.right * cameraResolution.y / screenResolution.x;
rect.top = rect.top * cameraResolution.x / screenResolution.y;
rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;
-
В CameraConfigurationManager
:
if (width > height) {
Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");
int temp = width;
width = height;
height = temp;
}
-
Измените android:screenOrientation="portrait"
на CaptureActivity
в манифесте.
Ответ 5
Я разработчик сканера штрих-кода. Да, для сканирования в портретном режиме требуется гораздо больше. Вы должны "вращать" данные изображения и учитывать ориентацию устройства, его ориентацию по умолчанию и ориентацию датчика.
Сканер штрих-кодов + сканирует в портретном режиме, и вы можете интегрироваться с ним через Intent точно так же, как вы интегрировать со сканером штрих-кодов. (Однако это приложение для оплаты.)
Ответ 6
В соответствии с библиотекой zxing: 2.2.0 поддержка изменения ориентации присуща
Добавить/изменить в манифесте следующее:
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="fullSensor"
tools:replace="screenOrientation" />
Задайте дополнительное свойство при вызове сканера:
IntentIntegrator integrator = new IntentIntegrator(this);
//allows portrait/landscape mode
integrator.setOrientationLocked(false);//"additional property"
integrator.initiateScan();
Ссылка ссылки: https://github.com/journeyapps/zxing-android-embedded#changing-the-orientation
Ответ 7
Я пробовал различные исправления, предлагаемые в других ответах, но распознавание штрих-кода оставалось ненадежным.
Я настоятельно рекомендую использовать репозиторий ниже в портретном режиме. Попробуйте, это быстро и стабильно. Я использовал его в своем гибридном приложении.
https://github.com/Dbuggerx/BarcodeScanner