从asset文件夹中读取Bitmap

     //从asset文件夹中取文件
private Bitmap getImageFromAssetFile(String fileName){ Bitmap image = null;
try{
AssetManager am = this.getContext().getAssets();
InputStream is = am.open(fileName);
image = BitmapFactory.decodeStream(is);
is.close();
}catch(Exception e){ }
return image;
}

1.概念区别:

Drawable、Bitmap、Canvas和Paint除了Drawable外,其余三个早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap、Canvas相关的都有所变化。

首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口。

Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。

Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。

Canvas - 名为画布,我们可以看作是一种处理过程,使用各种方法来管理Bitmap、GL或者Path路径,同时它可以配合Matrix矩阵类给图像做旋转、缩放等操作,同时Canvas类还提供了裁剪、选取等操作。

Paint - 我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。

如果涉及一些Android游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应用。

2.转换方法:
1)Bitmap 转化为 byte
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
byte[] array= out.toByteArray();

2)byte转化为bitmap

final ContentResolver contentResolver = context.getContentResolver();
final PackageManager manager = context.getPackageManager();
final Cursor c = contentResolver.query(uri, null, null, null, null);
final int icon3DIndex = c.getColumnIndexOrThrow(ColumnName);
byte[] data = c.getBlob(icon3DIndex);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

3)bitmap 转换 drawable

Bitmap bitmap = new Bitmap(...); Drawable drawable = new BitmapDrawable(bitmap);
//Drawable drawable = new FastBitmapDrawable(bitmap);

4)Drawable to Bitmap

a. BitmapDrawable, FastBitmapDrawable直接用getBitmap
 b. 其他类型的Drawable用Canvas画到一个bitmap上
      Canvas canvas = new Canvas(bitmap)
      drawable.draw(canvas);

Drawable d = ImagesList.get(0);

Bitmap bitmap =  ((BitmapDrawable)d).getBitmap();

最新文章

  1. Servlet过滤器
  2. Fragment配合RadioGroup实现点击切换布局
  3. Maven总结
  4. 二进制mysql5.7.16下载地址
  5. BI先特技软件 Analyzer安装时的部分问题
  6. java高薪之路__010_设计模式
  7. 第一个jsp代码实现简单计算器
  8. 解决Ubuntu下内存不足---作为Slave的虚拟机
  9. LR中错误代号为27796的解决方法
  10. 【转】win7与VMware ubuntu虚拟机实现文件共享(最后一定要装open-vm-dkms插件)
  11. C语言学习笔记--指针与字符串
  12. 高性能 Socket 组件 HP-Socket v3.2.1-RC2 公布
  13. .Net编译运行原理
  14. Servlet实现后台分页查询
  15. Tree 和ls 的使用
  16. 创建多线程的方式:继承Thread类和实现Runnable接口
  17. Ubuntu14.04+ROS 启动本地摄像头
  18. Web QQ 协议 登录加密算法 —— VC++实现
  19. 微信小程序--swiper组件
  20. Eclipse导入项目时出错提示 project is missing required library

热门文章

  1. docker安装 之 ---CentOS 7 系统脚本自动安装
  2. http协议学习系列(一个博文链接)
  3. 【VS外接程序】利用T4模板生成模块代码
  4. java学习笔记 --- 多线程(线程安全问题——同步代码块)
  5. 轮廓Outline|表格Table实例
  6. GCD多线程的使用
  7. loj #161 子集卷积
  8. C#异步编程(四)混合模式线程同步
  9. C++语言对C的增强(2)—— const增强、枚举的增强
  10. ubuntu 挂载exfat