`
dyingbleed
  • 浏览: 117708 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

【Android】图片显示内存优化(解决“bitmap size exceeds VM budget”异常)

 
阅读更多

 

	public Bitmap optimizeBitmap(byte[] resource, int maxWidth, int maxHeight) {
		Bitmap result = null;
		int length = resource.length;
		BitmapFactory.Options options = new BitmapFactory.Options();	
		options.inJustDecodeBounds = true;
		result = BitmapFactory.decodeByteArray(resource, 0, length, options);
		int widthRatio = (int) Math.ceil(options.outWidth / maxWidth);
		int heightRatio = (int) Math.ceil(options.outHeight / maxHeight);
		if(widthRatio > 1 || heightRatio > 1) {
			if(widthRatio > heightRatio) {
				options.inSampleSize = widthRatio;
			} else {
				options.inSampleSize = heightRatio;
			}
		}
		options.inJustDecodeBounds = false;
		result = BitmapFactory.decodeByteArray(resource, 0, length, options);
		return result;
	}
	

 

 

Android Emulator的内存只有8M,当需要显示较多大图时,极易抛出“bitmap size exceeds VM budget ”的异常。

BitmapFactory.Options的公有boolean型成员变量inJustDecodeBounds,当值设置为true时,解码器返回NULL,我们可以在图像未加载内存的情况下查询图像。

示例代码中,我们通过Options对象实例options获得了图像的宽度和高度。

BitmapFactory.Options的公有int型成员变量inSampleSize用于设置图像的缩小比例,例如当inSampleSize设置为4时,编码器将返回原始1/4大小的图像。

 

注意:需要编码器返回图像时,记得将inJustDecodeBounds的值设为false。

分享到:
评论

相关推荐

    android_内存溢出处理

    如果图片的大小超过了 RAM 的内存,就会出现 java.lang.OutOfMemoryError:bitmap size exceeds VM budget 异常。解决这个问题可以使用 BitmapFactory.Options 对象,通过设置 inSampleSize 属性来缩放图片的大小。 ...

    处理bitmap内存溢出问题

    当应用程序尝试加载或操作一张超出虚拟机内存预算的`Bitmap`时,系统会抛出`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`异常,导致应用崩溃。为了解决这个问题,开发者需要采取一些策略来优化图片...

    android处理图片内存溢出VM.pdf

    当应用尝试加载超出虚拟机内存预算的大图片时,会抛出一个常见的异常java.lang.OutOfMemoryError: bitmap size exceeds VM budget。图片加载时的内存溢出主要因为大尺寸图片占用的内存远远超过了分配给应用的内存...

    android 处理图片内存溢出 VM.pdf

    当尝试加载大尺寸的图片时,可能会遇到`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`错误,这是因为Android虚拟机(VM)的内存预算有限,尤其是对于较大的图片,如果直接加载原图,会消耗大量内存,...

    ANDROIDBITMAP内存限制OOM,OUTOFMEMORY[文].pdf

    当Android系统尝试分配一块超过其当前可用内存大小的内存时,会抛出`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`异常。从日志可以看出,问题出现在尝试解码一个资源(可能是图片)到Bitmap对象时,...

    Android’s 24 MB memory limit

    一旦超出限制,应用就会收到“OutOfMemoryError: bitmap size exceeds VM budget”异常,并被操作系统强制关闭。例如: ``` E/dalvikvm-heap(12517): 1048576-byte external allocation too large for this process...

    解析activity之间数据传递方法的详解

    频繁使用静态的Bitmap或Drawable可能导致`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`异常,因此应谨慎使用。 第三种方法是基于外部存储的数据传输,包括File、SharedPreferences、SQLite和...

Global site tag (gtag.js) - Google Analytics