Android中区别Drawable Bitmap Canvas Paint

 更新时间:2016年07月14日 10:23:13   投稿:lqh  
本文主要介绍Android中Drawable Bitmap Canvas Paint 之间的区别,这里对这几个概念做出详细介绍,开发Android游戏的朋友可以参考下

1.概念区别:

很多网友刚刚开始学习Android平台,对于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(); 

 以上就是对 Android 中 Drawable Bitmap Canvas Paint 之间的区别,Android开发者涉及此模块的同学可以参考下。

相关文章

  • Android带清除按钮、密码可见小眼睛的输入框

    Android带清除按钮、密码可见小眼睛的输入框

    这篇文章主要介绍了Android带清除按钮、密码可见小眼睛的输入框,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Gradle属性设置及环境变量全面教程

    Gradle属性设置及环境变量全面教程

    这篇文章主要为大家介绍了Gradle属性设置及环境变量的全面教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决

    Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决

    这篇文章主要介绍了Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Android创建Menu菜单实例

    Android创建Menu菜单实例

    这篇文章主要介绍了Android创建Menu菜单实例,讲述了Android菜单项的创建方法,在Android应用程序开发中非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • Android一行代码实现圆形头像

    Android一行代码实现圆形头像

    本篇文章主要介绍了Android一行代码实现圆形头像的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • 简述Android中实现APP文本内容的分享发送与接收方法

    简述Android中实现APP文本内容的分享发送与接收方法

    本篇文章主要对Android中实现APP文本内容的分享发送与接收方法进行介绍,相信对大家学习会有很好的帮助,需要的朋友一起来看下吧
    2016-12-12
  • Android 权限(permission)整理

    Android 权限(permission)整理

    本文主要介绍Android 权限的整理,在开发Android应用的时候,根据需求的不同,会用到不同的权限,这里整理了很多,有需要的同学可以参考下
    2016-07-07
  • 谈谈Android Fragments 详细使用

    谈谈Android Fragments 详细使用

    本篇文章主要介绍了Android Fragments 详细使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • okhttp3.4.1+retrofit2.1.0实现离线缓存的示例

    okhttp3.4.1+retrofit2.1.0实现离线缓存的示例

    本篇文章主要介绍了okhttp3.4.1+retrofit2.1.0实现离线缓存的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Android学习教程之滑动布局(14)

    Android学习教程之滑动布局(14)

    这篇文章主要为大家详细介绍了Android学习教程之滑动布局使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11

最新评论