Dies ist eine einfache Methode, wie unten:
private Boolean saveImage(Bitmap bitmap){
ByteArrayOutputStream bao = null;
File file = null, image = null;
Boolean save = false;
try{
bao = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bao);
image = new File(Environment.getExternalStorageDirectory() + "", "/yourSelectedFolder/");
if (!image.exists()) {
if (!image.mkdirs()) {
Toast.makeText(context, "Error: Folder Not Created!\nPlease Try Again.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Folder Successfully Created!", Toast.LENGTH_LONG).show();
}
}
file = new File(Environment.getExternalStorageDirectory().toString() + "/yourSelectedFolder/","filename" + ".jpeg");
save = file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
fos.write(bao.toByteArray());
fos.close();
if (save){
Toast.makeText(context, "Image Successfully Saved", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Image Not Saved", Toast.LENGTH_LONG).show();
}
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(context, "Error: "+e, Toast.LENGTH_LONG).show();
}
return save;
}
So etwas wie 'bmp.compress (Bitmap.CompressFormat.PNG, 100);', bevor es irgendwo zu speichern? – KaliMa
Sieht so aus, als brauche es einen Ausgabestream. Normalerweise verwende ich 'MediaStore.Images.Media.insertImage (contentResolver, bitmap, title, description);' um die Bitmap in die Galerie zu übertragen. Gibt es eine Möglichkeit, dies mit einem Ausgabestream zu tun? – KaliMa
Wenn Sie diesen MedaStore-Anruf verwenden, wird also tatsächlich eine geschrumpfte Version des Bildes (ein Miniaturbild) erstellt und nur auf dem Datenträger gespeichert. Es gibt keine Notwendigkeit, es weiter zu verkleinern. Die Komprimierung einer Bitmap besteht nur, wenn das Image auf der Festplatte gespeichert wird. Eine In-Memory-Repräsentation einer Bitmap in einem Bitmap-Objekt wird immer unkomprimiert. –