1.BitmapFactory是一个工具类

Bitmap实现在android.graphics包中。但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化。这必然是 某个辅助类提供了创建Bitmap的接口,而这个类的实现通过JNI接口来实例化Bitmap的,这个类就是BitmapFactory。BitmapFactory提供了大量的方法,从不同的数据源来解析、创建Bitmap对象。

方法:

decodeByteArray(byte[] data,int offset,int length)
//从指定字节数据的offset位置开始,将长度为length的字节数据解析成Bitmap对象
decideFile(String pathName)
//从指定文件中解析、创建Bitmap对象
decodeFileDescriptor(FileDescriptor fd) FielDescriptor类不知道干什么用的
//用于从FileDescriptor对应的文件中解析、创建Bitmap
decodeResource(Resources res,int id) //Resources res = getAcitivty().getResouces();即可
//用于根据给定的资源ID从指定资源中解析、创建Bitmap对象。
decodeStream(InputStream is
//用于从指定流中机械、创建对象 总结:常用创建Bitmap的方法①系统Resource②文件地址③特定流

在使用方法decodeFile()/decodeResource()时,都可以指定一个BitmapFacotry.Options
 

  • inPreferredConfig 指定decode到内存中,手机中所采用的编码,可选值定义在Bitmap.Config中。缺省值是ARGB_8888。
  • inJustDecodeBounds 如果设置为true,则返回图片的基本信息(宽,高),从Options.outWidth和Options.outHeight获取宽高而不返回Bitmap对象。如想得到Bitmap对象就需要再设置为false。
  • inSampleSize 设置decode时的缩放比例。

作用:解决加载大图产生OOM(out of memory)                     OOM:内存不足

解决方法:http://deep-fish.iteye.com/blog/2021016

2.Bitmap类

Bitmap代表了一个原始的位图,并且可以对位图进行一系列的变换操作。

第一个方法是最终的实现,后两种只是对第一种方法的封装。

第二个方法可以从源Bitmap中指定区域(x,y, width, height)中挖出一块来实现剪切;

第三个方法可以把源Bitmap缩放为dstWidth x dstHeight的Bitmap。

补充:Matrix类

作用:平移变换(Translate)  旋转变换(Rotate)、  缩放变换(Scale)  错切变换(Skew)

设置Matrix的Rotate(通过setRotate())或者Scale(通过setScale()),传入第一个方法,可实现旋转或缩放。

使用:

保存图片

Bitmap.compress()方法的参数format可设置JPEG或PNG格式;quality可选择压缩质量;fOut是输出流(OutputStream),这里的FileOutputStream是OutputStream的一个子类。

使用:

3.BimtpDrawable类

继承于Drawable,你可以从文件路径、输入流、XML文件以及Bitmap中创建。

作用:以Xml方式,可以对原始的位图进行一系列的处理,比如说抗锯齿,拉伸,对齐等等。

//常用构造函数
Resources res=getResources();//获取资源
public BitmapDrawable(Resources res) //创建一个空的drawable。(Response用来指定初始时所用的像素密度)//替代public BitmapDrawable()方法(此方法不处理像素密度)
public BitmapDrawable(Resources res, Bitmap bitmap) //Create drawable from a bitmap
public BitmapDrawable(Resources res, String filepath) //Create a drawable by opening a given file path and decoding the bitmap.
public BitmapDrawable(Resources res, java.io.InputStream is) //Create a drawable by decoding a bitmap from the given input stream.

Bimtap与BitmapDrawable的区别:

一个Bitmap对象是一张bitmap格式image的表示(类似于Java.awt.image)。

一个Drawable对象是“那些能够在其上面图画的任意对象”,它也许是一个bitmap对象,也可能是一个solid color、一个其他Drawable对象的集合,亦或是某种结构。

包含关系。

Bimtap的使用方法:

参考资料:http://www.android100.org/html/201506/30/160242.html

http://blog.sina.com.cn/s/blog_5a6f39cf0101aqsw.html

Bitmap、BitmapDrawable、BitmapFactory、Matrix类之间的关系的更多相关文章

  1. Java 中类与类之间的关系

    在java中类和类之间的关系基本上有依赖.关联.聚合.组合等 一.继承关系     继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在J ...

  2. 从零开始学C++之RTTI、dynamic_cast、typeid、类与类之间的关系uml

    一.RTTI Run-time type information (RTTI) is a mechanism that allows the type of an object to be deter ...

  3. oc之封装与类之间的关系

    1. 面向对象的特征-封装? 封装: 现实生活中的封装: 将很多的小东西 塞在1个大口袋里面. 好处: a. 对外部屏蔽. b. 方便管理. 代码的封装: 函数/方法 就是1种封装的体现: 将一段代码 ...

  4. java 类与类之间的关系 及uml图

    类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(associ ...

  5. 全面解释java中StringBuilder、StringBuffer、String类之间的关系

    StringBuilder.StringBuffer.String类之间的关系 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,在上一篇博文中我 ...

  6. 【47】java的类之间的关系:泛化、依赖、关联、实现、聚合、组合

    java的类之间的关系:泛化.依赖.关联.实现.聚合.组合 泛化: • 泛化关系(Generalization)也就是继承关系,也称为"is-a-kind-of"关系,泛化关系用于 ...

  7. python之路--类与类之间的关系

    类和类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻 ...

  8. Day18--Python--面向对象--类与类之间的关系

    1. 依赖关系 在方法中引入另一个类的对象 (最不紧密的一种关系) 依赖关系都是把另一个对象当做参数 class Elephant: def __init__(self, name): self.na ...

  9. UML类图及类与类之间的关系

    原文地址:http://www.uml.org.cn/oobject/201211231.asp 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的 ...

随机推荐

  1. stuts1:(Struts)Action类及其相关类

    org.apache.struts.action.Action类是Struts的心脏,也是客户请求和业务操作间的桥梁.每个Action类通常设计为代替客户完成某种操作.一旦正确的Action实例确定, ...

  2. HDU 2157 - How many ways??

    给图,图中任意可达的两点间步数为1 问从图中A点走到B点步数为k的有几条路 祭出离散数学图论那章中的 邻接矩阵A. 设S=Ak 则 S[a][b] 为 a到b,步数为k的不同路的条数 剩下的就是矩阵快 ...

  3. linux学习笔记之套接字

    一.基础知识. 1:套接字基础. 1,是通信端点的抽象. 2,在UNIX类系统中被当作是一种文件描述符. 3,套接字通信域. 域 描述 AF_INET IPV4因特网域 AF_INET6 IPV6因特 ...

  4. 前端-mate讲解

    <meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标签位于文档的头部,不包含任何内容. & ...

  5. [转]Linux下转换字符集(UTF8转换)

    今天在Linux 下使用 Iconv 命令转换一个UTF8文件时,总是转换不成功.提示: iconv: 未知 0 处的非法输入序列 后来使用 man iconv 查看,还是没发现异常,因为命令格式都是 ...

  6. 像素转换问题-队列解决办法(或者dfs)

    在一定大小的像素图像中,将同色区域的颜色值替换为其他颜色值,从而产生新的图像,输入数据,图像大小,指定的像素点坐标,要替换成的颜色. 一开始出队操作写错了折腾半天,当队列中只有一个元素是出队后要将队首 ...

  7. python 数据类型之数float

    1.float 对象有一个重要的方法is_intger.如果这个float对应在转化为int时不会有精度的丢失就返回True,不然就返回False #!/usr/bin/python #!coding ...

  8. SQL Server 备份的 8 种方法。

    方法 1. 完整备份 方法 2. 差异备份 方法 3. 部分备份(备份数据库的read_write部分) 方法 4. 文件备份 方法 5. 文件组备份 方法 6. 只复制备份 方法 7. 日志备份 - ...

  9. MySQL load data infile

    语法: load data [low_priority] [local] infile ‘file_path' [replace] [ignore] into table table_name [(c ...

  10. Python学习 常识+基础基础

    特点: 优雅,明确,简单 领域: web网站   网络服务   系统工具和脚本 跨平台 对缩进要求严格 注释:# 动态语言:变量本身类型不固定 raw字符串与 多行字符串 raw字符串: 不需要转义字 ...