`
bolutes
  • 浏览: 866457 次
文章分类
社区版块
存档分类
最新评论

Android Drawable、Bitmap、Canvas和Paint的区别

 
阅读更多

很多朋友刚刚开始学习Android平台,对于Drawable、Bitmap、Canvas和Paint它们之间的概念不是很清楚,其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap、Canvas相关的都有所变化。 首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口。
Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB8888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。
Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。
Canvas - 名为画布,我们可以看作是一种处理过程,使用各种方法来管理Bitmap、GL或者Path路径,同时它可以配合Matrix矩阵类给图像做旋转、缩放等操作,同时Canvas类还提供了裁剪、选取等操作。
Paint - 我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。
如果涉及一些Android游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应用。


转换方法:

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 画图 bitmap drawable canvas paint

    android 画图 bitmap drawable canvas paint

    Android中区别Drawable Bitmap Canvas Paint

    本文主要介绍Android中Drawable Bitmap Canvas Paint 之间的区别,这里对这几个概念做出详细介绍,开发Android游戏的朋友可以参考下

    android Bitmap用法总结

    canvas.drawBitmap(bitmap, rect, rect, paint); return output; } //获得带倒影的图片方法 public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){ final int reflectionGap = 4; int width = ...

    APP开发教程 Java Android移动端开发 4、Android UI进阶编程 (1) 共34页.pptx

    Android Drawable 概述 Bitmap & .9.png Shape XML StateListDrawable Android图形编程 类简介 Canvas Paint Typeface

    安卓学习知识精华

    大牛成长之路: 1. android单实例运行方法 2. px像素如何转为dip设备独立像素 3. Android中动态改变ImageView大小 4. 如何判断Android手机当前是否联网?...5. Drawable、Bitmap、Canvas和Paint的关系 ...

    Android中Glide加载圆形图片和圆角图片实例代码

    一、简介: 介绍两种使用 BitmapTransformation 来实现 Glide 加载圆形图片... 使用 Canvas 和 Paint 来绘制 使用 Android.support.v4.graphics.drawable.RoundedBitmapDrawable 实现圆形图片: /** * * Glide 圆

    炫舞吧 android 游戏开发

    // []{R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,R.drawable.f,R.drawable.g,R.drawable.h,R.drawable.i,R.drawable.j},true); // mAnimation = new Animation(mContext,new int // []{...

    自定义dialog

    import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; /** 作者: 时间:2015年11月11日下午5:57:03 修改人: 类描述: 版本: 修改地址:*/ public ...

    Android-eBook翻书效果源码

    private void drawCurrentPageArea(Canvas canvas, Bitmap bitmap, Path path) { mPath0.reset(); mPath0.moveTo(mBezierStart1.x, mBezierStart1.y); mPath0.quadTo(mBezierControl1.x, mBezierControl1.y, ...

    Android画图学习笔记

    Android画图学习笔记。针对android中的画图中需要的一些类进行介绍,例如Bitmap, Paint, Drawable, Animation等。

    疯狂Android讲义源码

     7.1.2 Bitmap和BitmapFactory 260  7.2 绘图 263  7.2.1 Android绘图基础:Canvas、  Paint等 263  7.2.2 Path类 267  7.2.3 绘制游戏动画 270  7.3 图形特效处理 278  7.3.1 使用Matrix控制变换 278  ...

    Android实例代码

    第8章、Android的数据存储和IO 8.1、使用SharedPreferences:SharedPreferences; Editor; 8.2、File存储:openFileOutput和openFileInput; 读写SD卡文件; 8.3、SQLite数据库:SQL语句; SQLiteDatabase; ...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    第8章、Android的数据存储和IO 8.1、使用SharedPreferences:SharedPreferences; Editor; 8.2、File存储:openFileOutput和openFileInput; 读写SD卡文件; 8.3、SQLite数据库:SQL语句; SQLiteDatabase; ...

    疯狂Android讲义.part2

    7.1.2 Bitmap和BitmapFactory 260 7.2 绘图 263 7.2.1 Android绘图基础:Canvas、 Paint等 263 7.2.2 Path类 267 7.2.3 绘制游戏动画 270 7.3 图形特效处理 278 7.3.1 使用Matrix控制变换 278 7.3.2 使用...

    疯狂Android讲义.part1

    7.1.2 Bitmap和BitmapFactory 260 7.2 绘图 263 7.2.1 Android绘图基础:Canvas、 Paint等 263 7.2.2 Path类 267 7.2.3 绘制游戏动画 270 7.3 图形特效处理 278 7.3.1 使用Matrix控制变换 278 7.3.2 使用...

    Android入门之画图详解

    3.Paint,与Canvas紧密联系,是”画板”上的笔刷工具,也用于设置View控件上的样式; 4.Drawable,如果说前三者是看不见地在内存中画图,那么Drawable就是把前三者绘图结果表现出来的接口。Drawable多个

    射击游戏 android

    canvas.drawBitmap(projectileBmp, p.x, p.y, paint); } projectiles.removeAll(destroyedProjectiles); // remove targets which's body had outof left bound of gameView List destroyedTargets = ...

Global site tag (gtag.js) - Google Analytics