【问题标题】:Unable to retrieve the image from SDCard无法从 SDCard 检索图像
【发布时间】:2012-12-12 08:10:35
【问题描述】:
Drawable image = Drawable.createFromPath(newImagepath);
defective_image.setBackgroundDrawable(image);   

图像存储在 newImagePath 变量中,该变量是一个字符串。上面抛出了一个 outOfMemory 异常。

我还尝试将图像检索到 Bitmap 对象中。

Bitmap bitmapImg= BitmapFactory.decodeFile(newImagepath);

在上述情况下,bitmapImg 为 Null。 (无一例外)

但是,如果将其作为文件检索,则它是成功的。这不符合我的目的,因为我希望这张图片成为 RelativeLayout 的背景。

File imageFile = new File(newImagepath);
String imgPath = imageFile.getAbsolutePath();

imgPath和newImagePath一样,结论是路径没有错。我还验证了图像在 SDCard 中的存在。

此图像是从设备的相机中捕获的。此代码在模拟器上成功运行。在设备上调试时,注意到上述故障。 我也试过:-

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;

【问题讨论】:

  • 你的清单中有<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />吗?
  • 我有 WRITE。这不适用我也很喜欢阅读吗?而且我可以将它读入一个 File 对象。只有 Bitmap 或 Drawable 对象会产生问题。
  • 由于将图片检索到Drawable对象中抛出OutOfMemory异常,我还以为是图片大小相关的问题?
  • WRITE 权限包括 READ,所以这里看起来一切正常。你试过其他的位图文件吗?
  • 主要是从相机拍摄的图像产生了问题。任何其他图像都不会造成问题。我实际上必须在两个地方加载图像:- 1)图像视图:我使用 URI 检索文件,即 file:///mnt/sdcard/shopfloor/img1。可以使用此 URI 设置 ImageView。这工作正常。 2)Relative Lyout:此布局必须以图像为背景进行设置。我不能使用 URI 这样做。这就是为什么我必须将 URI 缩短为路径 /sdcard/shopfloor/img1。这不能加载到 Drawable 或 Bitmap 对象中。

标签: android android-layout android-sdcard android-image


【解决方案1】:

这似乎是一个内存问题。所以我建议使用选项解码位图大小

options.inJustDecodeBounds = true;

然后通过查看字段来获取此位图的大小(不要尝试使用位图:它将为空):

options.outWidth;
options.outHeight;

然后创建一个缩放位图(取决于屏幕尺寸)。为此,您可以查看

BitmapFactory.Options.inSampleSize

【讨论】:

    【解决方案2】:

    我宁愿使用BitmapFactory 来解码来自文件路径的图像:

    Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
    jpgView.setImageDrawable(bitmap);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2019-08-06
      • 2019-09-22
      • 2017-09-13
      • 2014-07-02
      相关资源
      最近更新 更多