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.

5voto

JulienGenoud Punkte 553

Ich habe einen Weg gefunden, um PNG und Transparenz zu senden.

String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() +
                    "/CustomDir";
File dir = new File(file_path);
if(!dir.exists())
  dir.mkdirs();

String format = new SimpleDateFormat("yyyyMMddHHmmss",
       java.util.Locale.getDefault()).format(new Date());

File file = new File(dir, format + ".png");
FileOutputStream fOut;
try {
        fOut = new FileOutputStream(file);
        yourbitmap.compress(Bitmap.CompressFormat.PNG, 85, fOut);
        fOut.flush();
        fOut.close();
     } catch (Exception e) {
        e.printStackTrace();
 }

Uri uri = Uri.fromFile(file);     
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
intent.putExtra(android.content.Intent.EXTRA_TEXT, "");
intent.putExtra(Intent.EXTRA_STREAM, uri);

startActivity(Intent.createChooser(intent,"Sharing something")));

5voto

Bhavik Nathani Punkte 397

Bitmap ohne Komprimierung in Ihrer Galerie speichern.

private File saveBitMap(Context context, Bitmap Final_bitmap) {
    File pictureFileDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Your Folder Name");
    if (!pictureFileDir.exists()) {
        boolean isDirectoryCreated = pictureFileDir.mkdirs();
        if (!isDirectoryCreated)
            Log.i("TAG", "Can't create directory to save the image");
        return null;
    }
    String filename = pictureFileDir.getPath() + File.separator + System.currentTimeMillis() + ".jpg";
    File pictureFile = new File(filename);
    try {
        pictureFile.createNewFile();
        FileOutputStream oStream = new FileOutputStream(pictureFile);
        Final_bitmap.compress(Bitmap.CompressFormat.PNG, 100, oStream);
        oStream.flush();
        oStream.close();
        Toast.makeText(Full_Screen_Activity.this, "Save Image Successfully..", Toast.LENGTH_SHORT).show();
    } catch (IOException e) {
        e.printStackTrace();
        Log.i("TAG", "There was an issue saving the image.");
    }
    scanGallery(context, pictureFile.getAbsolutePath());
    return pictureFile;
}
private void scanGallery(Context cntx, String path) {
    try {
        MediaScannerConnection.scanFile(cntx, new String[]{path}, null, new MediaScannerConnection.OnScanCompletedListener() {
            public void onScanCompleted(String path, Uri uri) {
                Toast.makeText(Full_Screen_Activity.this, "Save Image Successfully..", Toast.LENGTH_SHORT).show();
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
        Log.i("TAG", "There was an issue scanning gallery.");
    }
}

3voto

Himanshu Rawat Punkte 608

Sie möchten eine Bitmap in einem Verzeichnis Ihrer Wahl speichern. Ich habe eine Bibliothek ImageWorker, dass der Benutzer zu laden, speichern und konvertieren Bitmaps / Drawables / Base64 Bilder ermöglicht gemacht.

Min SDK - 14

Vorbedingung

  • Für das Speichern von Dateien ist die Berechtigung WRITE_EXTERNAL_STORAGE erforderlich.
  • Das Abrufen von Dateien erfordert die Berechtigung READ_EXTERNAL_STORAGE.

Speichern von Bitmap/Drawable/Base64

ImageWorker.to(context).
    directory("ImageWorker").
    subDirectory("SubDirectory").
    setFileName("Image").
    withExtension(Extension.PNG).
    save(sourceBitmap,85)

Bitmap laden

val bitmap: Bitmap? = ImageWorker.from(context).
    directory("ImageWorker").
    subDirectory("SubDirectory").
    setFileName("Image").
    withExtension(Extension.PNG).
    load()

Umsetzung

Abhängigkeiten hinzufügen

Auf Projektebene Gradle

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

In der Anwendungsebene Gradle

dependencies {
            implementation 'com.github.ihimanshurawat:ImageWorker:0.51'
    }

Weitere Informationen finden Sie unter https://github.com/ihimanshurawat/ImageWorker/blob/master/README.md

2voto

user5480949 Punkte 1070

Stellen Sie sicher, dass das Verzeichnis erstellt ist, bevor Sie bitmap.compress :

new File(FileName.substring(0,FileName.lastIndexOf("/"))).mkdirs();

2voto

MashukKhan Punkte 1834

Erstellen Sie eine Video-Miniaturansicht für ein Video. Es kann null zurückgeben, wenn das Video beschädigt ist oder das Format nicht unterstützt wird.

private void makeVideoPreview() {
    Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoAbsolutePath, MediaStore.Images.Thumbnails.MINI_KIND);
    saveImage(thumbnail);
}

Um Ihre Bitmap auf der SD-Karte zu speichern, verwenden Sie den folgenden Code

Bild speichern

private void storeImage(Bitmap image) {
    File pictureFile = getOutputMediaFile();
    if (pictureFile == null) {
        Log.d(TAG,
                "Error creating media file, check storage permissions: ");// e.getMessage());
        return;
    } 
    try {
        FileOutputStream fos = new FileOutputStream(pictureFile);
        image.compress(Bitmap.CompressFormat.PNG, 90, fos);
        fos.close();
    } catch (FileNotFoundException e) {
        Log.d(TAG, "File not found: " + e.getMessage());
    } catch (IOException e) {
        Log.d(TAG, "Error accessing file: " + e.getMessage());
    }  
}

So rufen Sie den Pfad für die Bildspeicherung ab

/** Create a File for saving an image or video */
private  File getOutputMediaFile(){
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this. 
    File mediaStorageDir = new File(Environment.getExternalStorageDirectory()
            + "/Android/data/"
            + getApplicationContext().getPackageName()
            + "/Files"); 

    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            return null;
        }
    } 
    // Create a media file name
    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(new Date());
    File mediaFile;
        String mImageName="MI_"+ timeStamp +".jpg";
        mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);  
    return mediaFile;
}

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