当前位置: 首页 > article >正文

Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上

调用

saveBitmapToMediaStore(getContentResolver(),bitmap,“图片名”,mimeType);

参数解析:
Bitmap myBitmap = ...; // 这里应该是你获取或创建Bitmap的代码  
private String mimeType = "image/jpeg"; // 或者"image/png",取决于你的Bitmap格式
ContentResolver contentResolver = getContentResolver();  // 如果你在Activity或Fragment中,可以直接调用getContentResolver()  
  • contentResolver:
    是Android提供的一个用于访问系统级内容提供者(Content Providers)的接口。它允许你查询和修改由内容提供者管理的数据。在保存图片到MediaStore时,你需要通过ContentResolver来与MediaStore进行交互。
  • Bitmap bitmap:
    Bitmap是Android中用于表示位图图像的一个类。在这个函数中,bitmap参数代表了你想要保存到设备上的图片。
  • String displayName:
    displayName是图片的显示名称,即在文件系统中看到的文件名(不包括文件扩展名)。这个名称将用于MediaStore中的记录,并且(在某些情况下)也用作实际保存的文件名。
  • String mimeType:
    mimeType是多用途互联网邮件扩展类型(MIME Type)的字符串表示,它描述了数据的格式和类型。对于图片,常见的MIME类型包括"image/jpeg"(JPEG格式)和"image/png"(PNG格式)。这个参数告诉MediaStore你的图片是什么类型的,以便它能够正确地处理和索引它。
方法:
        public Uri saveBitmapToMediaStore(ContentResolver contentResolver, Bitmap bitmap, String displayName, String mimeType) {
            // 确保文件名和MIME类型不为空
            if (displayName == null || mimeType == null) {
                throw new IllegalArgumentException("DisplayName and MimeType cannot be null");
            }
            //指定储存的路径
            String relativePath= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()
                    + File.separator+ "Cs";
            File file=new File(relativePath);
            if (!file.exists()) {
                file.mkdirs();
            }
            // 创建ContentValues来保存图片的信息
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DISPLAY_NAME, displayName);
            values.put(MediaStore.Images.Media.MIME_TYPE, mimeType);
            values.put(MediaStore.Images.Media.RELATIVE_PATH, relativePath); // API 29+

            // 对于Android 10及以上版本,通常不需要指定相对路径
            // 但如果你需要,可以考虑使用MediaStore.Images.Media.RELATIVE_PATH(需要API 29+)

            // 使用MediaStore的URI来插入图片信息
            Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

            // 插入图片信息到MediaStore,并获取返回的Uri
            Uri resultUri = null;
            try {
                resultUri = contentResolver.insert(uri, values);

                if (resultUri != null) {
                    // 使用返回的Uri来获取OutputStream,并写入Bitmap
                    try (OutputStream out = contentResolver.openOutputStream(resultUri)) {
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); // 或者使用PNG等其他格式
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
                // 处理异常,例如通知用户保存失败
            }

            return resultUri; // 返回图片的Uri,可能用于后续操作
        }


http://www.kler.cn/a/308379.html

相关文章:

  • 深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践20241112
  • 算法——二分查找(leetcode704)
  • C#程序开发,检测当前电脑已经安装的软件目录
  • 红帽认证和华为认证哪个好?看完这4点你就明白了
  • 基于MATLAB+opencv人脸疲劳检测
  • OSS文件上传
  • 数模原理精解【12】
  • Centos 7.9 安装 Python3.7.9
  • Python 数学建模——Fitter 拟合数据样本的分布
  • 常用游戏运行库下载
  • C++ vector的使用
  • IO模型---BIO、NIO、IO多路复用、AIO详解
  • 【CTF Web】BUUCTF BUU UPLOAD COURSE 1 Writeup(文件上传+PHP+文件包含漏洞)
  • 高等数学 2.5 函数的微分
  • Qt 中openMp 配置
  • QT操作数据库
  • Vue3+Element Plus:使用el-dialog,对话框可拖动,且对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息
  • (c++)函数的分文件编写
  • [创业之路-146] :如何理解:复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情数字化,数字化的事情自动化,自动化的事情智能化
  • Chisel简明教程
  • 【大模型实战篇】高质量数据过滤及一种BoostedBaggingFilter处理方法的介绍
  • JDK的选择安装和下载
  • 软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)
  • 24.Redis实现全局唯一ID
  • 电脑信息安全:挑战与应对策略
  • PAT甲级-1055 The World‘s Richest