BitmapFactory.decodeFile() 在某些设备中返回 null

2024-03-31

我正在使用以下代码here http://voidcanvas.com/whatsapp-like-image-compression-in-android/。我想压缩图像。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(filePath, options);

int actualHeight = options.outHeight;
int actualWidth = options.outWidth;

从相机、图库和照片中选择图像后,我根据操作系统类型和设备型号在不同设备中获得不同类型的路径。喜欢:

1) /存储/模拟/0/Android/数据/...

2)/raw//存储/模拟/0/mb/1511172993547.jpg

3)/2/1/content://media/external/images/media/11647/ORIGINAL/NONE/486073582

如果路径类似于第一个网址,则此代码可以正常工作。但如果我得到其他类型的图像,则 BitmapFactory.decodeFile() 给出 null。

有没有办法在所有类型的设备和操作系统版本中压缩图像。

UPDATE :

打开选择器:

Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.setType("image/*");
startActivityForResult(pickIntent, 1001);

选择图像后:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Uri imgUri = Uri.fromFile(new File(data.getData().getPath()));
    Bitmap cmpBitmap = ImageUtils.compressUriQuality(OpenWallWeb.this, imgUri);
    dlgImageToPost.setImageBitmap(cmpBitmap);
...
}

对于压缩:

public static Bitmap compressUriQuality(Context mContext, Uri selectedImage) {
    InputStream imageStream = null;
    Bitmap bmp = null;
    try {
        imageStream = mContext.getContentResolver().openInputStream(
                selectedImage);
        bmp = BitmapFactory.decodeStream(imageStream);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 50, stream);

        if (imageStream != null)
            imageStream.close();
        stream.close();
        stream = null;
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmp;
}

电视 2) /raw//storage/emulated/0/mb/1511172993547.jpg

如果用户从图库或照片中选择图片,则不会获得该路径。当然,它不是您可以用于 .decodeFile() 的文件系统路径。你是如何获得它的?

3) /2/1/content://media/external/images/media/11647/ORIGINAL/NONE/486073582

那不是有效的内容方案路径。你是如何获得它的?当然不能用于.decodeFile()。

  i'm getting different type of paths 

如果你“表现正常”,你永远不会得到这样的路径。那么你在做什么呢?基本 uri 处理错误?

using following code from here. 

正如您现在所意识到的,对于很大一部分来说,这是相当肮脏的示例代码。

any way to compress image in all types of devices and OS versions.

当然。直接使用获取到的selected uri即可。为其打开一个 InputStream 并使用 .decodeStream() 代替。

天啊..你没有直接使用uri。

 Bitmap cmpBitmap = ImageUtils.compressUriQuality(OpenWallWeb.this, imgUri);

改成

  Bitmap cmpBitmap = ImageUtils.compressUriQuality(OpenWallWeb.this, data.getData());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BitmapFactory.decodeFile() 在某些设备中返回 null 的相关文章

  • Android 架构组件与 Firebase 特别是 Firestore

    我正在经历这个blog https firebase googleblog com 2017 12 using android architecture components html by 道格 史蒂文森 https twitter co
  • 添加监听器与设置监听器

    添加监听器和设置监听器有什么区别 e g addTextChangedListener textWatcher setOnClickListener clickListener Answer 在 aioobe 的回答之后 我在我的项目中对此
  • 如何向 ListView 添加粘性标题?

    我有一个 listView 所以我想添加一个粘性标头 以便它粘在 listView 的顶部 当 listView 中开始不同的类别时 不同的标头会取代它 就像联系人一样 其中 a 为粘性标头位于顶部 直到 b 出现 有没有图书馆可以做 我正
  • 如何修复 Kotlin JobCancellationException?

    由于 Kotlin JobCancellationException 我发生了崩溃 以下是有关崩溃的详细信息 kotlinx coroutines JobCancellationException Job was cancelled job
  • Eddystone Beacon 中广播的 MAC ID 会改变吗?

    我将描述我的设置 我制作了一个模拟 Eddystone 信标的 Android 应用程序 我能够使用 PlayStore 中的 Beacon Toy 应用程序检测手机上的 Eddystone 信标 但问题是 自上次检查以来 显示的 MAC
  • 冲突的 Android 错误消息:指定的子项已经有父项。您必须首先对孩子的父母调用removeView()

    最初我得到了这个错误 指定的子项已经有父项 您必须调用removeView 首先是孩子的父母 at customSection addView customLayout 所以我添加了 LinearLayout customLayout ge
  • 如何在 Android 中启用/禁用日志级别?

    例如 我有很多日志语句需要调试 Log v TAG Message here Log w TAG WARNING HERE 在设备电话上部署此应用程序时 我想关闭详细日志记录 我可以在其中启用 禁用日志记录 The Android 文档对日
  • 如何知道 TTS 何时完成?

    我正在 Android 上实现交互式语音响应应用程序 我想知道如何确定何时tts speak 函数已完成通话 因此我可以调用我的语音识别器函数 public class TTSActivity extends Activity implem
  • Android 时间选择器在分钟滚动时自动更改小时

    例如 当我在 TimePicker 上滚动分钟时 在将分钟滚动到 59 后 小时会自动滚动到 7 因此新时间将为 07 59 同样的方式 如果我有 07 59 并且我将分钟滚动到 00 小时将自动滚动到 8 所以时间将是 08 00 此逻辑
  • 如何删除旧版本的Android Studio

    我必须释放硬盘中的一些空间 并寻找要删除的内容 我发现我有许多引用旧版本的 Android Studio AS 文件夹 我发现文件夹的路径是 C Users mysuername 我想要的是删除旧版本并只保留最新版本的方法 当时是 ASPr
  • Android:可以写入lib目录吗?

    是否可以以编程方式将文件复制到 data data application package lib 目录中 或在 data data application package lib 目录中创建符号链接 当尝试写入 lib 目录时 我总是收到
  • 在 Phonegap 3.x CLI 上构建 android 发布 apk

    如何使用 Phonegap 3 x CLI 在本地构建 Android 应用程序并准备发布 我检查了项目的platforms android目录中生成的bin文件夹 并且只有 debug APK 顺便说一句 我使用这个命令 phonegap
  • ArgumentMatchers.any 不得为 null

    我正在尝试测试ViewModel以确保实时数据得到正确更新 然而使用时ArgumentMatchers any 它失败了IllegalStateException saying ArgumentMatchers any mViewModel
  • Osmdroid:如何从我自己的位图(图块)创建和加载地图?

    我开始使用 Osmdroid 我想使用这项技术来显示有关 F1 赛道的地图 我有一张大图片 我可以将它切割成更小的图块 我可以修改osmdroid库来上传这些图片吗 我想将这些位图 图块 保存在我的资产文件夹中 我非常不知道如何做到这一点
  • 更改适配器数据时,RecyclerView 滚动到顶部位置

    我正在对某个帖子进行喜欢和不喜欢RecyclerView 我在更改视图后调用api 但问题是RecyclerView当我通知它更新时 总是滚动到顶部 这是我的适配器代码 likeAnim setOnLikeListener object O
  • 如何在android上使用xamarin表单执行脚本

    我正在尝试在 Android Mono 上使用 Xamarin Forms 运行 C 脚本 当我运行脚本时 我收到错误 System IO FileNotFoundException 找不到文件 mscorlib dll 这是我试图执行的代
  • 如何将 SD 卡图像添加到 coverflow?

    Here is my coverflow with drawables This is my Image Adapter Code The Constant IMAGE RESOURCE IDS private static final L
  • NumberFormatException:无效的整数:“8.0dip”仅在 Galaxy Tab 2 上

    我目前面临 Galaxy Tab 10 1 2 GT P5110 的故障 该故障给我带来了该错误 但仅在该设备上 我尝试了不同的模拟器 我使用 genymotion Nexus 5 7 10 Galaxy S3 4 5 Galaxy Not
  • Android Studio-公司域名

    在Android Studio中 当您创建新项目时 系统会提示您输入域名 我已经知道您可以制作一个 但是如果您想在 Google Play 商店上分发您的应用程序怎么办 即使我永远不会使用我的域 我是否需要购买一个网络域来分发我的应用程序
  • 在 Android 中将列表传递给另一个 Activity

    我已经创建了一个列表 并希望将该列表传递给另一个活动 但当我创建意图时 我在 putExtra 语句上收到错误 只是想知道是否有任何简单的方法来传递字符串列表而不是单个字符串 Thanks private List

随机推荐

  • 是否可以在 Vercel 中部署 NodeJs 应用程序?

    我正在尝试在 Vercel https vercel com https vercel com 之前的 Now 来自 CLI 但是 当我部署应用程序时 我打开站点 结果只是路径目录中的文件 而不是正在运行的应用程序 这是我的server j
  • 最简单的通过鼠标旋转相机不起作用

    好吧 这让我发疯 文档非常薄弱 Oracle 的示例应用程序非常奇怪 有一个巨大而复杂的帮助程序类 甚至这里的有关它的问题也没有答案 我基本上遵循并简化了本教程 https www genuinecoder com javafx 3d tu
  • .ogg 视频无法在 Firefox 中播放

    我们刚刚开始使用 html5 视频 似乎无法得到 ogg要在 Firefox 中播放文件 有什么提示吗 这是我们正在使用的来源
  • Objective C 中如何将字符串转换为数组?

    如何在 Objective C 中将字符串转换为数组 即 我有一个字符串 NSString str Hi How r u 这应该转换为数组 NSMutableArrayarr 其中 arr 0 嗨 arr 1 arr 2 如何 arr 3
  • 如果依赖项位于 false 分支语句内,则计算将永远停止触发

    我遇到一个问题 即我的计算可观察量在一系列依赖项更改后停止触发 最后我发现了一点 如果在最近一次评估期间依赖项位于错误分支语句内 则下次将不会触发计算即使在评估完成之前条件变为真 这是一个示例 https jsfiddle net sgs2
  • 非静态方法 next() 不能从静态上下文中引用

    我正在尝试解析一个mm dd yyyy将日期格式化为单独的字段 但是当我尝试编译时出现以下错误 非静态方法 next 不能从静态上下文中引用 什么可能导致错误 import java util Scanner public class Pr
  • 使用 c3p0 和 tomcat 与 MySQL 的僵尸连接

    我正在使用 c3p0 来管理与 MySQL 的数据库连接 问题是某些连接被永远保留 我的连接数限制为 1000 个 但由于某种未知原因 打开的连接数为 1200 个 为了调查它 我在 tomcat 服务器 shell 中执行以下命令 net
  • Eclipse PDT + 代码完成根本不起作用

    我想启动一个新的 Zend 项目 目前我面临一些有关 Eclipse PDT 的问题 我的问题是 Eclipse for PHP 中的代码完成根本不起作用 我尝试了很多不同的教程等 例如制作一个新项目并导入文件 创建一个新的工作区并在那里导
  • 在静态方法中使用 WPF 检测设计模式

    我正在使用 WPF 我有一个静态类 它执行一些在设计模式下不可用的设置 该构造函数由设计模式下的窗口调用 这会导致抛出异常 如何在静态方法中检测设计模式 以便可以调用适当的设计模式行为 The 推荐方法 https stackoverflo
  • 如何从远程页面获取iframe内容?

    我认为PHP没有用 因为iframe是在php执行后插入的 还是我错了 所以 我知道的唯一解决方案是使用 Javascript jQuery 例如 如果 JS 与 iframe 位于同一页面上 则这将起作用
  • 流式传输 html5 canvas 内容的有效方法?

    我正在尝试流式传输 a 的内容html5 canvas实时使用websockets and nodejs html5画布的内容只是一个视频 到目前为止我所做的是 我将画布转换为blob然后得到blob URL并使用 websockets 将
  • 使用 Zend Gdata 在 Google 电子表格中插入行时出错

    我正在尝试使用 Zend Gdata 1 11 库在 Google 电子表格中插入行的最简单的可能方案 电子表格的单元格 A1 中有单词 Kolona 这是整个 php 文件
  • 从一开始就构建 IDocument 最有效的方法是什么

    我想使用以下类作为具体示例逐步构建一个新的 IDocument 对象 您可以从您喜欢的任何对象开始 并使用您喜欢的任何中间对象 只要生成的对象是一个代表完整类的 IDocument 步骤 1 添加一个名为 MyNamespace 的新命名空
  • iOS 照片库读取权限

    在用户允许我们访问他的相机胶卷后 我们希望获取数据并将其从应用程序内部上传到我们的服务 有没有办法从文件中访问视频数据 打开视频文件的唯一方法是创建 AVAsset 但这对我来说还不够 我知道关闭 func requestExportSes
  • Visual Studio 2015 JSX/ES2015 语法突出显示

    如何使用 ES2015 代码在 Visual Studio 2015 for JSX 中获得正确的语法突出显示 It works fine if I remove the import and export keywords 我刚刚更新到
  • 强制关闭应用程序

    我是 Android 新手 遇到了一个问题 我想知道如何以编程方式强制关闭应用程序并再次重新启动它 我正在尝试这个 因为我真的很坚持OutOfMemmoryError我想释放内存并再次重新启动应用程序 如果我错了 请指导我 要强制关闭应用程
  • php打开修改并保存html文件

    在php中我想打开一个html文件 删除div 类区域 的内容并保存它 dom new DOMDocument dom gt loadHTMLFile temp page y xhtml xpath new DOMXPath dom pDi
  • Nodejs 与 C++ 程序通信?

    假设我有一个 C 程序与 Linux 服务器上的 Node js Web 应用程序在同一台服务器上运行 C 程序维护一个队列 而我想要使用 Node js 做的是将一些数据推送到队列中 最好的方法是什么 哪个更好 套接字还是IPC 如果你使
  • 是否可以在重新加载后立即执行函数...?

    我有一组代码 setTimeout function window location reload true if scope attribute parentAttribute id angular element document ge
  • BitmapFactory.decodeFile() 在某些设备中返回 null

    我正在使用以下代码here http voidcanvas com whatsapp like image compression in android 我想压缩图像 BitmapFactory Options options new Bi