Wenn ich meine Anwendung auf meinem Android One-Telefon oder Emulator selbst teste, ist alles in Ordnung, aber mit einigen anderen Geräten gibt es ein Problem.Wie erkennt man die Kameraausrichtung in Android?
Problem ist, ich schicke grundsätzlich eine Kameraabsicht, bekomme die Daten von Absicht, nachdem Benutzer ein Foto macht, und ich setze die Pixel von ImageView
mit allem, was ich von der Kamera bekomme. Bei einigen Geräten (meist Samsung) wird das Bild gedreht, es wird nicht so angezeigt, wie es aufgenommen wurde.
Meine App funktioniert nur im Hochformat, aber der Benutzer kann auch im Querformat fotografieren, wenn er das Telefon dreht, wenn er das Bild aufnimmt.
Gibt es eine Möglichkeit, den Standardwinkel zu erkennen, mit dem das Gerät die Bilder dreht, und so rotiere ich das Bitmap nach der Aufnahme des Bildes? Hier
ist der Code:
Senden Absicht:
File path = new File(getActivity().getFilesDir(), "map_roomie");
if (!path.exists()) path.mkdirs();
mFileName = createImageFileName();
File image = new File(path, mFileName);
Uri imageUri = FileProvider.getUriForFile(getActivity(), AddRoomFragment.CAPTURE_IMAGE_FILE_PROVIDER, image);
Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(imageCaptureIntent, AddRoomFragment.CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
Erfassung Absicht auf Fragment
File path = new File(getActivity().getFilesDir(), "map_roomie");
if (!path.exists()) path.mkdirs();
File imageFile = new File(path, mFileName);
setBitmapOfImageView(mCurrentPhotoId, decodeAndReturnBitmap(imageFile.getAbsolutePath()));
Hilfsfunktionen:
public void setBitmapOfImageView(int photoId, Bitmap bitmap)
{
mPhotos[photoId].setImageBitmap(bitmap);
mPhotosState[photoId] = 1;
}
public Bitmap decodeAndReturnBitmap(String filePath)
{
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, o);
final int REQUIRED_SIZE = 512;
int widthTemp = o.outWidth, heightTemp = o.outHeight;
int scale = 1;
while (true) {
if (widthTemp < REQUIRED_SIZE && heightTemp < REQUIRED_SIZE) {
break;
}
widthTemp /= 2;
heightTemp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeFile(filePath, o2);
}
Vielen Dank für die schnelle Antwort. Was soll ich als Argumente zum zweiten und dritten Parameter erstellen und übergeben? –
Können Sie bitte den Code teilen, den Sie geschrieben haben? –