1.Android正在使用Matrix放、旋转、平移、斜切等变换的。

Matrix是一个3*3的矩阵,其值相应例如以下:

以下给出详细坐标相应变形的属性
|scaleX, skewX, translateX| 
|skewY, scaleY, translateY|
|0       ,0        , scale       |

Matrix提供了一些方法来控制图片变换:
setTranslate(float dx,float dy):控制Matrix进行位移。
setSkew(float kx,float ky):控制Matrix进行倾斜,kx、ky为X、Y方向上的比例。
setSkew(float kx,float ky,float px,float py):控制Matrix以px、py为轴心进行倾斜,kx、ky为X、Y方向上的倾斜比例。
setRotate(float degrees):控制Matrix进行depress角度的旋转,轴心为(0,0)。
setRotate(float degrees,float px,float py):控制Matrix进行depress角度的旋转。轴心为(px,py)。

setScale(float sx,float sy):设置Matrix进行缩放,sx、sy为X、Y方向上的缩放比例。
setScale(float sx,float sy,float px,float py):设置Matrix以(px,py)为轴心进行缩放,sx、sy为X、Y方向上的缩放比例。
注意:以上的set方法,均有相应的post和pre方法,Matrix调用一系列set,pre,post方法时,可视为将这些方法插入到一个队列.当然,依照队列中从头至尾的顺序调用运行.当中pre表示在队头插入一个方法,post表示在队尾插入一个方法.而set表示把当前队列清空,而且总是位于队列的最中间位置.当运行了一次set后:pre方法总是插入到set前部的队列的最前面,post方法总是插入到set后部的队列的最后面

Demo

package com.example.testaa;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById; import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast; @EActivity(R.layout.activity_main)
public class MainActivity extends Activity { @ViewById
ImageView iv1; @ViewById
ImageView iv2; @ViewById
Button btn1; @ViewById
Button btn2; @ViewById
Button btn3; @ViewById
Button btn4; @ViewById
Button btn5; Bitmap bitmap = null; /**
* 载入完View之后进行的处理
*/
@AfterViews
void afterViewProcess() {
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.lena); } /**
* 缩小
*/
@Click
void btn1() {
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 0.5f);
Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
iv2.setImageBitmap(bm);
showToast(matrix);
} /**
* 先缩小后旋转
*/
@Click
void btn2() {
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 0.5f);// 缩小为原来的一半
matrix.postRotate(45.0f);// 旋转45度 == matrix.setSinCos(0.5f, 0.5f);
Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
iv2.setImageBitmap(bm);
showToast(matrix);
} /**
* 平移
*/
@Click
void btn3() {
Matrix matrix = new Matrix();
matrix.setTranslate(bitmap.getWidth() / 2, bitmap.getHeight() / 2);// 向左下平移
Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
iv2.setImageBitmap(bm);
showToast(matrix);
} /**
* 斜切
*/
@Click
void btn4() {
Matrix matrix = new Matrix();
matrix.setSkew(0.5f, 0.5f);// 斜切
matrix.postScale(0.5f, 0.5f);// 缩小为原来的一半
Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
iv2.setImageBitmap(bm);
showToast(matrix);
} /**
* 相当于自由变换
* 由一个矩形变成四边形
*/
@Click
void btn5() {
Matrix matrix = new Matrix();
float[] src = new float[] { 0, 0, // 左上
bitmap.getWidth(), 0,// 右上
bitmap.getWidth(), bitmap.getHeight(),// 右下
0, bitmap.getHeight() };// 左下
float[] dst = new float[] { 0, 0,
bitmap.getWidth(), 30,
bitmap.getWidth(), bitmap.getHeight() - 30,
0,bitmap.getHeight() };
matrix.setPolyToPoly(src, 0, dst, 0, src.length/2);
Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
iv2.setImageBitmap(bm);
showToast(matrix);
} /**
* 显示矩阵中的值
* @param matrix
*/
@UiThread
void showToast(Matrix matrix) {
String string = "";
float[] values = new float[9];
matrix.getValues(values);
for (int i = 0; i < values.length; i++) {
string += "matrix.at" + i + "=" + values[i];
}
Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
Log.d("TEST", string);
}
}

以下是分别对图像进行例如以下操作的结果:

整个项目的下载地址:http://download.csdn.net/detail/nuptboyzhb/7261933

版权声明:本文博主原创文章。博客,未经同意不得转载。

Android-采用Matrix对Bitmap加工的更多相关文章

  1. Android图片缓存之Bitmap详解

    前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...

  2. Android笔记——Matrix

    转自:http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html#translate Matrix的数学原理 在Android中,如果你 ...

  3. Android采用HttpClient下载图片

    在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...

  4. Android学习之位图BitMap

    BitMap代表一张位图,扩展名可以是.bmp或者.dib.位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2.4.8.16.24和32位色彩.例如 ...

  5. Android学习记录(9)—Android之Matrix的用法

    Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 首先介绍一下矩阵运算.加法和减法就不用说了,对应位相加就好.图像处理,主要用到的是乘法 .下面 ...

  6. Android 之 Matrix(转)

    原文:http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html#code Android Matrix   Matrix的数学原理 平 ...

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

        前一篇文章讲述了Android拍照.截图.保存并显示在ImageView控件中,该篇文章继续讲述Android图像处理技术,主要操作包含:通过打开相冊里的图片,使用Matrix对图像进行缩放. ...

  8. Android 学习笔记之Bitmap位图的旋转

    位图的旋转也可以借助Matrix或者Canvas来实现. 通过postRotate方法设置旋转角度,然后用createBitmap方法创建一个经过旋转处理的Bitmap对象,最后用drawBitmap ...

  9. Android 学习笔记之Bitmap位图的缩放

    位图的缩放也可以借助Matrix或者Canvas来实现. 通过postScale(0.5f, 0.3f)方法设置旋转角度,然后用createBitmap方法创建一个经过缩放处理的Bitmap对象,最后 ...

随机推荐

  1. Linux 编程学习笔记----ANSI C 文件I/O管理

    转载请注明出处:http://blog.csdn.net/suool/article/details/38129201 问题引入 文件的种类 依据数据存储的方式不同,能够将文件分为文本文件和二进制文件 ...

  2. 让你的字ScrollView、ListView充分伸展

    android默认ScrollView.ListView在最顶部的下拉上拉时或底部,未与反弹效应,很僵,让你无法继续拖累,不比iOS至于能否反弹.个人觉得,iOS互动还是略胜一筹.因此,我们已经走在A ...

  3. ehcache.xml设置(转)

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLoc ...

  4. 经excel要将数据库(ORACLE)要插入数据

    大家都知道PL/SQL可以excel数据复制.我们也可以通过相同excel将数据插入到数据库. 下面我们就来简单的样品,并与主题演示 首先,我们创建了一个表test CREATE TABLE test ...

  5. 使用form的target属性屏蔽url跳

    target: 指定公开赛, action URL. 关键点: 让target指向隐藏的iframe demo: form.jsp <%@ page language="java&qu ...

  6. App设计相关网站

    http://sketch.im/ 设计素材 principle  动效软件 http://principleformac.com/ 官网 http://principlecn.com/ 中文网

  7. mysql 多个字段拼接

    Mysql的查询结果行字段拼接,能够用以下两个函数实现: 1. concat函数 mysql> select concat('1','2','3') from test ; +--------- ...

  8. 可以部署在广域网执行QQ高仿版 GG2014 (源代码)

      距上次GG V3.7版本号(可在广域网部署执行的QQ高仿版 -- GG叽叽V3.7.优化视频聊天.控制很多其它相关细节)的公布.已经有50天了,这50天对于GG来说.是一个重大的飞跃. 由于这段时 ...

  9. .NET 并行(多核)编程系列之五 Task执行和异常处理

    原文:.NET 并行(多核)编程系列之五 Task执行和异常处理 .NET 并行(多核)编程系列之五 Task执行和异常处理 前言:本篇主要讲述等待task执行完成. 本篇的议题如下: 1. 等待Ta ...

  10. Windows 8 键盘上推自定义处理

    原文:Windows 8 键盘上推自定义处理 在Windows 8 应用程序中,当TextBox控件获得焦点时,输入面板会弹出,如果TextBox控件处于页面下半部分,则系统会将页面上推是的TextB ...