Подтвердить что ты не робот

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

4b9b3361

Ответ 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