Android Zxing cambia la orientación al retrato

Estoy tratando de girar pantalla Zxing después de leer algunas preguntas y mensajes sobre el tema. Después de seguir las instrucciones, la pantalla giró, pero el rectángulo del escáner no está posicionado como debería (como puede verse en la imagen adjunta).

Esto es lo que he hecho:

  1. En CameraConfigurationManager:

    camera.setDisplayOrientation(90); 
  2. En 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; 
  3. En 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; 

Introduzca aquí la descripción de la imagen

Después de muchos problemas, encontré el problema, y ​​espero que ayude a alguien en el futuro.

En el método initFromCameraParameters en CameraConfigurationManager hay una suposición de que la exploración está ALWAYS in landscape mode y, por lo tanto, una corrección cuando width < height . Si sigue los pasos de la pregunta y elimina esta comprobación, funciona bien.

¡¡Gracias por su respuesta!! Realmente me ayudó, una cosa que me di cuenta es que al menos en zxing 2.1 que necesita para pasar "rotatedData" a buildLuminanceSource en lugar de sólo "datos", la línea de terminar así:

 PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height); 

Espero que esto ayude a otra persona!

Bueno hice un pequeño cambio en ProjectLibrary (proyecto xzing) y capaz de cambiar el paisaje de orientación a retrato

En el setDesiredCameraParameters method of class CameraConfigurationManager añadido

camera.setDisplayOrientation(90);

.. en el archivo AndroidManifest.xml mi proyecto original. He establecido screenOrientation = portrait y su funcionamiento muy bien en mi 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> 
  1. En CameraConfigurationManager :

     camera.setDisplayOrientation(90); 
  2. En 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; 
  3. En 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; 
  4. En CameraConfigurationManager :

     if (width > height) { Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect"); int temp = width; width = height; height = temp; } 
  5. Cambiar android:screenOrientation="portrait" para CaptureActivity en el manifiesto.

Soy desarrollador de Barcode Scanner. Sí, se necesita mucho más que esto para hacer que escanee en modo retrato. Tienes que "girar" los datos de la imagen y explicar la orientación del dispositivo, su orientación predeterminada y la orientación de su sensor.

Barcode Scanner + escanea en modo vertical, y puede integrarse con él a través de Intent exactamente de la misma manera que se integra con Barcode Scanner . (Sin embargo, es una aplicación de pago).

Como de la biblioteca zxing: 2.2.0 el apoyo para el cambio de orientación es inherente

Añada o edite lo siguiente en el manifiesto:

 <activity android:name="com.journeyapps.barcodescanner.CaptureActivity" android:screenOrientation="fullSensor" tools:replace="screenOrientation" /> 

Establecer propiedad adicional en la llamada al escáner:

 IntentIntegrator integrator = new IntentIntegrator(this); //allows portrait/landscape mode integrator.setOrientationLocked(false);//"additional property" integrator.initiateScan(); 

Enlace de referencia: https://github.com/journeyapps/zxing-android-embedded#changing-the-orientation

He probado varios parches, sugerido en otras respuestas, pero el reconocimiento de códigos de barras no era confiable.

Recomiendo usar el repositorio a continuación en modo retrato. Pruébalo, es rápido y estable. Lo usé en mi aplicación híbrida.

https://github.com/Dbuggerx/BarcodeScanner

  • Resolución fallida de: Lcom / abhi / código de barras / frag / libv2 / R $ string
  • Crear un código QR y mostrarlo en ImageView
  • Problema en la generación de eventos de calendario utilizando zxing
  • Cámara Android centrada sólo una vez
  • Android con ZXing genera código QR
  • Escáner de código de barras ZXing en diseño personalizado en fragmento
  • Integre ZXing en Android Studio
  • GridLayoutManager spanSizeLookup error
  • Android: ClassNotFoundException mientras incluye ZXing
  • Cómo activar la exploración de modo masivo en zxing
  • Cómo decodificar datos utilizando Zxing C ++
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.