android 图片缩略图(解决大图片溢出问题)
来源:互联网 发布:手机淘宝购物流程图 编辑:程序博客网 时间:2024/04/28 09:58
正在做一个软件其中涉及到一些关于缩略图的知识。还有就是大图片的溢出问题,也可以通过缩略图的方式避免。
主要是通过BitmapFactory.Options 来实现。
Options中有个属性inJustDecodeBounds。我们可以充分利用它,来避免大图片的溢出问题。他是什么原理呢?
API这样说:如果该 值设为true那么将不返回实际的bitmap,也不给其分配内存空间这样就避免内存溢出了。但是允许我们查询图片的信息这其中就包括图片大小信息(
options.outHeight (图片原始高度)和option.outWidth(图片原始宽度))。
Options中有个属性inSampleSize。我们可以充分利用它,实现缩放。
如果被设置为一个值> 1,要求解码器解码出原始图像的一个子样本,返回一个较小的bitmap,以节省存储空间。
例如,inSampleSize = = 2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。
对于任何值< = 1的同样处置为1。
那么相应的方法也就出来了,通过设置 inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),
然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。
实现步骤:
第一步:BitmapFactory.Option
设置 inJustDecodeBounds为true
第二步:BitmapFactory.decodeFile(path,option)方法
解码图片路径为一个位图。如果指定的文件名是空的,或者不能解码到一个位图,函数将返回null[空值]。
获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度)
第三步:计算缩放比例,也可以不计算,直接给它设定一个值。
options.inSampleSize = "你的缩放倍数";
如果是2就是高度和宽度都是原始的一半。
第四步:设置options.inJustDecodeBounds = false;
重新读出图片
bitmap = BitmapFactory.decodeFile(path, options);
具体实现:
- package xiaosi.compress;
- import android.app.Activity;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.widget.ImageView;
- public class Compress extends Activity
- {
- /** Called when the activity is first created. */
- private ImageView image = null;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- image = (ImageView) findViewById(R.id.image);
- image.setImageBitmap(decodeBitmap());
- }
- public Bitmap decodeBitmap()
- {
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true;
- // 通过这个bitmap获取图片的宽和高
- Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/MTXX/3.jpg", options);
- if (bitmap == null)
- {
- System.out.println("bitmap为空");
- }
- float realWidth = options.outWidth;
- float realHeight = options.outHeight;
- System.out.println("真实图片高度:" + realHeight + "宽度:" + realWidth);
- // 计算缩放比
- int scale = (int) ((realHeight > realWidth ? realHeight : realWidth) / 100);
- if (scale <= 0)
- {
- scale = 1;
- }
- options.inSampleSize = scale;
- options.inJustDecodeBounds = false;
- // 注意这次要把options.inJustDecodeBounds 设为 false,这次图片是要读取出来的。
- bitmap = BitmapFactory.decodeFile("/sdcard/MTXX/3.jpg", options);
- int w = bitmap.getWidth();
- int h = bitmap.getHeight();
- System.out.println("缩略图高度:" + h + "宽度:" + w);
- return bitmap;
- }
- }
效果图:
- android 图片缩略图(解决大图片溢出问题)
- Android进阶2之图片缩略图(解决大图片溢出问题)
- Android进阶2之图片缩略图(解决大图片溢出问题)
- android有效解决加载大图片内存溢出的问题
- 解决Android加载大图片内存溢出的问题(OutofMemoryException)
- 解决Android加载大图片内存溢出的问题(OutofMemoryException)
- 解决android加载大图片,内存溢出问题
- android有效解决加载大图片内存溢出的问题
- Android解决大图片内存溢出
- Android解决大图片内存溢出
- Android解决大图片内存溢出
- android图片加载内存优化方法,有效解决大图片内存溢出(oom)
- Android使用BitmapFactory.Options压缩图片解决加载大图片内存溢出
- [Android实例] Android有效解决加载大图片内存溢出问题及优化虚拟机内存
- 【转】android有效解决加载大图片内存溢出的问题
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- WIN7 32 联想针式打印机 联想DP600+ 文字不全
- libsvm的使用
- U盘安装CentOS 6.4 + Windows 7双系统 (Windows 7下安装 CentOS 6.4)
- 【PAT1004】Counting Leaves
- HDUJ 1425 sort
- android 图片缩略图(解决大图片溢出问题)
- delphi 的IDE中嵌入 SVN 工具
- c语言之————无头非循环单链表
- android 图表引擎AChartEngine
- emacs学习笔记
- Ubuntu 下Eclipse不识别Android设备 的解决方法
- 黑马程序员---基本数据类型的包装类
- 数码相机内存卡里的照片,可能是电脑杀毒时被误删了,要怎样恢复
- Android中的Loaders机制