`
endual
  • 浏览: 3566974 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android 设置bitmap 设置图片的大小

 
阅读更多

android 中用bitmap 时很容易内存溢出,报如下错误:

Java代码  收藏代码
  1. Java.lang.OutOfMemoryError : bitmap size exceeds VM budget   
Java代码  收藏代码
  1. Java.lang.OutOfMemoryError : bitmap size exceeds VM budget   

 

● 主要是加上这段:

Java代码  收藏代码
  1. BitmapFactory.Options options =  new  BitmapFactory.Options();   
  2.                 options.inSampleSize = 2 ;   
Java代码  收藏代码
  1. BitmapFactory.Options options = new BitmapFactory.Options();   
  2.                 options.inSampleSize = 2;   

 

● eg1:(通过Uri取图片)

Java代码  收藏代码
  1. private  ImageView preview;   
  2. BitmapFactory.Options options = new  BitmapFactory.Options();   
  3.                     options.inSampleSize = 2 ; //图片宽高都为原来的二分之一,即图片为原来的四分之一    
  4.                     Bitmap bitmap = BitmapFactory.decodeStream(cr   
  5.                             .openInputStream(uri), null , options);   
  6.                     preview.setImageBitmap(bitmap);   
Java代码  收藏代码
  1. private ImageView preview;   
  2. BitmapFactory.Options options = new BitmapFactory.Options();   
  3.                     options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一   
  4.                     Bitmap bitmap = BitmapFactory.decodeStream(cr   
  5.                             .openInputStream(uri), null, options);   
  6.                     preview.setImageBitmap(bitmap);   

 
以上代码可以优化内存溢出,但它只是改变图片大小,并不能彻底解决内存溢出。 
● eg2:(通过路径去图片)

Java代码  收藏代码
  1. private  ImageView preview;   
  2. private  String fileName=  "/sdcard/DCIM/Camera/2010-05-14 16.01.44.jpg" ;   
  3. BitmapFactory.Options options = new  BitmapFactory.Options();   
  4.                 options.inSampleSize = 2 ; //图片宽高都为原来的二分之一,即图片为原来的四分之一   
  5.                         Bitmap b = BitmapFactory.decodeFile(fileName, options);   
  6.                         preview.setImageBitmap(b);   
  7.                         filePath.setText(fileName);   
Java代码  收藏代码
  1. private ImageView preview;   
  2. private String fileName= "/sdcard/DCIM/Camera/2010-05-14 16.01.44.jpg";   
  3. BitmapFactory.Options options = new BitmapFactory.Options();   
  4.                 options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一   
  5.                         Bitmap b = BitmapFactory.decodeFile(fileName, options);   
  6.                         preview.setImageBitmap(b);   
  7.                         filePath.setText(fileName);   

 
★Android 还有一些性能优化的方法: 
●  首先内存方面,可以参考 Android堆内存也可自己定义大小 和 优化Dalvik虚拟机的堆内存分配 
●  基础类型上,因为Java没有实际的指针,在敏感运算方面还是要借助NDK来完成。这点比较有意思的是Google推出NDK可能是帮助游戏开发人员,比如OpenGL ES的支持有明显的改观,本地代码操作图形界面是很必要的。 
●  图形对象优化,这里要说的是Android上的Bitmap对象销毁,可以借助recycle()方法显示让GC回收一个Bitmap对象,通常对一个不用的Bitmap可以使用下面的方式,如

Java代码  收藏代码
  1. if (bitmapObject.isRecycled()== false )  //如果没有回收      
  2.          bitmapObject.recycle();      
Java代码  收藏代码
  1. if(bitmapObject.isRecycled()==false//如果没有回收     
  2.          bitmapObject.recycle();      

 

●  目前系统对动画支持比较弱智对于常规应用的补间过渡效果可以,但是对于游戏而言一般的美工可能习惯了GIF方式的统一处理,目前 Android系统仅能预览GIF的第一帧,可以借助J2ME中通过线程和自己写解析器的方式来读取GIF89格式的资源。 
● 对于大多数Android手机没有过多的物理按键可能我们需要想象下了做好手势识别 GestureDetector 和重力感应来实现操控。通常我们还要考虑误操作问题的降噪处理。 
Android堆内存也可自己定义大小 
   对于一些大型Android项目或游戏来说在算法处理上没有问题外,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比 较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了上次Android开发网提到的 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的 dalvik.system.VMRuntime类来设置最小堆内存为例:

Java代码  收藏代码
  1. private   final   static   int  CWJ_HEAP_SIZE =  6 *  1024 *  1024  ;   
  2. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。   
Java代码  收藏代码
  1. private final static int CWJ_HEAP_SIZE = 610241024 ;   
  2. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。  

 

当然对于内存吃紧来说还可以通过手动干涉GC去处理,我们将在下次提到具体应用。 
优化Dalvik虚拟机的堆内存分配 
对于 Android平台来说,其托管层使用的Dalvik JavaVM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用 dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体 原理我们可以参考开源工程,这里我们仅说下使用方法:  

Java代码  收藏代码
  1. private   final   static  floatTARGET_HEAP_UTILIZATION =  0 .75f;   
Java代码  收藏代码
  1. private final static floatTARGET_HEAP_UTILIZATION = 0.75f;   

 

在程序onCreate时就可以调用

Java代码  收藏代码
  1. VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);   
Java代码  收藏代码
  1. VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);   

 即可。

分享到:
评论

相关推荐

    android中对Bitmap图片设置任意角为圆角

    总的来说,Android中对Bitmap图片设置任意角为圆角涉及到了Bitmap的处理、Canvas的绘制、Matrix的旋转以及PorterDuff模式的应用等多个知识点。通过这些技术的组合使用,我们可以灵活地创造出各种定制化的图片显示...

    Android下利用Bitmap切割图片

    在实际应用中,我们可能需要根据需求动态调整图片大小或比例,这时可以使用Bitmap.createScaledBitmap方法。这个方法可以将Bitmap缩放到指定的尺寸,同时保持原图像的比例: ```java // 缩放Bitmap至新的尺寸 ...

    Android中把bitmap存成BMP格式图片的方法

    在Android开发中,有时我们需要将Bitmap对象转换成不同的图片格式,比如BMP。BMP(Bitmap File Format)是一种常见的位图文件格式,但它并不像JPEG或PNG那样被Android SDK直接支持。本文将详细介绍如何在Android中将...

    android获取图片尺寸的两种方式及bitmap的缩放操作

    我就废话不多说了,大家还是直接看代码吧~ //Uri.parse(file://+result.getImage... //方法一:通过uri把图片转化为bitmap的方法 Bitmap bitmap= BitmapFactory.decodeFile(path); int height= bitmap.get

    bitmap上传图片demo

    如果需要动态调整图片大小以适应视图,可以使用`Bitmap.createScaledBitmap()`方法。 4. 图片裁剪: 在这个示例中,裁剪圆形头像是一个常见的需求,通常通过Canvas和Paint来实现。首先创建一个圆形Bitmap,然后在...

    android Tif Tiff格式的图片转换成bitmap 读取TIFF传真格式图片DEMO下载

    - 考虑到Android设备的内存限制,转换后的Bitmap应使用适当配置,如调整大小、选择适当的压缩格式(如ARGB_8888或RGB_565)等,以减少内存消耗。 - 使用异步操作,避免UI线程阻塞,可以使用AsyncTask或其他异步...

    Android bitmap图片压缩工具类

    "Android bitmap图片压缩工具类"就是针对这一需求设计的一个实用工具,它能够有效地减小图片的大小,同时满足基本的显示要求。 BitmapCompressUtils这个类通常包含了一系列静态方法,用于对Bitmap进行不同类型的...

    Android上解析24位深度Bitmap文件示例

    Android提供了几种不同的配置选项,如`inDensity`、`inTargetDensity`和`inSampleSize`,用于控制Bitmap在内存中的大小。`inSampleSize`可以设定解码时的缩放比例,以减少内存消耗。 2. **Bitmap配置**:Android的...

    android Bitmap用法总结

    使用Matrix对象调整Bitmap的大小,以适应特定的尺寸: ```java // 获取原图的宽高 int width = bm.getWidth(); int height = bm.getHeight(); // 设置目标尺寸 int newWidth = 320; int newHeight = 480; ...

    Android Bitmap网络图片下载

    - 分辨率适配:根据设备屏幕分辨率加载合适的图片大小,避免加载过大的资源。 - 懒加载和渐进式加载:仅在需要时加载图片,对于大图可先加载低分辨率版本,提高用户体验。 7. **图片处理** - 可以使用`Canvas`和...

    Android Bitmap 处理示例

    本示例将详细介绍Android中Bitmap的处理,包括图片缓存策略和加载大图的技巧。 1. **Bitmap的内存管理** - **内存分配**:Bitmap对象会根据其像素宽度、高度和颜色格式占用不同的内存。例如,一个2000x1500像素的...

    bitmap 背景图片

    可以使用BitmapFactory.Options类来控制解码时的参数,比如设置inSampleSize以减小图片的大小。 此外,你还可以通过矩阵(Matrix)进行旋转、缩放、平移等操作,使图标在背景上的位置和方向更加灵活。同时,对于...

    android 获取界面部分view,view截图,生成bitmap图片

    以上就是实现“android 获取界面部分view,view截图,生成bitmap图片”的核心步骤和涉及的技术点。在实际开发中,可能还需要考虑性能优化,比如避免在主线程进行耗时操作,或者在内存有限的情况下使用更高效的位图...

    处理android bitmap oom 2.0版本关闭了硬件加速

    综上所述,处理Android Bitmap OOM问题需要综合运用多种技术,包括调整图片大小、选择合适的编码格式、合理加载和释放Bitmap,以及利用库和缓存机制。在Android 2.0版本中关闭硬件加速是一个可行的解决方案,但应...

    android bitmap图片压缩

    一张Bitmap图片占用的内存大小等于宽度乘以高度乘以每个像素所占的位数。例如,一个1024x768像素的RGB_565格式图片,每个像素占用2个字节,那么它占用的内存就是1024x768x2=1.5MB。如果这个图片加载到内存中,而设备...

    android 把一个view视图转换成bitmap 保存到本地

    我们通常使用`View`的测量尺寸(`getMeasuredWidth()`和`getMeasuredHeight()`)来确定Bitmap的大小。 2. **准备Canvas**:`Canvas`是用来绘制Bitmap的画布,通过`Bitmap.createBitmap()`方法返回的Bitmap对象,...

    Android实现文字转图片

    本文将详细讲解如何实现这个功能,包括设置文字的大小、字体、颜色、透明度,以及背景色、背景透明度,并指导如何将生成的图片保存到SD卡上。 首先,我们需要在Android项目中添加必要的依赖。为了绘制文字,我们将...

    Android View转成Bitmap

    在Android开发中,将View转换为Bitmap是一种常见的需求,尤其在实现屏幕截图、保存或分享View内容、创建自定义控件或动态生成图片等场景下。以下是对如何将Android View转换为Bitmap的深入解析,包括代码逻辑分析、...

    【Android】使用GLSurfaceView+Canera预览+保存帧Bitmap

    这个【Android】使用GLSurfaceView+Canera预览+保存帧Bitmap的项目,提供了一个完整的示例,让我们深入了解一下这两个组件如何协同工作。 首先,`GLSurfaceView`是Android系统为了高效地显示OpenGL ES图形而设计的...

    Android应用源码之(Bitmap位图渲染与操作).zip

    - **SampleSize**:通过设置`inSampleSize`减少解码时的图片大小,降低内存占用。 - **BitmapFactory.Options**:利用Options参数进行解码控制,例如仅计算尺寸不返回Bitmap(`inJustDecodeBounds`)。 4. **位图...

Global site tag (gtag.js) - Google Analytics