Wie kann ich die Ausrichtung der Android-Kamera richtig einstellen?
Möchte ich zum einstellen der Ausrichtung der Kamera entsprechend der Lage des Gerätes in Android, aber nichts scheint zu funktionieren. Ich versuchte, Sie zu drehen, die Oberfläche sowie die Parameter der Kamera aber die Kamera-Vorschau im portrait-Modus-kommt immer auf den Kopf. Ich brauchen würde, um drehen Sie ihn um 90 Grad im Uhrzeigersinn, um es zu korrigieren. Hier ist der code, den ich im Augenblick verwende, die arbeitet im landscape-Modus nur.
SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera = null;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
initCamera();
}
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
final double ASPECT_TOLERANCE = 0.2;
double targetRatio = (double) w / h;
if (sizes == null)
return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
//Try to find an size match aspect ratio and size
for (Size size : sizes) {
Log.d(TAG, "Checking size " + size.width + "w " + size.height
+ "h");
double ratio = (double) size.width / size.height;
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
continue;
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
//Cannot find the one match the aspect ratio, ignore the
//requirement
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Camera.Parameters parameters = camera.getParameters();
List<Size> sizes = parameters.getSupportedPreviewSizes();
Size optimalSize = getOptimalPreviewSize(sizes, width, height);
Log.d(TAG, "Surface size is " + width + "w " + height + "h");
Log.d(TAG, "Optimal size is " + optimalSize.width + "w " + optimalSize.height + "h");
parameters.setPreviewSize(optimalSize.width, optimalSize.height);
//parameters.setPreviewSize(width, height);
camera.setParameters(parameters);
camera.startPreview();
}
};
InformationsquelleAutor der Frage Abhinav | 2011-01-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus anderen Mitglied-und mein problem:
Kamera-Drehung in der Ausgabe hängt von verschiedenen Geräten und bestimmten Version.
Version 1.6: - fix der Rotation Problem, und es ist gut für die meisten Geräte
Version 2.1: abhängig von Art der Geräte, zum Beispiel, Cannt beheben Sie das Problem mit XPeria X10, aber es ist gut für X8 und Mini
Version 2.2: nicht für alle Geräte
http://code.google.com/p/android/issues/detail?id=1193#c42
InformationsquelleAutor der Antwort LTEHUB
Aus den Javadocs für
setDisplayOrientation(int)
(Erfordert API-level 9):InformationsquelleAutor der Antwort Jason Robinson
Diese Lösung wird für die Arbeit alle Versionen von Android. Sie können mithilfe von reflektion in Java, damit es funktioniert für alle Android-Geräte:
Grundsätzlich sollten Sie eine Reflexion wrapper zum Aufruf des Android 2.2 setDisplayOrientation, anstelle von aufrufen der Methode.
Methode:
Und statt mit Kamera.setDisplayOrientation(x) Verwendung setDisplayOrientation(Kamera, x) :
InformationsquelleAutor der Antwort hnviet
Ich Stand vor dem Problem, wenn ich mit ZBar für das Scannen in tabs.
Ausrichtung der Kamera-Problem. Mit folgenden code konnte ich beheben des Problems.
Dies ist nicht der ganze code-snippet, nehmen Sie Bitte nur Hilfe von dieser.
InformationsquelleAutor der Antwort DeepakPanwar
Ich schließlich fest, dies mit der Google Kamera-app. Es wird die Telefon-Orientierung, indem mit Hilfe eines Sensors und dann setzt das EXIF-tag entsprechend. Das JPEG von der Kamera orientiert sich nicht automatisch.
Auch die Kamera-Vorschau funktioniert nur im landscape-Modus. Wenn Sie Ihre Aktivität layout orientiert sein portrait haben, müssen Sie es manuell tun, verwenden Sie den Wert aus der Orientierung sensor.
InformationsquelleAutor der Antwort Abhinav
Wurde dieses problem gelöst, vor langer Zeit, aber ich auf ein paar Schwierigkeiten gestoßen, um alle Stücke zusammen, so, hier ist meine Letzte Lösung, ich hoffe, das wird anderen helfen :
InformationsquelleAutor der Antwort Louis GRIGNON
check-out dieser Lösung
InformationsquelleAutor der Antwort justchill