Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 有人知道BitmapFactory.decodeFile可以解码的文件大小是否有限制吗?_Android_Bitmapfactory - Fatal编程技术网

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

Android 有人知道BitmapFactory.decodeFile可以解码的文件大小是否有限制吗?,android,bitmapfactory,Android,Bitmapfactory,我使用以下代码。对于大的图像文件,它返回空值,小的文件显示。有人知道BitmapFactory.decode文件是否有大小限制吗 File imgFile = new File(path); if(imgFile.exists()) { Bitmap myBitmap=null; myBitmap = BitmapFa

我使用以下代码。对于大的图像文件,它返回空值,小的文件显示。有人知道BitmapFactory.decode文件是否有大小限制吗

            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();

它有多大?多少兆

因为每个移动应用程序都有特定的内存量(堆大小),并且一个大的位图可能超过此限制,所以您是否会得到OutOfMemoryException,因此您会得到一个空值

编辑:
除非大位图是偶然的,它被一些奇怪的格式破坏了,应用程序无法解码?根据经验,尝试另一个大位图有一个限制,当您达到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;
现在你已经有了宽度和高度,是时候做出一个关于如何重新缩放的明智决定了


在这里,我想看一下Google的完整代码示例(实际上只有两种方法可以复制/粘贴)。

我在文档中看到的内容不应该有任何限制,不过,有些线程需要自己的线程来防止ui在加载时暂停。所以这应该在自己的线程中运行?我建议将位图解码发送到异步任务。Yazan关于堆大小的说法可能是正确的,但我不确定Android在位图解码期间如何处理内存分配,而且图像必须非常大,并且可能会出现堆问题。您应该在解码时调整文件大小。如果它是jpg(你没有告诉它是什么类型的文件),那么要成为位图,你很容易需要比原始文件大小多20倍的内存,大约3mb。我把它放在一个try-catch块中,没有例外。它没有损坏,我在其他应用程序中打开了它,并用其他文件进行了测试。它在模拟器和三星S4上返回null。根据文档“返回解码后的位图,如果无法解码则返回null”。你所说的其他应用是什么意思?像PC应用还是移动应用?因为有时你可能会在PC上打开图像,但在移动设备上不正常…我正在使用的图像文件会在其他移动应用程序中打开和显示。好吧,这就是我所能想到的,如果我是你,我会得到另一个相同大小的bmp文件并尝试它,你需要对此进行跟踪以缩小可能性,直到你找到原因