首页 > 解决方案 > 在 Android API 28 中将位图保存到外部存储导致 0 B 文件

问题描述

我正在尝试将位图保存到外部存储。我使用了在android-save image into gallery中找到的代码。但是,生成的文件大小为 0 B,但包含缩略图。我的代码是:

private fun saveBitmap(bitmap: Bitmap, name: String) {
    val contentValues = contentValuesOf(
        MediaStore.MediaColumns.TITLE to name,
        MediaStore.MediaColumns.DISPLAY_NAME to name,
        MediaStore.MediaColumns.MIME_TYPE to "images/jpeg",
        MediaStore.MediaColumns.DATE_ADDED to System.currentTimeMillis()
    )

    val resolver = contentResolver
    val uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
    val outputStream = resolver.openOutputStream(uri!!)!!
    bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outputStream)
    outputStream.flush()
    outputStream.close()
}

标签: android

解决方案


与其保存为 JPEG,不如尝试另存为 PNG

try (FileOutputStream 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 (IOException e) {
    e.printStackTrace();
}

请在此处找到已回答的类似问题

另外,正如评论中提到的,请检查,您是否获得了读/写访问权限?如果没有,请参考下面的代码。

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission is granted");
//File write logic here
return true;

}


推荐阅读