studio - Android Zxing cambia la orientación al retrato
zxing android ultima version (8)
En
CameraConfigurationManager
:camera.setDisplayOrientation(90);
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;
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;
En
CameraConfigurationManager
:if (width > height) { Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect"); int temp = width; width = height; height = temp; }
Cambiar
android:screenOrientation="portrait"
paraCaptureActivity
en manifiesto.
Estoy intentando rotar la pantalla Zxing después de leer algunas preguntas y publicaciones sobre el tema. Después de seguir las instrucciones, la pantalla giró, pero el rectángulo del escáner no está colocado como debería (como se puede ver en la imagen adjunta).
Esto es lo que he hecho:
en CameraConfigurationManager:
camera.setDisplayOrientation(90);
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;
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;
¡¡Gracias por su respuesta!! realmente me ayudó, una cosa que noté es que al menos en zxing 2.1 necesita pasar "rotatedData" para construirLuminanceSource en lugar de simplemente "datos", la línea termina así:
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
¡Espero que esto ayude a alguien más!
Bueno, hice un pequeño cambio en ProjectLibrary (proyecto xzing) y pude cambiar el paisaje de orientación a retrato
En el setDesiredCameraParameters method of class CameraConfigurationManager
agregado
camera.setDisplayOrientation(90);
.. en el archivo AndroidManifest.xml
mi proyecto original. Configuré screenOrientation = portrait
y funciona 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>
Después de muchas dificultades, encontré el problema, y espero que ayude a alguien en el futuro.
En el método initFromCameraParameters
en CameraConfigurationManager
se supone que el escaneo ALWAYS in landscape mode
está ALWAYS in landscape mode
y, por lo tanto, se corrige cuando width < height
. Si sigue los pasos de la pregunta y elimina esta verificación, funciona bien.
En tu biblioteca ve al archivo de manifiesto cambia la siguiente línea debajo de la etiqueta de actividad
android:screenOrientation="portrait"
He probado varios parches, sugeridos en otras respuestas, pero el reconocimiento del código de barras no fue 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.
Soy un desarrollador de Barcode Scanner. Sí, se necesita mucho más para escanear en modo vertical. Debe "rotar" los datos de la imagen y tener en cuenta la orientación del dispositivo, su orientación predeterminada y la orientación del sensor.
Barcode Scanner + escanea en modo vertical y puede integrarse con Intent de la misma manera que lo hace con Barcode Scanner . (Sin embargo, es una aplicación de pago).
A partir de la biblioteca zxing: el soporte 2.2.0 para el cambio de orientación es inherente
Agregue / edite lo siguiente en el manifiesto:
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="fullSensor"
tools:replace="screenOrientation" />
Establezca 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