Android 保存 Bitmap
介绍
在 Android 开发中,经常需要对图片进行处理,其中一项常见的操作是保存 Bitmap 到本地存储或共享给其他应用程序。本文将介绍如何在 Android 应用中保存 Bitmap,并提供相关代码示例。
保存 Bitmap
要保存 Bitmap,可以使用 Android 提供的 Bitmap.compress()
方法将 Bitmap 对象写入到文件中。以下是保存 Bitmap 的步骤:
- 创建一个用于保存 Bitmap 的文件。
- 创建一个输出流,将 Bitmap 写入到文件中。
- 使用
Bitmap.compress()
方法将 Bitmap 写入到输出流。 - 关闭输出流。
下面是保存 Bitmap 的相关代码示例:
// 创建一个用于保存 Bitmap 的文件
File file = new File(Environment.getExternalStorageDirectory(), "image.jpg");
// 创建一个输出流,将 Bitmap 写入到文件中
OutputStream outputStream = new FileOutputStream(file);
// 使用 Bitmap.compress() 方法将 Bitmap 写入到输出流
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
// 关闭输出流
outputStream.close();
首先,我们创建一个 File
对象,指定保存 Bitmap 的文件名和路径。这里我们使用 Environment.getExternalStorageDirectory()
方法获取外部存储目录,并在该目录下创建一个名为 "image.jpg" 的文件。
然后,我们创建一个 FileOutputStream
对象,将文件对象传递给它。接下来,我们使用 Bitmap.compress()
方法将 Bitmap 写入到输出流中。Bitmap.CompressFormat.JPEG
表示将 Bitmap 以 JPEG 格式进行压缩,第二个参数表示压缩质量,100 表示无损压缩。
最后,我们关闭输出流,确保保存操作的顺利完成。
权限
在保存 Bitmap 时,我们需要在 AndroidManifest.xml 文件中添加相关权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
添加 WRITE_EXTERNAL_STORAGE 权限后,我们的应用程序将具有写入外部存储的权限。
示例应用
下面是一个完整的示例应用,演示如何保存 Bitmap 到本地存储。
// 导入相关类
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_PERMISSION_CODE = 1;
private ImageView imageView;
private Button saveButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化视图
imageView = findViewById(R.id.imageView);
saveButton = findViewById(R.id.saveButton);
// 设置保存按钮的点击事件
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
saveBitmap();
}
});
// 检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// 权限已经被授予,显示图片
showImage();
} else {
// 请求权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限已经被授予,显示图片
showImage();
} else {
// 权限被拒绝,显示提示信息
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
}
private void saveBitmap() {
// 从资源文件中加载图片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
try {
// 创建一个用于保存 Bitmap 的文件
File file = new File(Environment.getExternalStorageDirectory(), "image.jpg");
// 创建一个输出流,将 Bitmap 写入到文件中
OutputStream outputStream = new FileOutputStream(file);
// 使用 Bitmap.compress() 方法将 Bitmap 写入到输出流
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
// 关闭输出流
outputStream.close();
// 显示保存成功的提示信息
Toast.makeText(this,