Android zxing - portrait Kamera-Vorschau/surfaceview wird gestreckt/verzogen
Ich geschafft haben, sich die Antwort hier, um die Kamera zu drehen Vorschau Porträt:
http://code.google.com/p/zxing/issues/detail?id=178#c46
jedoch die Vorschau selbst wird gestreckt/verzogen - die Höhe scheint zu sein, stretching, um das Feld zu füllen (aber es könnte sein, dass die Breite ist zu groß für den Bildschirm, und es wird gequetscht wird, um zu passen)
Gibt es eine Möglichkeit, um 'wickeln' der Inhalt, anstatt es zu Strecken, um fit die surfaceview?
EDIT: ich sortierte es, durch die Veränderung der 'findBestPreviewSizeValue' - Methode im 'CameraConfigurationManager" und die Umkehrung der X-und Y-Punkte (danke an sean owen für die Zeiger unten!), hier ist der code:
private static Point findBestPreviewSizeValue(CharSequence previewSizeValueString,
Point screenResolution) {
int bestX = 0;
int bestY = 0;
int diff = Integer.MAX_VALUE;
for (String previewSize : COMMA_PATTERN.split(previewSizeValueString)) {
previewSize = previewSize.trim();
int dimPosition = previewSize.indexOf('x');
if (dimPosition < 0) {
Log.w(TAG, "Bad preview-size: " + previewSize);
continue;
}
int newX;
int newY;
try {
newY = Integer.parseInt(previewSize.substring(0, dimPosition));
newX = Integer.parseInt(previewSize.substring(dimPosition + 1));
//original:
//newX = Integer.parseInt(previewSize.substring(0, dimPosition));
//newY = Integer.parseInt(previewSize.substring(dimPosition + 1));
} catch (NumberFormatException nfe) {
Log.w(TAG, "Bad preview-size: " + previewSize);
continue;
}
int newDiff = Math.abs(newX - screenResolution.x) + Math.abs(newY - screenResolution.y);
if (newDiff == 0) {
bestX = newY;
bestY = newX;
//original:
//bestX = newX;
//bestY = newY;
break;
} else if (newDiff < diff) {
bestX = newY;
bestY = newX;
//original:
//bestX = newX;
//bestY = newY;
diff = newDiff;
}
}
if (bestX > 0 && bestY > 0) {
return new Point(bestX, bestY);
}
return null;
}
- was macht dieser code genau? Wie kann ich es nutzen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen zu tun haben ein gutes Stück mehr, um dieses zu arbeiten, als nur die Vorschau, um portrait-Modus. Zum Beispiel, müssen Sie wählen Sie eine geeignete Größe der Vorschau, jetzt, dass es im hoch -, nicht Querformat.
Verpackung ist sicherlich nicht wünschenswert? Nein das kannst du nicht machen, es wickeln, es wird immer schleudern Sie die ganze Vorschau-Bild auf die
SurfaceView
, dehnen, falls nötig. Ich nehme an, man könnte implementieren Sie eine Menge code, etwas anderes zu tun, aber es wäre ziemlich hart.Ich hatte das gleiche problem aber ich konnte es behoben indem er die aspect ratio auf die CameraConfigurationManager.java Datei im findBestPreviewSizeValue änderung dieser
zu diesem
Ich hier die Lösung gefunden.
http://bighow.net/4660010-Android_zxing___portrait_camera_preview_surfaceview_is_stretched_warped.html
Erhalten Sie Priview Größe, die von dieser Funktion:
private Liste mSupportedPreviewSizes = Parameter.getSupportedPreviewSizes();
Schaffte ich es, diese arbeiten durch ändern untenstehenden code in
CameraConfigurationManager.java
:float screenAspectRatio = (float) screenResolution.x /(float) screenResolution.y;
Zu:
UND
ZU:
Habe ich dieses parallel zu diesem post: Zxing Kamera im Portrait-Modus auf Android
Hoffe, das hilft anderen.
Den Grund der Verformung ist, dass die Vorschau der Kamera-Seitenverhältnis entspricht nicht der Anzeige-Seitenverhältnis.
Meisten Seitenverhältnis der Handy-Bildschirm ist 4:3, wie z.B. 2560 x 1440 Pixel, 1920 x 1080 Pixel und so weiter. Wenn Sie parameter.setPreviewSize(Breite,Höhe) stellen Sie die Kamera-Vorschau dimension, wenn der Wert von Höhe : Breite nicht gleich Ihre Handy-Bildschirm das Seitenverhältnis,wird das Bild der Kamera verformt wird, um zu füllen thg-Bildschirm.