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.public static Bitmap decodeByteArray (byte[] data, int offset, int length, 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. public static Bitmap decodeFile (String pathName)
参数
pathName    解码文件的全路径名
返回值
    返回结果是解码的位图,或者如果不能解码则返回空。
从文件中解码生成一个位图。如果支付的文件名为空,或者不能解码出一个位图,方法将返回空。
4. public static Bitmap decodeFile (String pathName, BitmapFactory.Options opts)
参数
pathName    解码文件的全路径名
opts            可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小
Returns
    返回解码后的位图,或者如果图像数据不能被解码返回为空,或者 如果选项不是空,如果选项要求仅仅返回大小(opts.outWidth and opts.outHeight)。
从文件中解码生成一个位图。如果支付的文件名为空,或者不能解码出一个位图,方法将返回空。
5. public static Bitmap decodeFileDescriptor (FileDescriptor fd)
参数
fd  包含解码位图数据的文件路径
返回值
   返回解码的位图或者空。
6. public static Bitmap 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. public static Bitmap decodeResource (Resources res, int id, BitmapFactory.Options opts)
参数
res     包含图像数据的资源对象
id  图像数据的资源的id
opts    可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小
返回值
8. public static Bitmap decodeResourceStream (Resources res, TypedValue value, InputStream is, Rect pad, BitmapFactory.Options opts)
从输入流中解码一个新位图。输入了获得资源,我们可以缩放位图。
9. public static Bitmap decodeResource (Resources res, int id)
参数
res         包含图像数据的资源对象
id      图像数据的资源的id
返回值
    返回解码后的位图,或者如果图像数据不能被解码返回为空
从输入流中解码位图。与decodeResource(Resources, int, android.graphics.BitmapFactory.Options)当Options是空时同义,
10. public static Bitmap decodeResource (Resources res, int id, BitmapFactory.Options opts)
参数
res     包含图像数据的资源对象
id  图像数据的资源的id
opts    可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小
返回值
   返回解码后的位图,或者如果图像数据不能被解码返回为空,或者 如果选项不是空,如果选项要求仅仅返回大小(opts.outWidth and opts.outHeight)。
从资源中解码一个位图。与decodeResourceStream(Resources, TypedValue, InputStream, Rect, BitmapFactory.Options)同义.
11. public static Bitmap decodeStream (InputStream is, Rect outPadding, BitmapFactory.Options opts)
参数
is          持有原始数据用于解码位图的输入流
outPadding  如果不为空,返回矩形的内边距如果位图存在,否则设置内边距为(-1,-1,-1,-1).如果没有位图返回空,内边距不改变
opts            可以为空,控制采样率和实付图像完全被解码的选项,或者仅仅返回大小
Returns
    返回解码后的位图,或者如果图像数据不能被解码返回为空,或者 如果选项不是空,如果选项要求仅仅返回大小(opts.outWidth and opts.outHeight)。
从输入流中解码一个位图。如果输入了为空,或者不能解码位图,方法返回空。流的位置觉得解码数据从哪儿读取。
12. public static Bitmap decodeStream (InputStream is)
Decode an input stream into a bitmap. If the input stream is null, or cannot be used to decode a bitmap, the function returns null. 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类中的常用方法的更多相关文章

  1. Bitmap、BitmapDrawable、BitmapFactory、Matrix类之间的关系

    1.BitmapFactory是一个工具类 Bitmap实现在android.graphics包中.但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化.这必然是 某个辅助类 ...

  2. 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。

    创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...

  3. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  4. 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能

    编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...

  5. Java动态加载类在功能模块开发中的作用

    Java中我们一般会使用new关键字实例化对象然后调用该对象所属类提供的方法来实现相应的功能,比如我们现在有个主类叫Web类这个类中能实现各种方法,比如用户注册.发送邮件等功能,代码如下: /* * ...

  6. c++中的类的对象与类的指针

    以上内容来自:http://wenku.baidu.com/link?url=haeRBhswlEcqddk48uW8YVMsdFNWsllimn_dzUYchb6G9NdT4pqgluCpnLQId ...

  7. Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键 批量修改文件名等

    http://blog.sina.com.cn/s/blog_62e7fe670101dg9d.html linux下二进制文件查找: strings 0000.ts | grep -o " ...

  8. C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)

    4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...

  9. 【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法

    现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. ...

随机推荐

  1. ADO连接ACCESS数据库

    首先在StdAfx.h中加入 建立连接:(在xxApp文件中) 1  声明变量 2 建立连接 (1) AfxOleInit 初始化 OLE 为应用程序的支持. BOOL AFXAPI AfxOleIn ...

  2. go基本数据类型与运算符

    GO基本类型1.布尔(bool) 长度:1字节 取值范围:true,false 注意事项:不可用数字代表true或false2.整型(int/uint) 根据平台 肯能为32位或64位3. 8位整型: ...

  3. [转载]amba_device使用分析

    什么是AMBA? ---AMBA是一个片内总线规范. ARM官网的介绍:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0 ...

  4. 杂项:UN-标准通用置标语言

    ylbtech-杂项:标准通用置标语言 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部 ...

  5. python开发模块基础:os&sys

    一,os模块 os模块是与操作系统交互的一个接口 #!/usr/bin/env python #_*_coding:utf-8_*_ ''' os.walk() 显示目录下所有文件和子目录以元祖的形式 ...

  6. 进程句柄和进程ID的区别和关系

    进程和进程句柄和进程id含义 进程是一个正在运行的程序,进程里可以包括多个模块(DLL,OCX,等)进程句柄是程序访问时用到的东西,当前进程句柄等于主模块的句柄,当你使用OpenProcess时的进程 ...

  7. Py修行路 python基础 (十七)property 静态方法 类方法

    一.property 属性 特性 (装饰器是可调用对象,被装饰对象也是可调用对象)   1.在类内函数属性上添加一个@property,就会对函数属性进行伪装. import math class C ...

  8. linux中内存使用,swap,cache,buffer的含义总结

    首先介绍一下linux中内存是如何使用的.当有应用需要读写磁盘数据时,由系统把相关数据从磁盘读取到内存,如果物理内存不够,则把内存中的部分数据导入到磁盘,从而把磁盘的部分空间当作虚拟内存来使用,也称为 ...

  9. c#6.0特性

    (1)可以直接对自动属性初始化,而且允许非标准属性使用 例如: public string Gender{get;}="男";//非标准属性 public DateTime Bir ...

  10. XML文件中“>”和“<”的转码

    在xml文件中,大于号“>”和小于号“<”是不能被直接识别的,需要经过转码才可以被识别,转码后的格式如下: < < 小于 > > 大于