【问题标题】:Android BitmapFactory.decodeFile(path) always returns nullAndroid BitmapFactory.decodeFile(path) 总是返回 null
【发布时间】:2018-11-12 21:26:02
【问题描述】:

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

我尝试使用 BitmapFactory.decodeFile(path) 函数将图像从 png 文件读取到位图(图像非常小 ~ 16 像素,所以没有出现 OutOfMemoryException 的选项)。

我的文件层次结构尽可能简单:
-java
--example.com.app
---MainActivity.class
-res
--drawable
---array.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


【解决方案1】:

或者使用BitmapFactory的简单方法

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

或者您可以使用context.getDrawable(R.drawable.arrow),它将返回一个可以使用的drawable。 阅读更多关于这个here

如果您仍想使用该路径,请使用java.nio.file.Paths(folder1, folder2.. .. .) 阅读更多关于这个here

【讨论】:

    【解决方案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);
    

    【讨论】:

    • 不客气,能不能接受我的回答,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多