将位图保存到位置

我正在开发一项功能,用于从Web服务器下载图像,将其显示在屏幕上,如果用户希望保留图像,请将其保存在SD卡中的某个文件夹中。 是否有一种简单的方法来获取位图并将其保存到我选择的文件夹中的SD卡上?

我的问题是我可以下载图像,并将其作为位图显示在屏幕上。 我已经能够找到将图像保存到特定文件夹的唯一方法是使用FileOutputStream,但这需要一个字节数组。 我不知道如何从位图转换为字节数组(如果这是正确的方式),所以我可以使用FileOutputStream来写入数据。

我有的另一个选择是使用MediaStore:

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

这可以很好地保存到SD卡,但不允许您自定义文件夹。


FileOutputStream out = null;
try {
    out = new FileOutputStream(filename);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
    // PNG is a lossless format, the compression factor (100) is ignored
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (out != null) {
            out.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

您应该使用Bitmap.compress()方法将位图保存为文件。 它将压缩(如果使用的格式允许)您的图片并将其推送到OutputStream中。

以下是通过getImageBitmap(myurl)获取的Bitmap实例的示例,该实例可以压缩为JPEG格式,压缩率为85%:

// Assume block needs to be inside a Try/Catch block.
String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOut = null;
Integer counter = 0;
File file = new File(path, "FitnessGirl"+counter+".jpg"); // the File to save , append increasing numeric counter to prevent files from getting overwritten.
fOut = new FileOutputStream(file);

Bitmap pictureBitmap = getImageBitmap(myurl); // obtaining the Bitmap
pictureBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); // saving the Bitmap to a file compressed as a JPEG with 85% compression rate
fOut.flush(); // Not really required
fOut.close(); // do not forget to close the stream

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

outStream = new FileOutputStream(file);

将在AndroidManifest.xml中(至少在os2.2中)未经许可引发异常:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
链接地址: http://www.djcxy.com/p/62165.html

上一篇: Save bitmap to location

下一篇: Variadic template function name lookup fails to find specializations