【问题标题】:Bitmap Factory throws FileNotFoundException位图工厂抛出 FileNotFoundException
【发布时间】:2016-09-20 22:18:21
【问题描述】:

我遇到了一个奇怪的问题。我正在尝试在我的Android项目中使用我的res / drawable文件夹中的PNG文件,并在ImageButton中使用这样的PNG文件(它具有方法“setImageBitmap(Bitmap bm)”)我需要解码PNG图像我有我的 res/drawable 文件。但是,当我复制路径并尝试像这样解码它时:

public Bitmap getBitMap() {
    return BitmapFactory.decodeFile("drawable/bishop00.png");
}

我看到一些线程说我也可以使用 BitmapFactory 的“decodeResources”方法,但是这段代码不在活动中,我不希望使用活动作为参数来使用该方法,看到因为这应该有效。我也尝试过使用绝对路径(复制显示系统整个层次结构的路径),但仍然出现以下异常:

Unable to decode stream: java.io.FileNotFoundException

真的希望得到一些帮助,因为我完全确定该文件存在。

【问题讨论】:

  • 你的手机上是否存在drawable/bishop00.png文件?
  • 不,我正在尝试从我的 android 项目中解码它(我在原帖中说过),然后在我的应用程序中显示它
  • 我修正了问题的标题。投掷FileNotFoundException 并没有什么奇怪的。文件不存在,抛出异常
  • 您应用中的资源不是实际应用中的文件(即使它们是项目中的文件),因此当您尝试将其作为文件打开时,它会告诉您没有这样的文件跨度>

标签: java android bitmap android-resources android-bitmap


【解决方案1】:

我正在尝试在我的 Android 项目中使用我的 res/drawable 文件夹中的 PNG 文件

这是您的开发机器上的一个文件。它不是 Android 设备上的文件。

看来这应该可行

不,不应该。

我看到一些帖子说我也可以使用BitmapFactory的“decodeResources”方法

这是正确的答案,假设该内容首先应该是可绘制资源。虽然使用decodeResource() 有一些正当理由,但总体上并不常用。可能还有其他更合适的使用可绘制资源的方式,或者这不应该是可绘制资源。

但此代码不在活动中

decodeResource() 采用Context。它不一定是Activity,尽管这通常是一个可能的候选者。您的所有代码都沿着以Context 开头的某个代码路径执行;在这里使用应该没有问题。

【讨论】:

  • 感谢您的意见。除了使用“decodeResources”之外,您还有其他建议吗?
  • @tomSurge 建议使用 decodeResources。
  • @tomSurge:我无法轻易回答这个问题,因为我不知道您总体上要做什么。你打算用Bitmap 做什么?
  • @CommonsWare 我基本上是在制作国际象棋应用程序。每个片段对象都有一个 getBitmap 函数,该函数应该返回其对应片段的位图。例如,我想通过 setBitMap(piece.getBitmap); 在我的 ImageButton 上使用这个位图的图像。赶上我的漂移?
  • @tomSurge:嗯,即兴发挥,我会将getBitmap() 替换为getDrawableId() 或类似的东西,这会返回该作品的R.drawable. 值。然后,use setImageResource() 将其应用于ImageButton。这样会更快,使用更少的内存。
猜你喜欢
  • 1970-01-01
  • 2012-06-19
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多