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. java代码求奖金。要求从键盘输入利润

    总结:看似文字描述很多, package com.ai; import java.util.Scanner; import com.b.Scaner; //v企业发放的奖金根据利润提成.利润(I)低于 ...

  2. HDU 1166 敌兵布阵 树状数组小结(更新)

    树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...

  3. php代码中临时开启错误调试

    对php.ini 中参数的设置 也可用在php代码中完成. 调用:调用ini_set()函数 //开启php.ini中的display_errors指令 ini_set('display_errors ...

  4. php根据年月获取当月天数。

    function get_day( $date ) { $tem = explode('-' , $date); //切割日期 得到年份和月份 $year = $tem['0']; $month = ...

  5. Idea 如何设置微软雅黑等其它字体

    使用过idea的同学都知道,idea的功能相对于explise来说,功能太强大了啊~个人感觉,idea真心挺智能的.但是,这里有一个小瑕疵,就是能够设置的字体,有限! 对于用惯了 微软雅黑 字体的人, ...

  6. [置顶] TIM_GetCounter与TIM_GetCapture1的区别

    /** * @brief Gets the TIMx Input Capture 1 value. * @param TIMx: where x can be 1 to 17 except 6 and ...

  7. VS加载项目时报错 尚未配置为Web项目XXXX指定的本地IIS

    网上找的几个方法都不行 最后自己解决了.首先打开该项目得csproj文件,找到<ProjectExtensions>这个标签,是在最后部分,然后把<UseIIS>True< ...

  8. 解析Java反射 - invoke方法

    最近工作中涉及到获取同程火车票,大概描述为:将本地获取的发出城市,目的城市及出发时间按固定格式封装,调用接口获取可乘坐座席等级最高的火车票,接口返回数据用包含三层类封装的类接受,接受的类总共为四层,倒 ...

  9. linux 修改openfiles

    使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数. 新装的linux默认只有1024,当作负载较大的服务器时,很容易遇到error: too ...

  10. 生成ssl脚本文件

    read -p "Enter your domain [www.example.com]: " DOMAIN echo "Create server key...&quo ...