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。
分享到:
相关推荐
如果图片的大小超过了 RAM 的内存,就会出现 java.lang.OutOfMemoryError:bitmap size exceeds VM budget 异常。解决这个问题可以使用 BitmapFactory.Options 对象,通过设置 inSampleSize 属性来缩放图片的大小。 ...
当应用程序尝试加载或操作一张超出虚拟机内存预算的`Bitmap`时,系统会抛出`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`异常,导致应用崩溃。为了解决这个问题,开发者需要采取一些策略来优化图片...
在Android开发中,Bitmap是处理图像的基本类,用于在内存中表示位图图像。当我们需要对图片进行裁剪、缩放或进行其他操作时,Bitmap提供了丰富的功能。本篇文章将详细探讨如何在Android环境下利用Bitmap来切割图片。...
在Android开发中,Bitmap是用于表示图像数据的基本对象,它是一种内存中的图片表示形式。而当我们需要在应用程序中展示带有圆角的图片时,通常会用到Bitmap的处理技巧。本篇文章将深入探讨如何在Android中对Bitmap...
当应用尝试加载超出虚拟机内存预算的大图片时,会抛出一个常见的异常java.lang.OutOfMemoryError: bitmap size exceeds VM budget。图片加载时的内存溢出主要因为大尺寸图片占用的内存远远超过了分配给应用的内存...
当尝试加载大尺寸的图片时,可能会遇到`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`错误,这是因为Android虚拟机(VM)的内存预算有限,尤其是对于较大的图片,如果直接加载原图,会消耗大量内存,...
当Android系统尝试分配一块超过其当前可用内存大小的内存时,会抛出`java.lang.OutOfMemoryError: bitmap size exceeds VM budget`异常。从日志可以看出,问题出现在尝试解码一个资源(可能是图片)到Bitmap对象时,...
在Android中处理24位深度的Bitmap文件,涉及到内存管理、解码以及显示等多个环节,这里我们将详细探讨这些知识点。 1. **内存管理**:由于24位深度的Bitmap文件占用内存较大,处理不当可能导致内存溢出。Android...
Bitmap对象用于存储和显示图像,而String则常用于保存和传输文本信息。本篇文章将深入探讨如何在Android中进行Bitmap与String之间的转换,以及这些转换在实际应用中的场景。 首先,我们要理解Bitmap与String转换的...
本示例DEMO就是为了解决如何在Android上读取和显示TIF/TIFF格式的传真图片。 TIF/TIFF是一种灵活的位图图像格式,常用于扫描、传真和专业图像领域,因为它支持多页、灰度、彩色以及多种压缩算法。由于其复杂性,...
综上所述,这个优化版的Android图片瀑布流解决方案综合运用了多种技术手段,以防止内存溢出,提升应用的稳定性和性能。开发者在实现自己的瀑布流布局时,可以参考这些优化策略,为用户提供流畅且高效的图片浏览体验...
此外,第三方库如Fresco和Glide,它们内部有优化的内存管理和图片缓存机制,可以更高效地处理Bitmap。 5. **及时释放资源**:当Bitmap不再需要时,应调用`recycle()`方法释放系统资源,但需要注意这并不意味着内存...
首先,我们需要了解什么是 bitmap 图片,bitmap 图片是一种图像存储格式,它将图像分割成一个个像素,然后将每个像素的颜色值存储在内存中,以便于图像的处理和显示。 在 Android 中,我们可以使用 Bitmap 类来处理...
7. **内存池**:为了进一步优化内存使用,可以创建Bitmap对象的内存池,重复利用已经解码过的帧,减少频繁的内存分配和回收。 8. **监听内存状态**:实时监控应用程序的内存使用情况,当内存接近阈值时,可以采取...
Android 中加载大图片时内存溢出的解决方案 在 Android 开发中,加载大图片时经常会出现内存溢出的问题。这是由于大图片的解码需要大量的内存空间,从而导致应用程序崩溃。因此,解决加载大图片时的内存溢出问题是...
在Android开发中,图片加载是应用性能优化的关键环节,尤其对于内存管理而言,不恰当的图片处理可能导致Out Of Memory (OOM)异常,严重影响用户体验。针对这一问题,我们需要深入理解Android系统的内存机制,并学习...
在Android开发中,有时我们需要将Bitmap对象转换成不同的图片格式,比如BMP。BMP(Bitmap File Format)是一种常见的位图文件格式,但它并不像JPEG或PNG那样被Android SDK直接支持。本文将详细介绍如何在Android中将...
综上所述,解决Android图片下载导致的内存溢出问题需要从多个方面进行优化,包括图片尺寸控制、缓存策略、内存管理、加载策略等。结合使用现有的图片加载库,可以显著提高应用性能和用户体验。在实际项目中,...
总结,"bitmap上传图片demo"是一个综合性的实例,涵盖了Bitmap的加载、显示、裁剪和上传等多个环节,对于学习Android图像处理和优化具有很高的参考价值。在实际开发中,我们需要根据项目的具体需求,灵活运用这些...
软件开发网在此之前给大家介绍过图片加载框架Glide的基本用法介绍,大家可以先参考一下,本篇内容更加深入的分析了Glide获取图片Path、Bitmap用法,以及实现的代码分析。 1. 获取Bitmap: 1)在图片下载缓存好之后...