Drawable.Bitmap.Canvas.Paint.Matrix

由于对Drawable、Bitmap、Canvas、Paint和 Matrix

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

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

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

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

Paint – 可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。 如果涉及一些Android游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应用。

1. Drawable to–> Bitmap

BitmapDrawable 继承自 Drawable

//方法一    
Resources res;    
InputStream is=res.openRawResource(R.drawable.pic);    
BitmapDrawable bitmapDrawable=new BitmapDrawable(is);    
Bitmap bmp=bitmapDrawable.getBitmap();    

//方法二    
Resources res;    
BitmapDrawable bitmapDrawable=(BitmapDrawable)res.getDrawable(R.drawable.pic);    
Bitmap bmp=bitmapDrawable.getBitmap();    

//方法三    
ImageView image;    
image.setImageBitmap(BitmapFactory.decodeStream(~~~~));    
BitmapDrawable bitmapDrawable=(BitmapDrawable)image.getDrawable();    
Bitmap bmp=bitmapDrawable.getBitmap();  

2. Bitmap to–> Drawable

Drawable d = new BitmapDrawable(bitmap);

3. 从资源中获取Bitmap

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

Resources res=getResources();  
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);  
② 通过BitmapFactory.decodeStream方法,创建出一个bitmap (推荐)
InputStream is = context.getResources().openRawResource(R.drawable.app_sample_code);  
Bitmap bmp = BitmapFactory.decodeStream(is);  

4. Bitmap to–> byte[]

private byte[] Bitmap2Bytes(Bitmap bm){     
    ByteArrayOutputStream byteos = new ByteArrayOutputStream();       
    bm.compress(Bitmap.CompressFormat.PNG, 100, byteos);       
    return byteos.toByteArray();     
}  

5. byte[] to–> Bitmap

private Bitmap Bytes2Bimap(byte[] byte){     
    if(byte.length!=0){     
        return BitmapFactory.decodeByteArray(byte, 0, byte.length);     
       }     
    else {     
        return null;     
    }     
 }  

6. Matrix

Matrix为矩阵的意思,一般用来与Bitmap配合,实现图像的缩放、变形、扭曲等操作。

public static Bitmap scaleBitmap(Bitmap bitmap, int scalWidth, int scaleHeight) {      
    int w = bitmap.getWidth();      
    int h = bitmap.getHeight();      
    // 创建操作图片用的Matrix对象      
    Matrix matrix = new Matrix();      
    // 计算缩放比例      
    float sx= ((float) scaleWidth / w);      
    float sy= ((float) scaleHeight / h);      
    // 设置缩放比例      
    matrix.postScale(sx, sy);      
    // 建立新的bitmap,其内容是对原bitmap的缩放后的图     
    Bitmap scaleBmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);      
    return scaleBmp;      
}

Matrix类的其他典型方法。

boolean  postScale(float sx, float sy)//缩放    
boolean     postSkew(float kx, float ky)//扭曲    
boolean     postTranslate(float dx, float dy)//转换    
boolean     preConcat(Matrix other)//合并    
boolean     preRotate(float degrees)//旋转

原文链接地址

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android知识点总结

2-VIII--ViewPager滑动监听与自定义滑动特效

1301
来自专栏Android知识点总结

2--安卓多媒体之Bitmap操作全解析

992
来自专栏Android点滴积累

Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

  一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景。但是,也肯...

1260
来自专栏Android点滴积累

Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 c...

3547
来自专栏李蔚蓬的专栏

实战 | 使用揭露动画(Reveal Effect)做一个丝滑的Activity转场动画

最近跟几个小伙伴在实践一个项目,考虑到界面效果,我们决定使用揭露动画作为Activity的转场动画。

2913
来自专栏林冠宏的技术文章

android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。

我们直接入主题。所有问题例子请参照下图 ? 1,怎样使图片具有点击事件? 答:      解决方法:      在你的BaseAdapter里面不要设置下面这三...

2515
来自专栏移动开发

利用 CollapsingToolbarLayout 完成联动的动画效果

最初的想法是自己去利用 Android 的嵌套滚动机制,去实现上面的嵌套滚动效果.但最后为了开发效率直接利用了 CollapsingToolbarLayout...

1341
来自专栏Android小菜鸡

巧妙运用补间动画,自定义广告轮播CarouselView 2.0

  这是前一篇文章绘制的CarouselView的升级版,有兴趣的同学,可以去关注一下笔者前一篇文章。自定义广告图片轮播View——CarouselView

1262
来自专栏开发之途

Android 仿360悬浮球与加速球

5378
来自专栏Android知识点总结

D3-Android 自定义控件绘图之柱状图

2522

扫码关注云+社区

领取腾讯云代金券