Android Zxing cambia orientamento al ritratto
Sto provando a ruotare l'esposizione Zxing dopo aver letto alcune domande e post su questo problema. Dopo aver seguito le istruzioni, il display ha ruotato, ma il rettangolo dello scanner non è posizionato come dovrebbe (come si può vedere sull'image allegata).
Questo è ciò che ho fatto:
-
in CameraConfigurationManager:
camera.setDisplayOrientation(90);
-
in 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;
-
in 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;
7 Solutions collect form web for “Android Zxing cambia orientamento al ritratto”
Dopo un sacco di difficoltà, ho trovato il problema e spero che possa aiutare qualcuno in futuro.
Sul metodo initFromCameraParameters
in CameraConfigurationManager
esiste un presupposto che la scansione sia sempre ALWAYS in landscape mode
e pertanto una correzione quando la width < height
. Se segui i passaggi della domanda e rimuovi questo controllo, funziona bene.
La ringrazio per la risposta!! mi ha veramente aiutato, una cosa che ho notato è che alless su zxing 2.1 devi passare "rotatedData" per buildLuminanceSource invece di solo "dati", la linea finisce così:
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
Speriamo che questo aiuti qualcun altro!
Beh ho fatto un piccolo cambiamento in ProjectLibrary (progetto xzing) e in grado di cambiare il paesaggio dell'orientamento in ritratto
Nel setDesiredCameraParameters method of class CameraConfigurationManager
aggiunto
camera.setDisplayOrientation(90);
.. nel mio file originale di AndroidManifest.xml
del progetto. Ho impostato screenOrientation = portrait
e il suo funzionamento bene sul mio 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>
-
In
CameraConfigurationManager
:camera.setDisplayOrientation(90);
-
In
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;
-
In
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;
-
In
CameraConfigurationManager
:if (width > height) { Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect"); int temp = width; width = height; height = temp; }
-
Cambiare
android:screenOrientation="portrait"
perCaptureActivity
nel manifesto.
Sono uno sviluppatore di Barcode Scanner. Sì, ci vuole molto di più per eseguire la scansione in modalità ritratto. Dovete "ruotare" i dati dell'image e calcolare l'orientamento del dispositivo, il suo orientamento predefinito e l'orientamento del sensore.
Scanner di codici a barre + esegue la scansione in modalità ritratto e puoi integrarti con Intent nello stesso modo in cui si integra con il codice a barre . (Tuttavia è un'applicazione per pagare).
A partire dalla libreria zxing: 2.2.0 il supporto per la modifica dell'orientamento è inerente
Aggiungere / modifica quanto segue nel manifesto:
<activity android:name="com.journeyapps.barcodescanner.CaptureActivity" android:screenOrientation="fullSensor" tools:replace="screenOrientation" />
Imposta properties; aggiuntiva alla chiamata allo scanner:
IntentIntegrator integrator = new IntentIntegrator(this); //allows portrait/landscape mode integrator.setOrientationLocked(false);//"additional property" integrator.initiateScan();
Link di riferimento: https://github.com/journeyapps/zxing-android-embedded#changing-the-orientation
Ho provato diverse patch, suggerite in altre risposte, ma il riconoscimento dei codici a barre è rimasto non affidabile.
Raccommand vivamente di usare il repository qui sotto in modalità ritratto. Provare, è veloce e stabile. L'ho usato nella mia applicazione ibrida.