我正在使用PhoneGap 2.5.0,以下是我调用该方法的方法:
try {
InputStream is = cordova.getActivity().getContentResolver()
.openInputStream(Uri.parse(inputString));
Bitmap bmp = BitmapFactory.decodeStream(is);
is.close();
使用相机拍摄照片时代码正常,但下载文件夹中的某些图像随机失败。我检查了这些图像,它们都在本地下载了一个URL,如content:// media / external / images / media / xxxx。有些文件相当大6MB,而其他文件小700K。失败似乎是随机的,返回null并且没有被异常捕获。
答案 0 :(得分:3)
来自doc:
将输入流解码为位图。如果输入流为空,或者不能用于解码位图,则该函数返回null。流的位置将是读取编码数据后的位置。
因此,您的InputStream为null,或者您打开的文件不能用于解码位图。
答案 1 :(得分:3)
任何机会都是jpeg?
请参阅此已知问题: -
https://code.google.com/p/android/issues/detail?id=6066
我使用以下方法解码位图: -
BitmapFactory.decodeStream(new FlushedInputStream(is), null, opts);
public class FlushedInputStream extends FilterInputStream {
public FlushedInputStream(InputStream inputStream) {
super(inputStream);
}
@Override
public long skip(long n) throws IOException {
long totalBytesSkipped = 0L;
while (totalBytesSkipped < n) {
long bytesSkipped = in.skip(n - totalBytesSkipped);
if (bytesSkipped == 0L) {
int myByte = read();
if (myByte < 0) {
break; // we reached EOF
} else {
bytesSkipped = 1; // we read one byte
}
}
totalBytesSkipped += bytesSkipped;
}
return totalBytesSkipped;
}
}
此外,如果某些图像很大,您可能需要设置样本大小,这样就不会导致分配过大。
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = sampleSize;
其中sampleSize是您计算的合理值。