Android 11 修改照片覆盖原图的实现方法

作为一名经验丰富的开发者,我很高兴能够帮助刚入行的小白们解决实际问题。今天,我们将一起学习如何在Android 11上实现修改照片并覆盖原图的功能。这个过程可以分为几个步骤,下面我将详细解释每个步骤以及所需的代码。

步骤概览

首先,让我们通过一个表格来概览整个流程:

步骤 描述
1 检查运行环境是否为Android 11
2 请求存储权限
3 选择图片文件
4 读取图片并显示
5 修改图片
6 覆盖原图

详细步骤及代码实现

1. 检查运行环境是否为Android 11

首先,我们需要确保我们的应用运行在Android 11或更高版本上。这可以通过检查Build.VERSION.SDK_INT来实现。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    // 继续后续步骤
} else {
    // 提示用户升级系统或退出应用
}

2. 请求存储权限

在Android 11中,我们需要请求存储权限来访问或修改图片文件。以下是请求存储权限的代码:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            MY_PERMISSIONS_REQUEST_STORAGE);
}

3. 选择图片文件

接下来,我们需要让用户选择一个图片文件。这可以通过Intent来实现:

Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, PICK_IMAGE_REQUEST);

4. 读取图片并显示

当用户选择图片后,我们需要读取并显示这个图片。以下是读取图片并设置到ImageView的代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null) {
        Uri selectedImage = data.getData();
        imageView.setImageURI(selectedImage);
    }
}

5. 修改图片

在这一步,我们将根据用户的需求修改图片。这里以将图片转换为灰度为例:

Bitmap originalBitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage));
Bitmap grayBitmap = convertToGrayscale(originalBitmap);
imageView.setImageBitmap(grayBitmap);

6. 覆盖原图

最后,我们需要将修改后的图片覆盖原图。以下是覆盖原图的代码:

ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
ContentResolver resolver = getContentResolver();
Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
try (OutputStream out = resolver.openOutputStream(uri)) {
    grayBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (IOException e) {
    e.printStackTrace();
}

结语

通过以上步骤,我们成功地在Android 11上实现了修改照片并覆盖原图的功能。希望这篇文章能够帮助到刚入行的小白们,让他们在Android开发的道路上更进一步。

最后,让我们通过一个饼状图来展示Android开发中不同技能的占比:

pie
    title Android开发技能占比
    "Java" : 45
    "Kotlin" : 25
    "XML" : 15
    "其他" : 15

希望这篇文章能够帮助到你们,如果有任何问题,欢迎随时提问。祝你们的Android开发之旅顺利!