有没有人知道BitmapFactory.decodeFile可以解码文件的大小是否有限制?

时间:2014-05-09 18:02:53

标签: android bitmapfactory

我使用以下代码。对于大图像文件,它返回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();

2 个答案:

答案 0 :(得分:0)

它有多大?多少MB?

你得到一个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的完整代码示例(实际上只有两种方法可以复制/粘贴)。