Wie kann ich ein Bitmap-Bild auf der SD-Karte speichern, ohne die Originalgröße oder -qualität zu verlieren? Ich verwende derzeit diesen Code, aber er speichert das Bild immer viel kleiner als die Originalgröße des von der Kamera aufgenommenen Bildes.
private void SaveImage(Bitmap bitmap, String strType) {
File sdImageMainDirectory = new File("/sdcard/");
if (sdImageMainDirectory.exists()) {
FileOutputStream fileOutputStream = null;
Date dt = new Date();
String nameFile = "myImage";
int quality = 100;
try {
String strFullImageName;
strFullImageName = UserID + "_" + nameFile + ".jpg";
fileOutputStream = new FileOutputStream(
sdImageMainDirectory.toString() + "/"
+ strFullImageName);
BufferedOutputStream bos = new BufferedOutputStream(
fileOutputStream);
bitmap.compress(CompressFormat.JPEG, quality, bos);
bos.flush();
bos.close();
UploadImage(bitmap, strFullImageName, strType);
} catch (FileNotFoundException e) {
Utilities.LogError(e);
} catch (IOException e) {
Utilities.LogError(e);
} catch (Exception eee) {
Utilities.LogError(eee);
}
} else {
Utilities.LogError("File not Found");
}
}
Ich habe die Lösung gefunden,
Nachdem ich dem von KPBird zur Verfügung gestellten Link gefolgt war, stellte ich fest, dass das Problem darin lag, wie die Kameraaktivität das erfasste Bitmap-Objekt zurückgab.
Um Speicherplatz zu sparen, gibt die Kameraaktivität ein skaliertes Bild des aufgenommenen Fotos zurück; die Lösung war also, dieses skalierte Bild niemals zu verwenden!
Übergeben Sie einfach ein Extra an den Kamera-Intent und geben Sie die URL an, unter der Sie das Bild speichern möchten, und schon wird das aufgenommene Foto dort gespeichert, wo Sie es haben möchten, mit dem ursprünglichen Maßstab.
Code:
private static final int CAMERA_PIC_REQUEST = 1337;
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
imageNameToUpload = "myImage.jpeg";
cameraIntent.putExtra( android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File( imagePathToUpload+imageNameToUpload)));
startActivityForResult(cameraIntent,
CAMERA_PIC_REQUEST);
Danke KPBird!