Android 图像绘制之Matrix 的使用

转载 2013年12月05日 13:17:11

Android 中拥有众多的图像绘制的函数,而功能最强大的就是 drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)

Android官方文档的描述为Draw the bitmap using the specified matrix.翻译成中文就是:用特定的矩阵来画图。而在其中最重要的参数就是 matrix

图片的平移:就是设定其中心位置的变换,我们可是使用这样的两个函数做到:

setTranslate(float dx, float dy)

postTranslate(float dx, float dy)

查看更多精彩图片

对于矩阵变换此处的前乘和后乘我们不做过多的介绍,我们按照一种固定的变化顺序来进行变化,故全部使用后乘来解决。即全为post开头的方法,而set开头的方法是对我们已经做过的变换进行重置。好吧,实例说明一切:

                    matrix.setTranslate(100, 100);

                    canvas.drawBitmap(bitmap,matrix,mPaint);

查看更多精彩图片

图片的旋转:同样的四个函数:

postRotate(float degrees)

postRotate(float degrees, float px, float py)

setRotate(float degrees)

setRotate(float degrees, float px, float py)

其中的pxpy是代表旋转的中心点的意思,如果不指定中心点的话,默认是(0,0)点进行旋转。

              matrix.setTranslate(100, 100);

                matrix.postRotate(90,100+bitmap.getWidth()/2,100+bitmap.getHeight()/2);

                canvas.drawBitmap(bitmap,matrix,mPaint);

查看更多精彩图片

图片的缩放:

postScale(float sx, float sy)

postScale(float sx, float sy, float px, float py)

setScale(float sx, float sy, float px, float py)

setScale(float sx, float sy)

其中的参数的情况与图片旋转的情况一样,上实例:

                  matrix.setTranslate(100, 100);

                  matrix.postRotate(90,100+bitmap.getWidth()/2,100+bitmap.getHeight()/2);

                  matrix.postScale(2,2,100+bitmap.getWidth()/2,100+bitmap.getHeight()/2);

                  canvas.drawBitmap(bitmap,matrix,mPaint);

查看更多精彩图片

图片的反转:这个情况androidAPI里面没有给我们直接写出,但是我们可以使用图片缩放的函数来实现。看实例吧:

                  matrix.setTranslate(100, 100);

                  matrix.postRotate(90,100+bitmap.getWidth()/2,100+bitmap.getHeight()/2);

                  matrix.postScale(2,2,100+bitmap.getWidth()/2,100+bitmap.getHeight()/2);

                  matrix.postScale(-1f,-1f,100+bitmap.getWidth()/2,100+bitmap.getHeight()/2);

                  canvas.drawBitmap(bitmap,matrix,mPaint);

查看更多精彩图片

基本上通过如上的变换就可以画出想要的图像了。

相关文章推荐

图形绘制之——Canvas详解(四)-Bitmap(位图)及Matrix矩阵

前面我们提到过canvas相当于画家,而bitmap相当于画布,前面博客的例子都是直接利用canvas绘制,这里我们来学习一下,利用bitmap先将图形绘制好,然后一起放到最终的canvas中^^。 ...

Android 绘图基础:Bitmap(位图)与Matrix(矩阵)实现图片5种操作(平移、旋转、错切、缩放、对称)

Android的Matrix利用数学原理实现图片平移、旋转等操作详解   很庆幸自己的线性代数学的还可以,理解Matrix的矩阵变换完全没有问题。Matrix矩阵实现图片的平移旋转等操作涉及到线性代...

Android印章图像绘制

  • 2014年05月16日 13:15
  • 1.29MB
  • 下载

要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列

要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列...

android图像绘制(四)——SurfaceView问题,自定义控件

本文地址:http://blog.csdn.net/you_and_me12/article/details/7259759 自定义控件(类似按钮等)的使用,自定义一个SurfaceView。 如...

如何使用图像绘制区域wpf

此示例演示如何使用 ImageBrush 类来绘制带有图像的区域。ImageBrush 显示由其 ImageSource 属性指定的单个图像。 源于msdn https://msdn.micros...

Python下opencv使用笔记(二)(简单几何图像绘制)

简单几何图像一般包括点、直线、矩阵、圆、椭圆、多边形等等。首先认识一下opencv对像素点的定义。图像的一个像素点有1或者3个值,对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值,他们表现出不...
  • on2way
  • on2way
  • 2015年07月07日 20:35
  • 11623

关于图像绘制并输出的问题,大家帮忙看看

       我现在在做个绘图软件,恩,就是那种读取主板文件,并绘制电路元件图的那种软件,我现在要实现的就是打印这个功能。我不太会,老是会出问题。       代码:     /*********文件...

iOS 如何提升图像绘制性能

本文译自 Guides and Sample Code中给出的对问题 Q: What can I do to improve my image drawing performance (CGCon...

基于echars的图像绘制

背景:基于百度的echar进行网页端图像绘制过程:引入echars:ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器。因此引入方式简单了很多,只需要像普通...
  • ljp1919
  • ljp1919
  • 2017年06月01日 14:57
  • 180
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 图像绘制之Matrix 的使用
举报原因:
原因补充:

(最多只允许输入30个字)