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

  • ¿Cómo incluir la biblioteca Zxing en el proyecto android?
  • Cómo activar el modo de escaneo masivo utilizando la biblioteca Zxing en mi aplicación para escanear códigos de barras múltiples y qrcodes sin mostrar una pantalla de vista previa
  • Vista de cámara personalizada y rotación en Zxing para el código QR?
  • Conflicto Android drawable de la identificación del recurso?
  • Cómo leer varios códigos qr de una imagen usando la biblioteca zxing
  • ¿Cómo forzar el uso de zxing lib con sólo mi aplicación?
  • OnActivityResult Nunca se llama Phonegap Córdoba
  • Cómo obtener un error de cámara en la aplicación de código de barras de Zxing
  • Cómo agregar un logotipo al código QR en android
  • Agregue el proyecto android de ZXing como biblioteca en android studio
  • Agregar menú a ZXings barcodescanner, y apretar la vista de superficie
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.