热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android中Bitmap、File与Uri之间的简单记录

这篇文章主要给大家介绍了关于Android中Bitmap、File与Uri之间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

简介:

感觉Uri 、File、bitmap 比较混乱,这里进行记载,方便以后查看.下面话不多说了,来一起看看详细的介绍吧

Bitmap、File与Uri

1、将一个文件路径path转换成File

String path ;
File file = new File(path)

2、讲一个Uri转换成一个path

以选择一张图片为例:

String path = FileTools.getRealPathFromUri(content,uri);
//自定义方法在下面
 public static String getRealPathFromUri(Context context, Uri uri) {

 if (null == uri) return null; //传入的Uri为空,结束方法

 final String scheme = uri.getScheme(); //得到Uri的scheme

 String realPath = null;

 if (scheme == null)
  realPath = uri.getPath(); //如果scheme为空 
 else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
  realPath = uri.getPath(); //如果得到的scheme以file开头
 } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
  //得到的scheme以content开头
  Cursor cursor = context.getContentResolver().query(uri,
   new String[]{MediaStore.Images.ImageColumns.DATA},
   null, null, null);
  if (null != cursor) {
  if (cursor.moveToFirst()) {
   int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
   if (index > -1) {
   realPath = cursor.getString(index);
   }
  }
  cursor.close(); //必须关闭
  }
 }
 
//经过上面转换得到真实路径之后,判断一下这个路径,如果还是为空的话,说明有可能文件存在于外置sd卡上,不是内置sd卡.
 if (TextUtils.isEmpty(realPath)) {
  if (uri != null) {
  
  String uriString = uri.toString();
  int index = uriString.lastIndexOf("/"); //匹配 / 在一个路径中最后出现位置

  String imageName = uriString.substring(index);
  //通过得到的最后一个位置,然后截取这个位置后面的字符串, 这样就可以得到文件名字了 

  File storageDir;

  storageDir = Environment.getExternalStoragePublicDirectory(
   Environment.DIRECTORY_PICTURES); //查看外部储存卡公共照片的文件

  File file = new File(storageDir, imageName);
  //自己创建成文件,

  if (file.exists()) {
   realPath = file.getAbsolutePath();
  } else {
//  //那么存储在了外置sd卡的应用缓存file中
   storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
   File file1 = new File(storageDir, imageName);
   realPath = file1.getAbsolutePath();
  }
  }
 }
 return realPath;

 

 比如我在android 8.0 上运行的时候
 选择照片之后的Uri : content://media/external/images/media/568344
 进行上面方法转换完之后: /storage/emulated/0/com.appben.appche/browser-photos/1550297407488.jpg
 

 }

3、File 转换成path

String path = file.getPath();
将此抽象路径名转换为一个路径名字符串。所得到的字符串使用默认名称分隔符来分隔名称序列中的名称。

String path = file.getAbsolutePath();
如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与 getPath() 方法一样。如果此抽象路径名是空的抽象路径名,则返回当前用户目录的路径名字符串,
该目录由系统属性 user.dir 指定。否则,使用与系统有关的方式分析此路径名。
在 UNIX 系统上,通过根据当前用户目录分析某一相对路径名,可使该路径名成为绝对路径名。在 Microsoft Windows 系统上,
通过由路径名指定的当前驱动器目录(如果有)来分析某一相对路径名,
可使该路径名成为绝对路径名;否则,可以根据当前用户目录来分析它。

getCanonicalPath
规范路径名是绝对路径名,并且是惟一的。规范路径名的准确定义与系统有关。如有必要,此方法首先将路径名转换成绝对路径名,
这与调用 getAbsolutePath() 方法的效果一样,然后用与系统相关的方式将它映射到其惟一路径名。
这通常涉及到从路径名中移除多余的名称(比如 "." 和 "..")、分析符号连接(对于 UNIX 平台),以及
将驱动器名转换成标准大小写形式(对于 Microsoft Windows 平台)。
表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式
。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。
同样,现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。

下面是参看文章中提到的一个例子

https://blog.csdn.net/qq_39949109/article/details/80609472

File file = new File(".\\test1.txt");
File file = new File("D:\\workspace\\test\\test1.txt");
 System.out.println("-----默认相对路径:取得路径不同------");
 System.out.println(file1.getPath());
 System.out.println(file1.getAbsolutePath());
 System.out.println("-----默认绝对路径:取得路径相同------");
 System.out.println(file2.getPath());
 System.out.println(file2.getAbsolutePath());


结果是:
-----默认相对路径:取得路径不同------
.\test1.txt
D:\workspace\test\.\test1.txt
-----默认绝对路径:取得路径相同------
D:\workspace\test\test1.txt
D:\workspace\test\test1.txt


 File file = new File("..\\src\\test1.txt");
 System.out.println(file.getAbsolutePath());
 System.out.println(file.getCanonicalPath());
//得到的结果
D:\workspace\test\..\src\test1.txt
D:\workspace\src\test1.txt

4、URI 与Uri的区别

URI 是java.net的子类

Uri 是android.net的子类,Uri不能被实例化

5、URI 转换成 File

File file = null;
try{
 file = new File(new URI(uri.toString()));
}catch(URISyntaxException e){
 e.printStackTrace();
}

6、File 转换成URI

URI uri = file.toURI();

7、Path 转换成Uri

Uri uri = Uri.parse(path);

8、图片的Uri转Bitmap

Bitmap bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(uri))

9、File 转到bitmap

Bitmap bitmap = BitmapFactory.decodeFile(file.getPath); //这个file要是真实路径创建的file

10、bitmap 转 file,可以理解为将bitmap进行保存.

//自己创建想要保存的文件的文件对象
BuffferedOutPutStream bos = 
new BufferedOutputStream(new FileOutputStream(file));
bos.flush;
bos.close;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


推荐阅读
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 本文探讨了如何利用NFC技术,将存储在Android手机中的患者信息安全高效地传输到台式计算机。重点介绍了适用于医院场景的NFC USB读卡器(如ACR122U)的应用方法。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文详细介绍如何在 iOS 7 环境下申请苹果开发者账号,涵盖从访问开发者网站到最终激活账号的完整流程。包括选择个人或企业账号类型、付款方式及注意事项等。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 鼠标悬停出现提示信息怎么做
    概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
  • 气象对比分析
    本文探讨了不同地区和时间段的天气模式,通过详细的图表和数据分析,揭示了气候变化的趋势及其对环境和社会的影响。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • Android 6.0 切换指定 Wi-Fi 的解决方案
    本文详细介绍了在 Android 6.0 系统中切换到指定 Wi-Fi 的方法,包括常见的问题、原因分析及解决方案。通过官方文档和代码示例,帮助开发者更好地理解和实现这一功能。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本篇文章介绍如何将两个分别表示整数的链表进行相加,并生成一个新的链表。每个链表节点包含0到9的数值,如9-3-7和6-3相加得到1-0-0-0。通过反向处理链表、逐位相加并处理进位,最终再将结果链表反向,即可完成计算。 ... [详细]
author-avatar
BaoBao佳佳佳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有