Android应用开发之(图片处理技巧一)

转载 2012年03月24日 20:25:58

Android应用开发中我们会经常用到图片处理的技术,今天给大家分享些获取固定宽度图片的技巧

 

移动开发中,内存资源很宝贵,而且对加载图片内存空间也有限制;所以我们会在加载图片对图片进行相应的处理,有时为了提高响应速度,增强用户体验,我们在加载大图片时会先加载图片的缩略图、如后加载原图,所以我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。

然而,如果我们想取固定大小的缩略图就比较困难了,比如,我们想将不同大小的图片去出来的缩略图高度都为200px,而且要保证图片不失真,那怎么办?我们总不能将原始图片加载到内存中再进行缩放处理吧,要知道在移动开发中,内存是相当宝贵的,而且一张100K的图片,加载完所占用的内存何止 100K?经过研究,发现,Options中有个属性inJustDecodeBounds,研究了一下,终于明白是什么意思了,SDK中的E文是这么说的If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.意思就是说如果该值设为true那么将不返回实际的bitmap不给其分配内存空间而里面只包括一些解码边界信息即图片大小信息,那么相应的方法也就出来了,通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。具体代码如下:

FrameLayout fr=(FrameLayout)findViewById(R.id.FrameLayout01);        

BitmapFactory.Options options = new BitmapFactory.Options();        

options.inJustDecodeBounds = true;        // 获取这个图片的宽和高        

Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.jpg", options); //此时返回bm为空        

options.inJustDecodeBounds = false;         //计算缩放比       

 int be = (int)(options.outHeight / (float)200);       

 if (be <= 0)            

be = 1;        

options.inSampleSize = be;        //重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦        bitmap=BitmapFactory.decodeFile("/sdcard/test.jpg",options);       

 int w = bitmap.getWidth();       

 int h = bitmap.getHeight();       

 System.out.println(w+"   "+h);        

ImageView iv=new ImageView(this);     

 iv.setImageBitmap(bitmap);这样我们就可以读取较大的图片就会避免内存溢出了。如果你想把压缩后的图片保存在Sdcard上的话就很简单了:File file=new File("/sdcard/feng.png");      

  try {            FileOutputStream out=new FileOutputStream(file);           

 if(bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)){               

 out.flush();               

 out.close();           

 }        

} catch (FileNotFoundException e) {            

e.printStackTrace();        

} catch (IOException e) {            

e.printStackTrace();       

 }

ok,这样就把图片保存在/sdcard/feng.png这个文件里面了,呵呵。

Android应用开发之(图片处理技巧一)

Android应用开发中我们会经常用到图片处理的技术,今天给大家分享些获取固定宽度图片的技巧 移动开发中,内存资源很宝贵,而且对加载图片内存空间也有限制;所以我们会在加载图片对图片进行相...
  • Tabeeeeeer
  • Tabeeeeeer
  • 2016年02月23日 16:13
  • 160

Android应用开发-MP3音乐播放器代码实现(三)

Android应用开发-MP3音乐播放器代码实现(三) 2013年5月29 简、美音乐播放器开发记录 这篇博客是接着上一篇博客的,点击列表会进入播放的Activity,在这个Activity会接收...
  • wwj_748
  • wwj_748
  • 2013年05月29日 21:10
  • 25938

Android应用开发详解

本文内容,主题是透过应用程序来分析Android系统的设计原理与构架。我们先会简单介绍一下Android里的应用程序编程,然后以这些应用程 序在运行环境上的需求来分析出,为什么我们的Android系统...
  • permike
  • permike
  • 2014年12月05日 21:35
  • 3822

Android应用开发揭秘[高清PDF版+源码]

编辑推荐 本书内容全面,不仅详细讲解了Android框架、Android组件等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发等高级知识,最重要的是还全面介绍了如何利用原生的C/C++(...
  • xtd412
  • xtd412
  • 2016年07月29日 17:24
  • 570

【栈与队列】SDUT练习2—数据结构实验之栈一:进制转换

题目:点击打开链接 注意: 1、进制转换最有效的方法依然是短除法 2、empty()由于设计问题,在最后的某些边界情况出现BUG,比如内存错误,所以不要太信赖empty()(这个题可能没问题,其...
  • mig_davidli
  • mig_davidli
  • 2013年01月23日 10:59
  • 1537

简单的css效果原理(二)之导航栏的全部服务分类

废话不多说,直接看效果: 今天主要是想讲一下这个全部服务分类的列表及鼠标移入后的效果的实现,但最重要的其实是这个页面html结构以及css的实现。 本着把项目各功能做到最优,复用性更强的原则,我们...
  • diaoweixiao
  • diaoweixiao
  • 2017年09月20日 10:18
  • 230

Android开发之图片处理框架 (一)

最近研究公司老的图片处理框架,根据新的需求研究出了一套新的图片处理框架,性能上估计没有什么提升,不过整体的代码质量有了非常高的改进,因为毕竟要作为往下传的框架,代码要优雅装逼,可维护性好。这里估计会写...
  • cjm495580074
  • cjm495580074
  • 2016年12月01日 15:20
  • 826

MFC 技巧之三

21. 介绍函数过程中一种任意键退出同时能处理消息的实现方法  1. 设置定时器,用于使::GetMessage(...)函数总能快速取到消息. 2. 在函数处理中加入: 函数每执行完一...
  • zang141588761
  • zang141588761
  • 2016年01月22日 14:18
  • 573

图片处理(一)

图片的处理大概分 截图(capture),  缩放(scale), 设定大小(resize),  存储(save) 1.等比率缩放 - (UIImage *)scaleImage:(UII...
  • iOSZZZh
  • iOSZZZh
  • 2017年04月11日 14:15
  • 125

论文投稿-图片处理技巧

论文录用后,往往要求作者单独提交高分辨率的图片,并且会规定某几种可接受的图片格式,如EPS、PostScript等等。下面将以EPS格式为例,介绍如何将Visio、Figure格式图片转化为EPS格式...
  • u014556429
  • u014556429
  • 2017年09月14日 02:16
  • 57
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android应用开发之(图片处理技巧一)
举报原因:
原因补充:

(最多只允许输入30个字)