- 浏览: 703376 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
葫芦瓢:
葫芦瓢 写道专注IT 写道请问楼主demo中为什么是Custo ...
Android Scroller简单用法 -
葫芦瓢:
专注IT 写道请问楼主demo中为什么是CustomView中 ...
Android Scroller简单用法 -
u011493452:
注册账号给楼主点赞!
Android Scroller简单用法 -
jiduoduo:
整理的不错!
Android文件存储 -
xiaofeng0817166:
http://deerchao.net/tutorials/r ...
Java正则表达式应用
下载的图片如果过大,可能导致内存溢出。需要做压缩处理之后再显示
注:较大的图片文件上传到服务器一般都需要压缩调整,保证数据通信的效率是最主要的
方法1:按固定比例进行缩放
在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用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,必须做判断。也就是说先将Options的属性inJustDecodeBounds设为true,先获取图片的基本大小信息数据(信息没有保存在bitmap里面,而是保存在options里面),通过options.outHeight和 options. outWidth获取的大小信息以及自己想要到得图片大小计算出来缩放比例inSampleSize,然后紧接着将inJustDecodeBounds设为false,就可以根据已经得到的缩放比例得到自己想要的图片缩放图了。
具体代码如下:
这样我们就可以读取较大的图片而不会内存溢出了。如果你想把压缩后的图片保存在Sdcard上的话就很简单了:
ok,这样就把图片保存在/sdcard/feng.png这个文件里面了,呵呵。
方法2:按长宽各自比例进行缩放
但是这里的缩放保存是按长宽比例的,下边也可以按固定大小缩放哦:
原文链接:http://snoopychen.diandian.com/post/2011-12-08/7569479
注:较大的图片文件上传到服务器一般都需要压缩调整,保证数据通信的效率是最主要的
方法1:按固定比例进行缩放
在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用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,必须做判断。也就是说先将Options的属性inJustDecodeBounds设为true,先获取图片的基本大小信息数据(信息没有保存在bitmap里面,而是保存在options里面),通过options.outHeight和 options. outWidth获取的大小信息以及自己想要到得图片大小计算出来缩放比例inSampleSize,然后紧接着将inJustDecodeBounds设为false,就可以根据已经得到的缩放比例得到自己想要的图片缩放图了。
具体代码如下:
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这个文件里面了,呵呵。
方法2:按长宽各自比例进行缩放
但是这里的缩放保存是按长宽比例的,下边也可以按固定大小缩放哦:
int bmpWidth = bitmap.getWidth(); int bmpHeight = bitmap.getHeight(); //缩放图片的尺寸 float scaleWidth = (float) sWidth / bmpWidth; //按固定大小缩放 sWidth 写多大就多大 float scaleHeight = (float) sHeight / bmpHeight; // Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight);//产生缩放后的Bitmap对象 Bitmap resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bmpWidth, bmpHeight, matrix, false); bitmap.recycle(); Bitmap resizeBitmap = bitmap; //Bitmap to byte[] byte[] photoData = bitmap2Bytes(resizeBitmap); //save file String fileName = "/sdcard/test.jpg"; FileUtil.writeToFile(fileName, photoData);
原文链接:http://snoopychen.diandian.com/post/2011-12-08/7569479
发表评论
-
Android Notification的使用
2012-10-20 19:28 9734Android 4.1 (Jelly Bean ... -
短信拦截
2012-09-25 20:40 2047最近写一个应用(A),需要拦截短信分析。一般是 ... -
Android Scroller简单用法
2012-08-01 16:35 65786Android里Scroller类是为了实现Vi ... -
Android 使用WebView.loadData中文乱码解决办法
2012-07-19 15:09 9557博主在使用WebView的loadData方法时发 ... -
Android HttpClient基本使用方法
2012-07-05 14:15 107839这里只介绍如何使用HttpClient发起GET或者POST请 ... -
Android XML定义颜色
2012-06-09 13:15 0在res/colors.xml中添加如下代码: 定义C ... -
Activity和Task的设计思路和方法
2012-03-29 20:20 1203Activity和 Task是 Android ... -
显示PopupWindow
2012-03-16 10:04 16641PopupWindow可 ... -
存储文件的ContentProvider
2012-03-08 23:37 9353基于SQLite的ContentProvider ... -
Android文件存储
2012-03-08 22:34 19375Internal Storage内部存储空 ... -
Android 使用Notification
2012-03-07 10:26 2198用惯了Android的人在刚拿到iPhone的 ... -
Android用软键盘将整个界面推上去
2012-03-04 17:11 35852在Android UI中 ... -
onInterceptTouchEvent和onTouchEvent调用时序
2012-02-11 23:42 1047onInterceptTouchEvent() ... -
使用ConnectivityManager监听网络状态变化
2011-12-24 11:16 29799mIntenFilter = new IntentFilte ... -
Window Manager
2012-03-22 23:51 1525Android的窗口机制基于WindowManager,可以通 ... -
CommonsWare Android Components
2011-12-17 16:10 1724CommonsWare Android Com ... -
Android 使用Parcelable序列化对象
2011-12-16 23:43 36525Android序列化对象主要有两种方法,实现S ... -
PreferenceActivity
2011-12-12 22:54 886传送门:http://www.cnblogs.com/wser ... -
View.scrollBy()与View.scrollTo()的使用
2011-12-12 22:40 19539scrollTo()和scrollBy()都是V ... -
Android 新浪微博授权
2011-12-11 17:13 7473OAuth方式 通过网页方式授权 实现方法,三个步骤 1.使用 ...
相关推荐
一个Android图片缩放查看控件,支持手势
android图片缩放双击旋转效果 支持图片拖动,双击缩放,旋转,展示
Android开发中如何对图片缩放的方法
android图片缩放、放大demo,android图片缩放、放大demo.
这是一个图片缩放的例子,注解详细。有图片的边缘控制,最大、最小倍数控制,是开源控件PhotoViewAttacher,的缩减版,采用异步线程来放缩图片。
Android实现ImageView跟随手势实现图片缩放的效果
android图片缩放
Android中进行图片缩放显示,获取网络图片,双击放大缩小,支持多点触屏缩放和拖拽。 demo查看地址:http://blog.csdn.net/u011084603/article/details/50371843
android图片缩放源码,绝对好用,可以当类库使用
android图片缩放剪切
android 图片缩放移动 蛮不错的 分享给大家
android imageview 图片缩放 图片缩放、移动+异步加载+Activity半透明
android 图片缩放和旋转,可以参考学习
Android GridView 点击缩放图像
Android的SurfaceView实现图片缩放、滑动,网上资源不多,目前还有些问题,仅供参考。
Android实现图片手势缩放、移动、双击放大缩小。
android imageview图片自由缩放,支持多点
android 图片缩放和多点触摸源码.rar
android图片预览缩放
android 图片 缩放 支持多点(源码),导入即可!需要的朋友开源下载来看下。