Ich baue eine Anwendung, die Kamera verwendet, um Bilder aufzunehmen. Hier ist mein Quellcode, um dies zu tun:
File file = new File(Environment.getExternalStorageDirectory(),
imageFileName);
imageFilePath = file.getPath();
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE);
Bei der onActivityResult()
Methode verwende ich, BitmapFactory.decodeStream()
um das Bild aufzunehmen.
Wenn ich meine Anwendung auf Nexus One ausführe, läuft sie gut. Wenn ich jedoch mit Samsung Galaxy S oder HTC Inspire 4G arbeite, ist die Bildrichtung nicht korrekt.
- Bei der Aufnahme im Hochformat dreht sich das reale Bild (auf SD-Karte speichern) immer um 90 Grad.
Bildvorschau nach der Aufnahme --------- Echtes Bild auf SD-Karte
- Mit Querformat aufnehmen, alles ist gut.
Bildvorschau nach der Aufnahme --------- Echtes Bild auf SD-Karte
android
orientation
android-camera-intent
Nguyen Minh Binh
quelle
quelle
Antworten:
Es gibt hier einige ähnliche Themen und Probleme. Da Sie keine eigene Kamera schreiben, läuft es meiner Meinung nach darauf hinaus:
Einige Geräte drehen das Bild vor dem Speichern, während andere einfach das Orientierungs-Tag in die Exif-Daten des Fotos einfügen.
Ich würde empfehlen, die Exif-Daten des Fotos zu überprüfen und besonders danach zu suchen
Da das Foto in Ihrer App korrekt angezeigt wird, bin ich mir nicht sicher, wo das Problem liegt, aber dies sollte Sie auf jeden Fall auf den richtigen Weg bringen!
quelle
Ich bin gerade auf dasselbe Problem gestoßen und habe dies verwendet, um die Ausrichtung zu korrigieren:
Wenn die Breite der Bitmap größer als die Höhe ist, befindet sich das zurückgegebene Bild im Querformat, sodass ich es um 90 Grad drehe.
Hoffe, es hilft anderen bei diesem Problem.
quelle
Es sind zwei Dinge erforderlich:
Die Kameravorschau muss der Rotation entsprechen. Stellen Sie dies ein durch
camera.setDisplayOrientation(result);
Speichern Sie das aufgenommene Bild als Kameravorschau. Tun Sie dies über
Camera.Parameters
.Hoffentlich hilft das.
quelle
parameters.setRotation(result)
, nein?quelle
Eine andere Möglichkeit besteht darin, die Bitmap im Ergebnisbildschirm wie folgt zu drehen:
quelle
Ich habe auch diese Art von Problem für einige Geräte:
quelle
Versuchen Sie es folgendermaßen: static Uri image_uri; statische Bitmap take_image = null;
}}
quelle
Keine Überprüfung der Exif-Daten des Fotos mehr. Gehen Sie einfach mit Glide .
Google hat uns eine von Bumptech entwickelte Image Loader Library für Android namens Glide als von Google empfohlene Bibliothek vorgestellt. Es wurde bisher in vielen Open Source-Projekten von Google verwendet, einschließlich der offiziellen Anwendung von Google I / O 2014.
Beispiel: Glide.with (Kontext) .load (uri) .into (Bildansicht);
Für mehr: https://github.com/bumptech/glide
quelle
Hoffe das wird helfen !! Vielen Dank
quelle
Ich hoffe das wird helfen. Danke!
quelle
Stoßen Sie hier auf dasselbe Problem, das folgende Codefragment funktioniert für mich:
hoffe das hilft :)
quelle
Versuchen Sie dies im Rückruf von surfaceChanged:
quelle
// Schaltfläche klicken
// onActivityResult-Methode
// einen Klassendateipfad erstellen
öffentliche Klasse FilePath {
}}
quelle
Der Code ist funktional für Quer- und Hochformat @frontCameraID = Variable hat es die klassische Methode für Showkamera gesucht
Methode zum Abrufen der Ausrichtung und Drehung zum Speichern des Bilds und Anzeigen der Ausrichtung @result = Ausrichtung in der Vorschau der Kamera @rotationPicture = Drehung erforderlich, um das Bild korrekt zu speichern
Jemand fragt nach Code, bitte sag es mir.
quelle
zwei Einzeilige Lösungen mit Picasso und Gleitbibliothek
Nachdem ich viel Zeit mit vielen Lösungen für das Problem der Bildrotation verbracht hatte, fand ich endlich zwei einfache Lösungen. Wir müssen keine zusätzlichen Arbeiten durchführen. Picasso und Glide sind eine sehr leistungsstarke Bibliothek für die Verarbeitung von Bildern in Ihrer App. Es liest EXIF-Bilddaten und dreht die Bilder automatisch.
Verwenden der Gleitbibliothek https://github.com/bumptech/glide
Verwenden der Picasso-Bibliothek https://github.com/square/picasso
quelle