android 图形变换

本文详细介绍如何在Android中利用drawBitmap函数结合Matrix实现图片的各种变换,包括平移、旋转、缩放及反转等,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 中拥有众多的图像绘制的函数,而功能最强大的就是

drawBitmap(Bitmapbitmap,Matrixmatrix,Paintpaint)

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

Matrix矩阵这个东西对于数学困难的同学来说,那就是相当地困难。那么我们就不对矩阵本身进行操作。用android 提供给我们的API同样也能够做出变化的效果。那么我们就看看矩阵新手是怎么完成这一切的。

图片的导入:要使用图片必须要先导入到项目之中我们放在drawable的文件夹之中,jpg格式,名称叫做pig.jpg。然后在文件中声明变量与初始化,图片代码如下:

Bitmap bitmap;

Matrix matrix= new Matrix(); ;

Paint mPaint = new Paint();

InputStream is = getResources().openRawResource(R.drawable.pig);

bitmap = BitmapFactory.decodeStream(is);

canvas.drawBitmap(bitmap,matrix,mPaint);



查看更多精彩图片
查看更多精彩图片


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

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);查看更多精彩图片

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

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);查看更多精彩图片

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值