矩阵旋转偏移,Matrix

转载 2015年11月19日 16:33:03
package com.example.xfermodesdemo;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;

public class PolyToPolyActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(new SampleView(this));
	}

	private static class SampleView extends View {
		private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// 画笔
		private Matrix mMatrix = new Matrix();// 矩阵
		private Paint.FontMetrics mFontMetrics;// 字体矩阵

		public SampleView(Context context) {
			super(context);

			mPaint.setStrokeWidth(4);// 画笔宽度
			mPaint.setTextSize(40);// 文字尺寸
			mPaint.setTextAlign(Paint.Align.CENTER);// 设置文字对齐方式
			mFontMetrics = mPaint.getFontMetrics();

		}

		@Override
		protected void onDraw(Canvas canvas) {
			super.onDraw(canvas);
			canvas.drawColor(Color.WHITE);

			canvas.save();
			canvas.translate(10, 10);
			// 平移 1点
			doDraw(canvas, new float[] { 0, 0 }, new float[] { 5, 5 });// 从(0,0)平移到(5,5)
			canvas.restore();

			canvas.save();
			canvas.translate(160, 10);
			// 两点 缩放和旋转,就是两条线的缩放和旋转关系
			// rotate/uniform-scale (2 points)
			doDraw(canvas, new float[] { 32, 32, 64, 32 }, new float[] { 32,
					32, 64, 48 });
			canvas.restore();

			canvas.save();
			canvas.translate(10, 110);
			// rotate/skew (3 points) 旋转和斜视
			doDraw(canvas, new float[] { 0, 0, 64, 0, 0, 64 }, new float[] { 0,
					0, 96, 0, 24, 64 });
			canvas.restore();

			canvas.save();
			canvas.translate(160, 110);
			// perspective (4 points) 四点 透视 
			doDraw(canvas, new float[] { 0, 0, 64, 0, 64, 64, 0, 64 },
					new float[] { 0, 0, 96, 0, 64, 96, 0, 64 });
			canvas.restore();
		}

		private void doDraw(Canvas canvas, float src[], float dst[]) {
			canvas.save();
			/**
			 * boolean android.graphics.Matrix.setPolyToPoly(float[] src, int
			 * srcIndex, float[] dst, int dstIndex, int pointCount)
			 * 
			 * 
			 * Set the matrix such that the specified src points would map to
			 * the specified dst points. The "points" are represented as an
			 * array of floats, order [x0, y0, x1, y1, ...], where each "point"
			 * is 2 float values.
			 * 
			 * Parameters:
			 * 
			 * src The array of src [x,y] pairs (points)
			 * 
			 * srcIndex Index of the first pair of src values
			 * 
			 * dst The array of dst [x,y] pairs (points)
			 * 
			 * dstIndex Index of the first pair of dst values
			 * 
			 * pointCount The number of pairs/points to be used. Must be [0..4]
			 */
			mMatrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1);
			canvas.concat(mMatrix);

			mPaint.setColor(Color.GRAY);
			mPaint.setStyle(Paint.Style.STROKE);
			canvas.drawRect(0, 0, 64, 64, mPaint);
			canvas.drawLine(0, 0, 64, 64, mPaint);
			// canvas.drawLine(0, 64, 64, 0, mPaint);

			mPaint.setColor(Color.RED);
			mPaint.setStyle(Paint.Style.FILL);

			// how to draw the text center on our square
			// centering in X is easy... use alignment (and X at midpoint)
			float x = 64 / 2;
			// centering in Y, we need to measure ascent/descent first
			float y = 64 / 2 - (mFontMetrics.ascent + mFontMetrics.descent) / 2;

			canvas.drawText((src.length + 1) / 2 + "", x, y, mPaint);

			canvas.restore();

		}
	}
}

矩阵运算——平移,旋转,缩放

虹软笔试的时候又遇到了一个图像旋转的问题。特此记下面是3类基本的2D图形变换。 1.平移设某点向x方向移动 dx, y方向移动 dy ,[x,y]为变换前坐标, [X,Y]为变换后坐标。 则 X=...
  • qq_30490125
  • qq_30490125
  • 2016年11月08日 23:20
  • 2481

Android matrix偏移(平移),旋转,缩放,倾斜的原理

尊重原创,原文出处:http://blog.csdn.net/pathuang68/article/details/6991867 第一部分 Matrix的数学原理 在Android中,如果你用M...
  • hnulwt
  • hnulwt
  • 2015年01月16日 23:09
  • 2137

Android matrix偏移(平移),旋转,缩放,倾斜的原理

尊重原创,原文出处:http://blog.csdn.net/pathuang68/article/details/6991867 第一部分 Matrix的数学原理 在Android中,如果你用M...
  • hnulwt
  • hnulwt
  • 2015年01月16日 23:09
  • 2137

css3-transform-matrix 即矩阵实现物体旋转、缩放、移动效果

我想做个模拟地毯展开的动画效果,其侧面的圆卷要由大随着地毯展开而逐渐变小,并在此过程中需要滚动(旋转);一开始在网上搜了旋转的代码,很简单的一个方法是利用 jQuery 的插件 jQueryRotat...
  • Inite
  • Inite
  • 2017年01月07日 20:15
  • 1061

Android之matrix类控制图片的旋转、缩放、移动

在Android中,对图片的处理需要使用到Matrix类,Matrix是一个3 x 3的矩阵,他对图片的处理分为四个基本类型: 1、Translate————平移变换 2、Scale————缩放变换 ...
  • u011068702
  • u011068702
  • 2015年09月15日 17:28
  • 2975

Android使用Matrix矩阵类对图像进行缩放、旋转、对比度、亮度处理(原代码)

  • 2014年10月26日 02:05
  • 1.46MB
  • 下载

旋转矩阵(Rotate Matrix)的性质分析

学过矩阵理论或者线性代数的肯定知道正交矩阵(orthogonal matrix)是一个非常好的矩阵,为什么这么说?原因有一下几点: 正交矩阵每一列都是单位矩阵,并且两两正交。最简单的正交矩阵就是...
  • imCharlesxin
  • imCharlesxin
  • 2016年12月01日 21:38
  • 786

Spiral Matrix II 产生正方形的旋转矩阵@LeetCode

package Level3; /** * Spiral Matrix II * * Given an integer n, generate a square matrix filled ...
  • hellobinfeng
  • hellobinfeng
  • 2013年11月09日 04:13
  • 2050

[Android] 使用Matrix矩阵类对图像进行缩放、旋转、对比度、亮度处理

讲述Android图像处理技术,主要操作包括:通过打开相册里的图片,使用Matrix对图像进行缩放、旋转、移动、对比度、亮度、饱和度操作,希望对大家有所帮助. 1.Matrix 图像空间变换,包括旋转...
  • Eastmount
  • Eastmount
  • 2014年10月26日 01:56
  • 8564

IE矩阵滤镜Matrix旋转与缩放及结合transform的拓展

IE矩阵滤镜Matrix旋转与缩放及结合transform的拓展 http://www.zhangxinxu.com/wordpress/?p=1505 二、Matrix滤镜简介 ...
  • e_wsq
  • e_wsq
  • 2011年10月28日 09:20
  • 498
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:矩阵旋转偏移,Matrix
举报原因:
原因补充:

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