`

Drawable、Bitmap、Canvas和Paint的关系以及部分使用方法【转】

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

1.Drawable -> Bitmap
  ((BitmapDrawable)res.getDrawable(R.drawable.youricon)).getBitmap();

2.Bitmap -> Drawable
  Drawable d = new BitmapDrawable(bitmap);

3.从资源中获取Bitmap

a.通过decodeResource,这种方式不可取,

   因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

Resources res=getResources();  
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic); 

b.通过BitmapFactory.decodeStream方法,创建出一个bitmap

   InputStream is = context.getResources().openRawResource(R.drawable.app_sample_code);
   Bitmap bmp = BitmapFactory.decodeStream(is);

4.Bitmap → byte[]

   1. private byte[] Bitmap2Bytes(Bitmap bm){  
   2.     ByteArrayOutputStream baos = new ByteArrayOutputStream();    
   3.     bm.compress(Bitmap.CompressFormat.PNG, 100, baos);    
   4.     return baos.toByteArray();  
   5.    } 

5.byte[] → Bitmap

   1. private Bitmap Bytes2Bimap(byte[] b){  
   2.             if(b.length!=0){  
   3.                 return BitmapFactory.decodeByteArray(b, 0, b.length);  
   4.             }  
   5.             else {  
   6.                 return null;  
   7.             }  
   8.       } 
分享到:
评论

相关推荐

    android 画图 bitmap drawable canvas paint

    在Android平台上,绘制图形是一项基本任务,涉及到多个关键类,如Bitmap、Drawable和Canvas,以及Paint。这些类共同构成了Android图形系统的核心,使得开发者能够创建丰富的用户界面和自定义视图。 首先,Bitmap是...

    Android中区别Drawable Bitmap Canvas Paint

    很多网友刚刚开始学习Android平台,对于Drawable、Bitmap、Canvas和Paint它们之间的概念不是很清楚,其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap、Canvas相关的都有所变化。...

    Android Drawable、Bitmap、byte、灰度 转换

    在Android开发中,图片资源的处理是常见的需求之一,涉及到多种数据类型之间的转换,包括`Drawable`、`Bitmap`、`byte[]`等。本文将详细介绍这些类型之间的转换方法,以及如何实现灰度图像的转换。 ### 1. `...

    Android Drawable、Bitmap、byte、灰度 之间的转换

    在Android开发中,图片资源的处理是常见的需求之一,尤其涉及到不同格式间的转换,如Drawable、Bitmap、byte数组以及灰度图像的转换。这些转换在实际应用中具有重要意义,不仅能够优化内存使用,还能实现图像的高效...

    canvas、paint绘图

    在Android开发中,Canvas和Paint是两个至关重要的类,它们为开发者提供了丰富的图形绘制功能,使得我们可以自由地在屏幕上绘制各种形状、线条、文本以及图片。这篇文章将深入探讨Canvas和Paint在Android中的应用,...

    文字转换成Drawable

    在Bitmap上创建一个新的Canvas对象,然后使用Paint设置文字的样式,调用canvas.drawText()方法绘制文字到Bitmap上。 4. **颜色和样式**:使用Paint类可以设置文字的颜色、字体、大小、粗细、对齐方式等。例如,...

    Bitmap画圆形图片

    综上所述,实现Bitmap画圆形图片的关键在于自定义绘制逻辑,利用Canvas和Paint的特性。通过这种方式,不仅可以创建出美观的圆形头像效果,还可以根据需求进行更多的图形定制。在实际开发中,要兼顾性能和用户体验,...

    android bitMap

    首先创建一个新的`Bitmap` 和一个`Canvas`,然后定义一个圆形的边界,使用`drawRoundRect()` 方法绘制一个圆角矩形。接着通过`PorterDuffXfermode` 设置混合模式为`SRC_IN`,并使用`drawBitmap()` 方法将原`Bitmap` ...

    自定义Drawable实现圆形图片

    在`onDraw()`方法中,我们将利用`Canvas`的`drawCircle()`方法绘制圆形,并使用图片的中心点作为圆心,图片的宽度或高度(两者最小值)作为半径。以下是一个简单的实现: ```java public class CircleDrawable ...

    android Bitmap用法总结

    - 获取圆角Bitmap:`getRoundedCornerBitmap`方法利用Canvas和Paint创建圆角效果。 - 生成带倒影的Bitmap:`createReflectionImageWithOrigin`方法通过复制和翻转Bitmap并添加渐变效果实现。 以上就是Android中...

    android中的drawable集合

    在Android开发中,Drawable是图形和图像处理的重要组成部分,它是一种可以绘制到Canvas上的对象,广泛用于界面元素的装饰和状态表示。以下是对Android中drawable集合的详细解释: 1. **Bitmap Drawable**: Bitmap ...

    代码实现drawable的selector效果

    在本示例中,我们将探讨如何通过代码实现Drawable的Selector效果,以及如何处理圆形和圆角图片。 首先,Selector通常在XML中定义,但有时为了程序的动态性或避免为每个控件重复编写XML,我们可以用Java代码来创建。...

    Android Bitmap使用demo

    本文将深入探讨Bitmap的使用,包括如何创建和编辑Bitmap,以及如何调整Bitmap的明度、亮度和RGB色相。 首先,让我们了解Bitmap的创建方式。在Android中,Bitmap可以通过几种不同的途径来创建: 1. **从资源加载**:...

    android 使用canvas把矩形图片变成圆角矩形显示

    这通常涉及到自定义View或者ImageView的使用,以及Canvas的绘图技术。下面我们将详细探讨如何实现这个功能。 首先,我们要了解Android的Canvas。Canvas是Android系统提供的一个用于绘制2D图形的对象,它可以对...

    Android编程中图片特效处理方法小结

    接着,使用Canvas将`Drawable`绘制到`Bitmap`上。 接下来是图片的缩放操作。Android提供了`Matrix`类来处理图像变换,包括缩放。以下是一个简单的缩放示例: ```java public static Bitmap zoomBitmap(Bitmap ...

    Android实现图片叠加效果的两种方法

    在使用Canvas绘制图片时,为了避免“Immutable bitmap passed to Canvas constructor”错误,我们需要确保使用的Bitmap是可以修改的,因此在解码资源时,我们使用了.copy()方法创建了一个可变的Bitmap副本。...

    安卓Android源码——截图,圆形,Canvas.zip

    在这个方法中,我们使用`canvas.drawCircle`和`PorterDuff.Mode.SRC_IN`来裁剪Bitmap为圆形。 ```java public class CircleImageView extends AppCompatImageView { @Override protected void onDraw(Canvas ...

    Android 在Canvas指定区域绘制图片

    在Android开发中,Canvas是图形绘制的核心工具,它允许开发者在Bitmap或Surface上进行各种复杂的图形操作,包括绘制文本、线条、形状以及图片等。本篇文章将深入探讨如何在Canvas的指定区域内绘制图片,这对于创建...

    很多项目中用到了用户头像,但是系统的ImageView 是四方形的 , 把bitmap处理成圆角的

    总结来说,Android中处理Bitmap成为圆角图像的方法多样,包括自定义View、使用第三方库、BitmapShader以及BitmapOptions和Matrix等。开发者可以根据项目需求选择合适的方法,以达到美观且高效的用户体验。在提供的...

Global site tag (gtag.js) - Google Analytics