Bitmap类、BitmapFactory及BitmapFactory类中的常用方法
1.Bitmap
1.1非静态方法
- public void recycle()——回收位图占用的内存空间,把位图标记为Dead
- public final boolean isRecycled() ——判断位图内存是否已释放
- public final int getWidth()——获取位图的宽度
- public final int getHeight()——获取位图的高度
- public final boolean isMutable()——图片是否可修改
- public int getScaledWidth(Canvas canvas)——获取指定密度转换后的图像的宽度
- public int getScaledHeight(Canvas canvas)——获取指定密度转换后的图像的高度
- public boolean compress(CompressFormat format, int quality, - - --OutputStream stream)——按指定的图片格式以及画质,将图片转换为输出流。
- format:Bitmap.CompressFormat.PNG或Bitmap.CompressFormat.JPEG quality:画质,0-100.0表示最低画质压缩,100以最高画质压缩。对于PNG等无损格式的图片,会忽略此项设置
1.2 静态方法
- public void recycle()——回收位图占用的内存空间,把位图标记为Dead
- public final boolean isRecycled() ——判断位图内存是否已释放
- public final int getWidth()——获取位图的宽度
- public final int getHeight()——获取位图的高度
- public final boolean isMutable()——图片是否可修改
- public int getScaledWidth(Canvas canvas)——获取指定密度转换后的图像的宽度
- public int getScaledHeight(Canvas canvas)——获取指定密度转换后的图像的高度
- public boolean compress(CompressFormat format, int quality, - - --OutputStream stream)——按指定的图片格式以及画质,将图片转换为输出流。
- format:Bitmap.CompressFormat.PNG或Bitmap.CompressFormat.JPEG quality:画质,0-100.0表示最低画质压缩,100以最高画质压缩。对于PNG等无损格式的图片,会忽略此项设置
2.BitmapFactory
2.1 BitmapFactory创建Bitmap的几种方法说明
1.publicstaticBitmap decodeByteArray (byte[] data,intoffset,intlength, BitmapFactory.Options opts)参数data 压缩图像数据的字节数组offset 图像数据偏移量,用于解码器开始从哪儿解析.length 字节数,以偏移量开始,去解析opts 可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小返回值返回解码后的位图,或者如果图像数据不能被解码返回为空,或者 如果选项不是空,如果选项要求仅仅返回大小(opts.outWidth and opts.outHeight)。从指定的字节数组中解码一个不可变的位图。
2. public static Bitmap decodeByteArray (byte[] data, int offset, int length)
参数
data 压缩图像数据的字节数组
offset 图像数据偏移量,用于解码器开始从哪儿解析.
length 字节数,以偏移量开始,去解析
返回值
返回解码后的位图,或者如果图像数据不能被解码返回为空
从指定的字节数组中解码一个不可变的位图。
3.publicstaticBitmap decodeFile (String pathName)参数pathName 解码文件的全路径名返回值返回结果是解码的位图,或者如果不能解码则返回空。从文件中解码生成一个位图。如果支付的文件名为空,或者不能解码出一个位图,方法将返回空。
4.publicstaticBitmap decodeFile (String pathName, BitmapFactory.Options opts)参数pathName 解码文件的全路径名opts 可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小Returns返回解码后的位图,或者如果图像数据不能被解码返回为空,或者 如果选项不是空,如果选项要求仅仅返回大小(opts.outWidth and opts.outHeight)。从文件中解码生成一个位图。如果支付的文件名为空,或者不能解码出一个位图,方法将返回空。
5.publicstaticBitmap decodeFileDescriptor (FileDescriptor fd)参数fd 包含解码位图数据的文件路径返回值返回解码的位图或者空。
6.publicstaticBitmap decodeFileDescriptor (FileDescriptor fd, Rect outPadding, BitmapFactory.Options opts)参数fd 包含解码位图数据的<span style="font-family: Arial, Helvetica, sans-serif;">文件路径</span>outPadding 如果不为空,返回矩形的内边距如果位图存在,否则设置内边距为(-1,-1,-1,-1).如果没有位图返回空,内边距不改变opts 可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小返回值返回解码的位图或者空。
7.publicstaticBitmap decodeResource (Resources res,intid, BitmapFactory.Options opts)参数res 包含图像数据的资源对象id 图像数据的资源的idopts 可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小返回值
8.publicstaticBitmap decodeResourceStream (Resources res, TypedValue value, InputStream is, Rect pad, BitmapFactory.Options opts)从输入流中解码一个新位图。输入了获得资源,我们可以缩放位图。
9.publicstaticBitmap decodeResource (Resources res,intid)参数res 包含图像数据的资源对象id 图像数据的资源的id返回值返回解码后的位图,或者如果图像数据不能被解码返回为空从输入流中解码位图。与decodeResource(Resources,int, android.graphics.BitmapFactory.Options)当Options是空时同义,
10.publicstaticBitmap decodeResource (Resources res,intid, BitmapFactory.Options opts)参数res 包含图像数据的资源对象id 图像数据的资源的idopts 可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小返回值返回解码后的位图,或者如果图像数据不能被解码返回为空,或者 如果选项不是空,如果选项要求仅仅返回大小(opts.outWidth and opts.outHeight)。从资源中解码一个位图。与decodeResourceStream(Resources, TypedValue, InputStream, Rect, BitmapFactory.Options)同义.
11.publicstaticBitmap decodeStream (InputStream is, Rect outPadding, BitmapFactory.Options opts)参数is 持有原始数据用于解码位图的输入流outPadding 如果不为空,返回矩形的内边距如果位图存在,否则设置内边距为(-1,-1,-1,-1).如果没有位图返回空,内边距不改变opts 可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小Returns返回解码后的位图,或者如果图像数据不能被解码返回为空,或者 如果选项不是空,如果选项要求仅仅返回大小(opts.outWidth and opts.outHeight)。从输入流中解码一个位图。如果输入了为空,或者不能解码位图,方法返回空。流的位置觉得解码数据从哪儿读取。
12.publicstaticBitmap decodeStream (InputStream is)Decode an input stream into a bitmap. If the input stream isnull, or cannot be used to decode a bitmap, the function returnsnull. The stream's position will be where ever it was after the encoded data was read.参数is 持有原始数据用于解码位图的输入流返回值返回解码后的位图,或者如果图像数据不能被解码返回为空
2.2 BitmapFactory.Options说明以及使用
位图在内存中的占用空间计算:
ALPHA_8:每个像素占用1byte内存
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存
RGB_565:每个像素占用2byte内存
举个例子,如果一个图片的分辨率是1024*768,采用ARGB_8888,那么占用的空间就是1024*768*4=3MB
通过BitmapFactory.Options降低bitmap加载到内存中的内存及改变色彩设置防止OOM
BitmapFactory.Options的常用参数
inJustDecodeBounds:
如果将这个值置为true,那么在解码的时候将不会返回bitmap,只会返回这个bitmap的尺寸。这个属性的目的是,如果你只想知道一个bitmap的尺寸,但又不想将其加载到内存时。这是一个非常有用的属性。
inSampleSize:
缩放比例。当它小于1的时候,将会被当做1处理,这个参数需要是2的幂函数。例如,width=100,height=100,inSampleSize=2,那么就会将bitmap处理为,width=50,height=50,宽高各降为1 / 2,像素数降为1 / 4。
inPreferredConfig:
这个值是设置色彩模式,默认值是ARGB_8888,在这个模式下,一个像素点占用4bytes空间,一般对透明度不做要求的话,一般采用RGB_565模式,这个模式下一个像素点占用2bytes。
outWidth和outHeight:
表示这个Bitmap的宽和高,一般和inJustDecodeBounds一起使用来获得Bitmap的宽高,但是不加载到内存。
从资源图片加载一个大图,并显示出来
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds=true;
BitmapFactory.decodeResource(getResources(),R.drawable.big6,options);
int ratio=calculateInSampleSize(options,1080,1920);//计算压缩比
options.inSampleSize=ratio;
options.inPreferredConfig= Bitmap.Config.RGB_565;
options.inJustDecodeBounds=false;
Log.e(TAG, "onCreate: ratio:"+ratio );
Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.big6,options);
img.setImageBitmap(bitmap);
计算图片压缩比方法
/**
* 计算压缩值
* @param options
* @param reqWidth
* @param reqHeight
* @return
*/
public int calculateInSampleSize(BitmapFactory.Options options,int reqWidth,int reqHeight){
int width=options.outWidth;
int height=options.outHeight;
int inSampleSize=1;
if(width>reqWidth||height>reqHeight){
inSampleSize++;
int widthRatio=reqWidth/width;
int heightRatio=reqHeight/height;
int ratio=Math.min(widthRatio,heightRatio);
while(ratio>inSampleSize){
inSampleSize*=2;
} }
return inSampleSize;
}
Bitmap类、BitmapFactory及BitmapFactory类中的常用方法的更多相关文章
- Bitmap、BitmapDrawable、BitmapFactory、Matrix类之间的关系
1.BitmapFactory是一个工具类 Bitmap实现在android.graphics包中.但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化.这必然是 某个辅助类 ...
- 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- Java动态加载类在功能模块开发中的作用
Java中我们一般会使用new关键字实例化对象然后调用该对象所属类提供的方法来实现相应的功能,比如我们现在有个主类叫Web类这个类中能实现各种方法,比如用户注册.发送邮件等功能,代码如下: /* * ...
- c++中的类的对象与类的指针
以上内容来自:http://wenku.baidu.com/link?url=haeRBhswlEcqddk48uW8YVMsdFNWsllimn_dzUYchb6G9NdT4pqgluCpnLQId ...
- Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键 批量修改文件名等
http://blog.sina.com.cn/s/blog_62e7fe670101dg9d.html linux下二进制文件查找: strings 0000.ts | grep -o " ...
- C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)
4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...
- 【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法
现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. ...
随机推荐
- laravel中有条件使用where
在项目开发的过程中;有时候会有多个参数 去用在where查询中;那么这里的where语句是可能有也可能没有的 1.用原生的mysql语句来实现 private function getData($ty ...
- Vue.js:教程
ylbtech-Vue.js:教程 1.返回顶部 1. Vue.js 教程 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向 ...
- 1048 Find Coins
题意:略 思路:two pointers思想,简单 先对数字序列进行排序,然后定义两个指针left和right,初始状态low=0,high=n-1.当a[low]+a[high] > M时,h ...
- C#一个判断子串在父串中出现的次数
/// <summary> /// 计算字符串中子串出现的次数 /// </summary> /// <param name=”str”>字符串</param ...
- Python——Dict
Python字典(Dictionary) 字典是一种可变容器模型,可存储任意类型对象. 字典的每个键值(key => value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花 ...
- Flask之自定义模型类
4.3自定义模型类 定义模型 模型表示程序使用的数据实体,在Flask-SQLAlchemy中,模型一般是Python类,继承自db.Model,db是SQLAlchemy类的实例,代表程序使用的数据 ...
- Delphi Help
http://docwiki.embarcadero.com/CodeExamples/Seattle/en/Category:Content_by_Version
- HashMap与ConcurrentHashMap的区别(转)
从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心. 在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从 ...
- Clean小程序(控件消息)
一 . 准备工作 创建一个基于对话框的MFC项目 删除对话框上的工具 二 . 实现将seven图片贴到上面,按一下则换一张图片 1.在资源视图中添加位图资源,通过属性修改图片ID 2.将对话框拉长,防 ...
- Hadoop之HDFS(三)HDFS的JAVA API操作
HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...