`
带个回家
  • 浏览: 139874 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

bitmap size exceeds VM budget 的解决办法

阅读更多

转载至: http://developer.aiwgame.com/

昨天遇到这个问题就是从一个输入流里调用BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri))得到一个bitmap报的错。第一次调用都没问题,第二次再次调用就会报上面那个内存溢出的问题。而且有的手机报有的手机不报。研究了半天终于解决。首先分析了下原因,应该是图片占用的内存超过了系统虚拟机可分配的最大限制。不同手机可能分配的最大值不一样。后来找到解决办法主要是设置BitmapFactory.Options

 

 

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

 

上面写死了,其实可以根据内容来动态设置更好。

 

 

//decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f){
    try {
        //Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);

        //The new size we want to scale to
        final int REQUIRED_SIZE=70;

        //Find the correct scale value. It should be the power of 2.
        int scale=1;
        while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE)
            scale*=2;

        //Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {}
    return null;
}

 

这样bitmap size exceeds VM budget的文件就解决了

0
0
分享到:
评论

相关推荐

    android_内存溢出处理

    在 Android 中,用 bitmap 时很容易内存溢出,报如下错误:Java.lang.OutOfMemoryError:bitmap size exceeds VM budget。解决这个问题可以通过手动干涉 GC 去处理 bitmap 设置图片尺寸,避免内存溢出。 例如: ```...

    处理bitmap内存溢出问题

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

    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...

    android bitmap outOfMemory解决方法

    本文将深入探讨Android Bitmap导致的`OutOfMemoryError`问题,以及如何有效地解决这个问题。 首先,我们需要了解`OutOfMemoryError`是如何产生的。在Java(包括Android)中,每个应用都有一定的内存限制。当应用...

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

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

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

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

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

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

    海康相机SDK 采图 直接生成BitMap类型

    处理完成后,可以使用Bitmap的Save方法将其保存为常见的图像文件格式,如JPG、PNG等。 6. **释放资源**:在完成所有操作后,别忘了关闭视频流和断开相机连接,释放占用的系统资源。 在C#编程环境中,利用.NET ...

    c#.net Bitmap类的基本使用方法

    本篇文章将详细介绍`Bitmap`类的基本使用方法,包括其构造函数、属性、方法以及如何与其他图形组件交互。 1. **Bitmap类的创建** - `Bitmap(int width, int height)`:创建一个指定宽度和高度的新空白位图。 - `...

    Android 将view 转换为Bitmap出现空指针问题解决办法

    Android 将view 转换为Bitmap出现空指针问题解决办法 Android 将view 转换为Bitmap是一种常见的操作,但是在这个过程中可能会出现空指针异常的问题。本文主要介绍了Android 将view 转换为Bitmap出现空指针问题解决...

    Android canvas drawBitmap方法详解及实例

    `drawBitmap()`方法是Canvas的一个关键函数,用于在Canvas上绘制Bitmap图像。本文将深入解析`drawBitmap()`方法的参数及其用法,并通过实例来说明如何使用该方法。 `drawBitmap(Bitmap bitmap, Rect src, Rect dst,...

    c#Bitmap类和Graphics类

    * Bitmap(Image, Size):从指定的Image对象(缩放到指定大小)初始化Bitmap对象。 * Bitmap(Int32, Int32):用指定的大小初始化Bitmap对象。 二、Graphics类 Graphics类是C#中用于图形绘制的基本类,它提供了多种...

    bitmap上传图片demo

    `BitmapFactory.decodeFile()`方法用于从本地文件加载Bitmap,而`Bitmap.createBitmap()`可以创建一个新的Bitmap对象,指定其尺寸、颜色格式和配置。 2. 图片加载优化: 不恰当的Bitmap使用可能导致内存溢出,因此...

    bitmap OOM的解决方案

    解决Bitmap OOM问题的方法多种多样: 1. **适当缩放**:在加载图片时,先计算出适合屏幕大小的尺寸,然后对图片进行等比例缩放。这样可以显著减少内存占用。可以使用`BitmapFactory.Options`的`inSampleSize`参数来...

    Bitmap类和图像像素值获取方法

    C#下读取、修改位置Bitmap,以及几种不同方法修改位图数据

    Android中的Bitmap序列化失败的解决方法

    解决方法之一:把Bitmap对象替换成byte数组来表示间接表示图片,在需要Bitmap的时候再讲byte数组转换成Bitmap对象。这是因为byte数组和Bitmap之间的可以转化,实现也比较方便。 附byte数组与Bitmap的相互转换方法: ...

    把一个bitmap资源变成圆形图像工具方法

    本教程将详细解释如何实现这一功能,同时介绍一个实用的小工具类——PicUtil,它包含了将Bitmap转换为圆形以及进行图片缩放的方法。 首先,我们要了解Android中的Bitmap类,它是Android系统提供的用于处理图像的...

    C++ 实现两个图片融合

    dwValue = bitmap->GetBitmapBits(bitmapSize1, px); bgbmp->GetBitmap(&bmpY;); bitmapSize = bmpY.bmHeight * bmpY.bmWidthBytes; BYTE* px1=(BYTE *)GlobalAlloc(GPTR,bitmapSize); dwValue2 = bgbmp->...

    Android下利用Bitmap切割图片

    切割图片通常指的是从原始图片中提取出一个矩形区域,这个操作在Android中可以通过Bitmap.createBitmap方法实现。以下是一个简单的示例,展示如何从Bitmap中裁剪出指定大小和位置的子Bitmap: ```java // 原始...

Global site tag (gtag.js) - Google Analytics