Android BitmapFactory.decodeFile(path) 始终返回 null

问题描述 投票:0回答:3

我看到有很多与此问题相关的解决方案,但这些都没有解决我的问题。

我尝试使用 BitmapFactory.decodeFile(path) 函数将图像从 png 文件读取为位图(图像非常小~16px,因此没有选项导致 OutOfMemoryException)。

我的文件层次结构尽可能简单:
-java
--example.com.app
---MainActivity.class
-res
--可绘制
---数组.png

我从 MainActivity 启动应用程序,然后单击按钮,我尝试将 png 图像读取为位图。 我尝试通过以下方式将图像读取为位图:

  1. String path = Uri.parse("android.resource://"+R.class.getPackage().getName() +"/drawable/arrow.png").toString();
    Bitmap bitmap = BitmapFactory.decodeFile(path);

  2. String path = Uri.parse("android.resource://drawable/arrow.png").toString();
    Bitmap bitmap = BitmapFactory.decodeFile(path);

每次位图都为空。你知道哪里可能有问题吗?


Android API 27

android bitmap bitmapfactory
3个回答
2
投票

或者使用简单的方法

BitmapFactory

BitmapFactory.decodeResource(getResources(), R.id.arrow);

或者您可以使用

context.getDrawable(R.drawable.arrow)
,它将返回可供使用的
drawable
。 阅读更多相关信息这里

如果您仍想使用该路径,请使用

java.nio.file.Paths(folder1, folder2.. .. .)
阅读更多相关信息这里


2
投票

你应该使用decodeResource,下面是一个例子:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.id.arrow, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;

或者使用它的简单方法decodeResource

BitmapFactory.decodeResource(getResources(), R.id.arrow);

0
投票

在应用程序标签下的Manifest文件中添加以下代码行

android:requestLegacyExternalStorage="true"
© www.soinside.com 2019 - 2024. All rights reserved.