我正在使用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()
永远不会为空
但是,它仍然经常无法创建位图。
有时它是成功的,一切都很好,但大多数时候,位图都是空的 我不知道为什么 文件(拍摄的照片)总是成功创建并且永远不会为空,但由于某种原因它无法创建位图。
答案 0 :(得分:2)
<强>返回强>
生成的解码位图,如果无法解码,则为null。
这可能有多种原因,大多数情况下位图太大而无法分配空间。
检查图像的路径是否存在,以及您是否具有指定URI的读/写权限。
如果您确实有权访问但仍然失败,则应将BitmapFactory.Options
添加到方法调用中,并设置inSampleSize
以加载较小版本的图片。
如果设置为值&gt; 1,请求解码器对原始图像进行二次采样,返回较小的图像以节省存储空间。
此外,您应该始终检查使用位图时返回的null
,因为内存始终是个问题。