首页 > 代码库 > Android技术6:Android中对于Bitmap的处理
Android技术6:Android中对于Bitmap的处理
很多Android应用在运行时,会遇到运行缓慢,不流畅等影响用户体验问题,这有一部分原因与图片有密切关系。当android应用需要加载较大较多的照片时,经常反应迟缓,甚至由于OOM,造成系统奔溃。下面将提供一种可行的解决方案。
1.获取图片的宽高属性
1 BitmapFactory.Options options=new BitmapFactory.Options();2 options.inJustDecodeBounds=true;3 BitmapFactory.decodeFile(filepath, options);
inJustDecodeBounds为true; decodeFile 返回的Bitmap 为null,图片不会加载到内存中,但可以获得file的高度和宽度以及其他属性。
2.设置inSampleSize值
inSampleSize值是Options其中一个属性,主要是在解析Bitmap时将长宽像素缩放到原来的1/inSampleSize,相应的占用的空间缩小到原来1/(inSampleSize^2)。所有inSampleSize取值为最近的2的幂,默认值为1,即不缩放。
1 //获取inSampleSize 2 private static int getInSampleSize(BitmapFactory.Options options,int width,int height){ 3 //获取原图的宽高 4 int mwidth=options.outWidth; 5 int mheight=options.outHeight; 6 //初始inSampleSize=1;不缩放 如果n(2的幂) 宽和搞都为原来的1/n 减小到原来的1/n^2 7 int inSampleSize=1; 8 if(mheight>height || mwidth>width){ 9 int hwidth=mwidth/2;10 int hheight=mheight/2;11 while((hwidth/inSampleSize)>width && (hheight/inSampleSize)>height){12 inSampleSize=inSampleSize*2;13 }14 } 15 return inSampleSize;16 }
3.根据inSampleSize解析出Bitmap
1 //在解码获取Bitmap之前将inJustDecodeBounds设置为false;2 options.inJustDecodeBounds=false;3 Bitmap bitmap=BitmapFactory.decodeFile(filepath, options);
4.根据ImageView控件指定Bitmap宽高
1 bitmap=Bitmap.createScaledBitmap(bitmap, width, height, true);
5.设置ImageView属性
1 image=(ImageView) findViewById(R.id.image);2 image.setImageBitmap(BitmapTools.getSampleBitmap(path, 100, 100));
以上是对图片处理基本步骤,将图片压缩到某个比例,减少内存。这过程在Android中设计大量的图片时,该过程是很有效果的。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。