当我们将Options
与inJustDecodeBounds=true
传递给BitmapFactory.decodeStream
方法时,它只解码文件大小(高度和宽度)。
android如何计算大小(高度和宽度)?
它是否下载完整文件然后计算大小?
在InputStream
有一个方法avaliable()
,但它只返回估计的大小。
我想知道这个的内部工作。
从java应用程序调用decodeStream方法将调用基于InputStream类型的本机解码实现的调用。见public static Bitmap decodeStream(InputStream is, Rect outPadding, Options opts)
here。
选项传递给本机解码器实现,带有用于解码的签名static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding, jobject options)
,see here.
进一步检查代码,你会看到当选项inJustDecodeBounds=true
时,在doDecode方法中将布尔值onlyDecodeSize
设置为true。然后,解码方法将处理流,直到提取了所有大小的元数据。此时它将返回一个空指针,使您可以访问图像元数据,但不能访问完整图像。