原文地址: http://chroya.iteye.com/
Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。
首先介绍一下矩阵运算。加法和减法就不用说了,太简单了,对应位相加就好。图像处理,主要用到的是乘法 。下面是一个乘法的公式:
在 Android 里面, Matrix 由 9 个 float 值构成,是一个 3*3 的矩阵。如下图。
没专业工具,画的挺难看。解释一下,上面的 sinX 和 cosX ,表示旋转角度的 cos 值和 sin 值,注意,旋转角度是按顺时针方向计算的。 translateX 和 translateY 表示 x 和 y 的平移量。 scale 是缩放的比例, 1 是不变, 2 是表示缩放 1/2 ,这样子。
下面在 Android 上试试 Matrix 的效果。
- public class MyView extends View {
-
- private Bitmap mBitmap;
-
- private Matrix mMatrix = new Matrix();
-
- public MyView(Context context) {
-
- super(context);
-
- initialize();
-
- }
-
- private void initialize() {
-
- mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();
-
- float cosValue = (float) Math.cos(-Math.PI/6);
-
- float sinValue = (float) Math.sin(-Math.PI/6);
-
- mMatrix.setValues(
-
- new float[]{
-
- cosValue, -sinValue, 100,
-
- sinValue, cosValue, 100,
-
- 0, 0, 2});
-
- }
-
- @Override protected void onDraw(Canvas canvas) {
-
-
-
- canvas.drawBitmap(mBitmap, mMatrix, null);
-
- }
-
- }
public class MyView extends View {
private Bitmap mBitmap;
private Matrix mMatrix = new Matrix();
public MyView(Context context) {
super(context);
initialize();
}
private void initialize() {
mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();
float cosValue = (float) Math.cos(-Math.PI/6);
float sinValue = (float) Math.sin(-Math.PI/6);
mMatrix.setValues(
new float[]{
cosValue, -sinValue, 100,
sinValue, cosValue, 100,
0, 0, 2});
}
@Override protected void onDraw(Canvas canvas) {
// super.onDraw(canvas); //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。
canvas.drawBitmap(mBitmap, mMatrix, null);
}
}
运行结果如下:
以左上角为顶点,缩放一半,逆时针旋转30度,然后沿x轴和y轴分别平移50个像素,代码 里面写的是100,为什么是平移50呢,因为缩放了一半。
大家可以自己设置一下Matrix的值,或者尝试一下两个Matrix相乘,得到的值设置进去,这样才能对Matrix更加熟练。
这里讲的直接赋值的方式也许有点不好理解,不过还好, andrid 提供了对矩阵的更方便的方法,下一篇介绍 。
分享到:
相关推荐
Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析
本文将深入探讨如何在Android中使用`Matrix`进行画图,以帮助开发者更好地理解和运用这一关键概念。 `Matrix`(矩阵)在数学中是一种线性代数结构,而在Android的绘图系统中,它被用来表示2D图形的各种变换,如平移...
下面将详细介绍Android画图的相关知识点。 一、Canvas类 Canvas是Android图形系统的核心,它是绘制2D图形的画布。你可以将Canvas想象为一张白纸,你可以在这张纸上绘制各种图形。Canvas通常与Bitmap结合使用,...
在Android平台上,交互式画图是一项常见的功能,它允许用户通过触摸屏幕或使用其他输入设备在屏幕上绘制图形,实现各种创意表达。这个项目名为"InteractDraw",显然是一个实现简单画图功能的应用,提供了丰富的操作...
这个“android 画板,白板,画图”模块提供了一种简单的方法,让用户可以在屏幕上进行涂鸦、绘图、添加文字以及处理图像,非常适合用于教育、设计或者简单的娱乐应用。下面将详细介绍这个模块的关键知识点。 1. **...
本文将深入探讨“Android画图”的核心知识点,包括基本概念、关键类以及如何在实际项目中应用。 首先,Android中的画图主要依赖于`Canvas`类,它是图形绘制的基础。`Canvas`提供了各种方法来绘制几何形状、文本、...
在Android平台上,开发人员可以利用丰富的图形库和API来创建各种各样的图形,包括2D、3D以及动态画图。这些技术可以帮助我们构建出交互性强、视觉效果丰富的应用程序。以下是一些关于Android图形画图的关键知识点: ...
总之,"Android上canvas自定义画图案例"是一个很好的学习资源,它涵盖了Android Canvas的基本用法和一些进阶技巧,可以帮助开发者创建出各种复杂的自定义视图。通过阅读和实践这个案例,可以提升在Android图形编程...
- Canvas与Paint:Canvas是绘制图形的基础,它提供了各种画图方法,如drawRect、drawCircle等。Paint则是控制绘制样式,如颜色、线宽、文字样式等。 - Bitmap与BitmapShader:Bitmap用于存储图像数据,而...
在Android平台上,开发一款画图工具涉及到多个技术层面,包括图形绘制、用户交互以及视图更新等。这个"Android源码——画图工具源码.zip"文件可能包含了一个完整的示例项目,帮助开发者理解如何在Android应用中实现...
`drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)`允许通过Matrix进行位图的缩放、旋转等变换。 9. **图形变换**:Canvas支持矩阵变换,如`translate(float dx, float dy)`平移,`rotate(float degrees, ...
Android画图之Matrix `Matrix`是Android图形系统中的一个工具类,用于在Canvas上进行图像变换。`Matrix`类提供了一系列的方法来实现图像的平移、缩放、旋转和倾斜等操作。在自定义View绘图时,可以利用`Matrix`对...
在Android编程中,进行图形绘制时,经常遇到的一个问题是图像边缘出现锯齿现象,尤其是在进行旋转、缩放等操作后,这种现象更为明显。锯齿是由于像素渲染不完全导致的,影响了图像的视觉效果。为了解决这个问题,...
- Android Studio的Profile工具提供了一个叫做"Show GPU Overdraw"的功能,可以帮助开发者发现过度绘制的问题。 7. **绘图与动画** - `ValueAnimator`和`ObjectAnimator`可以结合`Canvas`进行动画绘制,实现动态...
在Android开发中,当涉及到图形绘制时,抗锯齿(Anti-Aliasing)是一个重要的概念,它可以提升图像的视觉质量,特别是在图形边缘处理上。抗锯齿技术的主要目的是消除或减少图像中的阶梯状边缘,使其看起来更加平滑...
这通常意味着开发者可能在构建一个图像编辑器或者某种形式的画图应用。下面,我们将深入探讨这些关键知识点。 1. **Android 应用开发**: - Android SDK:开发Android应用的基础,包括Java编译器、模拟器、工具和...
在Android平台上,自定义绘图是一项重要的技能,它允许开发者超越标准UI组件的限制,创造出独特的用户界面和视觉效果。本文将深入探讨Android绘图实现的相关知识点,包括基础概念、核心类、API以及实践技巧。 一、...