`

Android中Drawable Bitmap Canvas Paint之间区别与转换

阅读更多
对于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游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应用。


.转换方法:


1) Bitmap 转化为 byte
引用

1 ByteArrayOutputStream out = new ByteArrayOutputStream();
2 bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
3 byte[] array= out.toByteArray();

2)byte转化为bitmap




复制代码
引用
1 final ContentResolver contentResolver = context.getContentResolver();
2 final PackageManager manager = context.getPackageManager();
3 final Cursor c = contentResolver.query(uri, null, null, null, null);
4 final int icon3DIndex = c.getColumnIndexOrThrow(ColumnName);
5 byte[] data = c.getBlob(icon3DIndex);
6 Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);


复制代码

3)bitmap 转换 drawable

引用
1 Bitmap bitmap = new Bitmap(...); Drawable drawable = new BitmapDrawable(bitmap);
2 //Drawable drawable = new FastBitmapDrawable(bitmap);


4)Drawable to Bitmap
引用
  a. BitmapDrawable, FastBitmapDrawable直接用getBitmap
  b. 其他类型的Drawable用Canvas画到一个bitmap上

1 Canvas canvas = new Canvas(bitmap)
2       drawable.draw(canvas);
3 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用法总结

    android Bitmap用法总结 Bitmap用法总结 1、Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawable....

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

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

    炫舞吧 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 // []{...

    Android画图学习笔记

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

    自定义dialog

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

    安卓学习知识精华

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

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

    一、简介: 介绍两种使用 BitmapTransformation 来实现 Glide 加载圆形图片和圆角图片的方法。... 使用 Android.support.v4.graphics.drawable.RoundedBitmapDrawable 实现圆形图片: /** * * Glide 圆

    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讲义源码

     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 使用drawBitmapMesh扭曲  图像 282  7.3.3 使用...

    Android入门之画图详解

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

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

    《疯狂Android讲义(第2版)》.(李刚).源代码 疯狂Android讲义目录结构: 第2章、Android应用程序界面设计,即View 2.2、布局管理(Layout):LinearLayout、TableLayout、FrameLayout、RelativeLayout; 2.3、基本...

    疯狂Android讲义.part2

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 ...

    疯狂Android讲义.part1

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 ...

    Android实例代码

    Bitmap、BitmapFactory; 7.2、绘图:Canvas; Paint; Path; 7.3、图形特效处理:使用Matrix控制变换; 使用drawBitmapMesh扭曲图像; 使用Shader填充图形; 7.4、逐帧(Frame)动画:AnimationDrawable; 7.5、补间...

    射击游戏 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