524 Stimmen

Bitmap an einem Ort speichern

Ich arbeite an einer Funktion, die ein Bild von einem Webserver herunterlädt, es auf dem Bildschirm anzeigt und, wenn der Benutzer das Bild behalten möchte, es auf der SD-Karte in einem bestimmten Ordner speichert. Gibt es eine einfache Möglichkeit, ein Bitmap zu nehmen und es einfach auf der SD-Karte in einem Ordner meiner Wahl zu speichern?

Mein Problem ist, dass ich das Bild herunterladen kann, zeigen Sie es auf dem Bildschirm als Bitmap. Die einzige Möglichkeit, die ich gefunden habe, um ein Bild in einem bestimmten Ordner zu speichern, ist die Verwendung von FileOutputStream, aber das erfordert ein Byte-Array. Ich bin nicht sicher, wie zu konvertieren (wenn dies sogar der richtige Weg ist) von Bitmap zu Byte-Array, so dass ich eine FileOutputStream verwenden können, um die Daten zu schreiben.

Die andere Möglichkeit, die ich habe, ist die Verwendung von MediaStore :

MediaStore.Images.Media.insertImage(getContentResolver(), bm,
    barcodeNumber + ".jpg Card Image", barcodeNumber + ".jpg Card Image");

Das Speichern auf der SD-Karte funktioniert gut, aber Sie können den Ordner nicht anpassen.

13voto

shinydev Punkte 759

Bei einigen Formaten, wie z. B. PNG, das verlustfrei ist, wird die Qualitätseinstellung ignoriert.

13voto

A-Droid Tech Punkte 2221

Hier ist der Beispielcode zum Speichern von Bitmaps in einer Datei:

public static File savebitmap(Bitmap bmp) throws IOException {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 60, bytes);
    File f = new File(Environment.getExternalStorageDirectory()
            + File.separator + "testimage.jpg");
    f.createNewFile();
    FileOutputStream fo = new FileOutputStream(f);
    fo.write(bytes.toByteArray());
    fo.close();
    return f;
}

Rufen Sie nun diese Funktion auf, um die Bitmap im internen Speicher zu speichern.

File newfile = savebitmap(bitmap) ;

Ich hoffe, es wird Ihnen helfen. Viel Spaß beim Coden.

8voto

Ashish Anand Punkte 3431
Bitmap bbicon;

bbicon=BitmapFactory.decodeResource(getResources(),R.drawable.bannerd10);
//ByteArrayOutputStream baosicon = new ByteArrayOutputStream();
//bbicon.compress(Bitmap.CompressFormat.PNG,0, baosicon);
//bicon=baosicon.toByteArray();

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
OutputStream outStream = null;
File file = new File(extStorageDirectory, "er.PNG");
try {
    outStream = new FileOutputStream(file);
    bbicon.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();
} catch(Exception e) {

}

8voto

TofuBeer Punkte 59410

Warum rufen Sie nicht die Bitmap.compress Methode mit 100 (was sich so anhört, als ob sie verlustfrei wäre)?

6voto

user511895 Punkte 109

Ich würde auch gerne ein Bild speichern. Aber mein Problem(?) ist, dass ich es aus einer Bitmap speichern möchte, die ich gezeichnet habe.

Ich habe es so gemacht:

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.save_sign:      

                myView.save();
                break;

            }
            return false;    

    }

public void save() {
            String filename;
            Date date = new Date(0);
            SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");
            filename =  sdf.format(date);

            try{
                 String path = Environment.getExternalStorageDirectory().toString();
                 OutputStream fOut = null;
                 File file = new File(path, "/DCIM/Signatures/"+filename+".jpg");
                 fOut = new FileOutputStream(file);

                 mBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
                 fOut.flush();
                 fOut.close();

                 MediaStore.Images.Media.insertImage(getContentResolver()
                 ,file.getAbsolutePath(),file.getName(),file.getName());

            }catch (Exception e) {
                e.printStackTrace();
            }

 }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X