将文件解码为位图有时会起作用,有时则不起作用

时间:2016-01-31 11:38:05

标签: android bitmap android-file

我正在使用EasyImage库来拍照 然后我将这些文件转换为位图,然后将Bitmap转换为Base64并将其上传到服务器 我知道,这不是一个好方法,但这就是我目前的做法。

拍摄照片时:

@Override
public void onImagePicked(File imageFile, EasyImage.ImageSource source) {
    uploadImage(imageFile);
}

这是内线的第一行" uploadImage"方法:

Image image = new Image(LoginManager.getInstance(getApplicationContext()).getUsername(), file);

这是构造函数:

public Image(String userName, File imageFile) {
    this.userName = userName;
    this.imageFile = imageFile;

    createBase64(getBitmap());
}

Inside" getBitmap"是问题开始的地方。特别是这两行:

bitmap = BitmapFactory.decodeFile(imageFile.getPath());
bitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, false);

imageFile 从不 null 我用调试器检查了至少100次,它永远不会为空。它也总是有路径 getPath()永远不会为空 但是,它仍然经常无法创建位图。

有时它是成功的,一切都很好,但大多数时候,位图都是空的 我不知道为什么 文件(拍摄的照片)总是成功创建并且永远不会为空,但由于某种原因它无法创建位图。

1 个答案:

答案 0 :(得分:2)

来自documentation

  

<强>返回
  生成的解码位图,如果无法解码,则为null。

这可能有多种原因,大多数情况下位图太大而无法分配空间。

检查图像的路径是否存在,以及您是否具有指定URI的读/写权限。

如果您确实有权访问但仍然失败,则应将BitmapFactory.Options添加到方法调用中,并设置inSampleSize以加载较小版本的图片。

  

如果设置为值&gt; 1,请求解码器对原始图像进行二次采样,返回较小的图像以节省存储空间。

此外,您应该始终检查使用位图时返回的null,因为内存始终是个问题。