我使用以下代码。对于大图像文件,它返回null,显示小图像文件。有没有人知道BitmapFactory.decodeFile是否存在大小限制?
File imgFile = new File(path);
if(imgFile.exists())
{
Bitmap myBitmap=null;
myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView imageView=(ImageView)findViewById(R.id.imageView1);
if(myBitmap!=null) {
imageView.setImageBitmap(myBitmap);
}
else {
Toast.makeText(MainActivity.this, "NULL", Toast.LENGTH_LONG).show();
}
} else Toast.makeText(MainActivity.this, "NO FILE", Toast.LENGTH_LONG).show();
答案 0 :(得分:0)
你得到一个OutOfMemoryException,因为每个移动应用程序都有特定的内存量(堆大小),大的位图可能超过这个限制,所以你得到一个空
编辑: 除非偶然的大位图被一些奇怪的格式损坏,应用程序无法解码?尝试另一个大位图
答案 1 :(得分:0)
根据经验,有一个限制,当您达到openGL的分辨率限制时,您将看到以下类型的错误消息:
Bitmap too large to be uploaded into a texture (4128x2322, max=4096x4096)
您可能还会收到许多人注意到的OutOfMemoryException错误。
首先你应该这样做:
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputStream, null, options);
final int width = options.outWidth;
final int height = options.outHeight;
现在您已经拥有了宽度和高度,现在是时候做出有关如何重新缩放它的明智决定了。
此时我会在Loading Large Bitmaps Efficiently处查看Google的完整代码示例(实际上只有两种方法可以复制/粘贴)。