Bitmap的二次采样
来源:互联网 发布:mysql decimal 截断 编辑:程序博客网 时间:2024/04/29 07:03
Bitmap可以理解为通过一个bit数组来存储特定数据的一种数据结构。
一,二次采样的意义和目的;
当网络访问加载图片的时候,我们会遇到OOM异常。这是因为图片过大产生的。想要正确使用则需要分配更少的内存空间。
1、首先看下bitmapFactory.decodeFile(imageFile,option)和bitmapFactory.decodeFile(imageFile);
返回的都Bitmap对象。第一个方法法是根据根据图片地址和参数来返回一个Bitmap对象,第二个方法根据图片的url来返回Bitmap.
2、为了设置图片的裁剪要了解、BitmapFactory.Options.inSampleSize
来设置宽高的比例。(个人理解就是:拿到图片的以前宽高和现在的宽高,算出比例可以往下看下代码)
BitmapFactory.Options bop=new BitmapFactory.Options() ;
bop.inSampleSize=4;
BitmapFactory.decodeFile("path",bop);
3.还有一个关于BitmapFactory.Option.inJustDecodeBounds,true为不分配控件。
是为了管理系统是否为BitmapFactory.decodeFile("uri",option)返回的Bitmap分配空间。可以设置true和false.
看完上面的一个方法和两个属性。下面具体写下代码
/**
* 把二次裁剪封装一个方法。
*/
private Bitmap createImageThumbnail(String filepath,int newWidth,int newheight){
BitmapFactory.Options opts=new BitmapFactory.Options();
//此时并不会为 BitmapFactory.decodeFile(filepath, opts)分配空间
//因为已经设置了inJustDecodeBounds为fales;
opts.inJustDecodeBounds=true;
//此时opts已经包含了未裁剪的宽高
BitmapFactory.decodeFile(filepath, opts);
//得到原图片的宽高
int oldHeight=opts.outHeight;
int oldWidth=opts.outWidth;
//获取新旧图片的比例
int rationHeight=oldHeight/newheight;
int rationWidth=oldWidth/newWidth;
opts.inSampleSize=rationHeight>rationWidth?rationWidth:rationHeight;
//确定bitmap的单位字节像素
opts.inPreferredConfig=Config.RGB_565;
opts.inJustDecodeBounds=false;
Bitmap bm=BitmapFactory.decodeFile(filepath, opts);
return bm;
}
三、借鉴别人的
- ALPHA_8:
- 图片长度*图片宽度
- 100*100=10000字节
- ARGB_4444:
- 图片长度*图片宽度*2
- 100*100*2=20000字节
- ARGB_8888:
- 图片长度*图片宽度*4
- 100*100*4=40000字节
- RGB_565:
- 图片长度*图片宽度*2
- 100*100*2=20000字节
- Bitmap的二次采样
- bitmap的二次采样
- Bitmap的二次采样
- Bitmap的二次采样
- Bitmap的图片二次采样
- 关于Bitmap的二次采样
- Android Bitmap的二次采样
- Bitmap 图片的二次采样
- Bitmap 图片的二次采样
- 图片的二次采样Bitmap
- Bitmap二次采样
- Android bitmap二次采样
- bitmap 二次采样
- Bitmap二次采样
- Bitmap 二次采样
- Bitmap 二次采样实现
- BitMap二次采样
- Bitmap二次采样
- unity中世界坐标和绝对坐标之间的转换
- [心得]DotNetBar界面风格显示问题
- servlet-------HttpServletRequest对象
- poj 1389Area of Simple Polygons(矩形面积并)
- JSR 133
- Bitmap的二次采样
- java extends/interface/implement三者的联系与区别
- 灭点
- java程序中加入@SuppressWarnings("serial")实践
- JAVAEE之--------过滤器设置是否缓存(Filter)
- [javase学习笔记]-7.1 构造函数概述与默认构造函数
- 在iOS 应用中跳转到app store
- sql server清理缓存
- 项目总结