快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

澳门威尼l斯人网址_酒文化网进入



媒介

本文主要解说一下若何处置惩罚对一个Bitmap工具进行处置惩罚,包括:缩放、扭转、位移、倾斜等。在着末将以一个简单的Demo来演示图片殊效的变换。

本文的主要内容:

Matrix

Matrix缩放

Matrix扭转

Matrix位移

Matrix倾斜

Matrix变换留意事变

Matrix完备的Demo

Matrix

对付一个图片变换的处置惩罚,必要Matrix类的支持,它位于"android.graphics.Matrix"包下,是Android供给的一个矩阵对象类,它本身不能对图像或View进行变换,但它可与其他API结合来节制图形、View的变换,如Canvas。

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偏向上的缩放比例。

之前有提过,图片在内存中寄放的便是一个一个的像素点,而对付图片的变换主如果处置惩罚图片的每个像素点,对每个像素点进行响应的变换,即可完成对图像的变换。上面已经枚举了Matrix进行变换的常用措施,下面以几个Demo来解说一下若何经由过程Matrix进行变换。

Matrix缩放

代码:

/**

* 缩放图片*/

protected void bitmapScale(float x, float y) {// 由于要将图片放大年夜,以是要根据放大年夜的尺寸从新创建Bitmap

Bitmap afterBitmap = Bitmap.createBitmap((int) (baseBitmap.getWidth() * x),

(int) (baseBitmap.getHeight() * y), baseBitmap.getConfig());Canvas canvas = new Canvas(afterBitmap);

// 初始化Matrix工具Matrix matrix = new Matrix();

// 根据传入的参数设置缩放比例matrix.setScale(x, y);

// 根据缩放比例,把图片draw到Canvas上canvas.drawBitmap(baseBitmap, matrix,paint);

iv_after.setImageBitmap(afterBitmap);}

效果展示:

Matrix扭转

代码:

/**

* 图片扭转*/

protected void bitmapRotate(float degrees) {// 创建一个和原图一样大年夜小的图片

Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth(),baseBitmap.getHeight(), baseBitmap.getConfig());

Canvas canvas = new Canvas(afterBitmap);Matrix matrix = new Matrix();

// 根据原图的中间位置扭转matrix.setRotate(degrees, baseBitmap.getWidth() / 2,

baseBitmap.getHeight() / 2);canvas.drawBitmap(baseBitmap, matrix, paint);

iv_after.setImageBitmap(afterBitmap);}

效果展示:

Matrix位移

代码:

/**

* 图片移动*/

protected void bitmapTranslate(float dx, float dy) {// 必要根据移动的间隔来创建图片的拷贝图大年夜小

Bitmap afterBitmap = Bitmap.createBitmap((int) (baseBitmap.getWidth() + dx),

(int) (baseBitmap.getHeight() + dy), baseBitmap.getConfig());Canvas canvas = new Canvas(afterBitmap);

Matrix matrix = new Matrix();// 设置移动的间隔

matrix.setTranslate(dx, dy);canvas.drawBitmap(baseBitmap, matrix, paint);

iv_after.setImageBitmap(afterBitmap);}

效果展示:

Matrix倾斜

代码:

/**

* 倾斜图片*/

protected void bitmapSkew(float dx, float dy) {// 根据图片的倾斜比例,谋略变换后图片的大年夜小,

Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth()+ (int) (baseBitmap.getWidth() * dx), baseBitmap.getHeight()

+ (int) (baseBitmap.getHeight() * dy), baseBitmap.getConfig());Canvas canvas = new Canvas(afterBitmap);

Matrix matrix = new Matrix();// 设置图片倾斜的比例

matrix.setSkew(dx, dy);canvas.drawBitmap(baseBitmap, matrix, paint);

iv_after.setImageBitmap(afterBitmap);}

承喷鼻墨影

Matrix完备的Demo

下面给出本文解说的应用Matrix的完备Demo代码。

结构代码:

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"

android:layout_height="match_parent"android:orientation="vertical"

android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

LinearLayoutandroid:layout_width="wrap_content"

android:layout_height="wrap_content"android:orientation="horizontal" >

Button

android:id="@+id/btn_scale"android:layout_width="wrap_content"

android:layout_height="wrap_content"android:text="缩放" />

Button

android:id="@+id/btn_rotate"android:layout_width="wrap_content"

android:layout_height="wrap_content"android:text="扭转" />

B澳门威尼l斯人网址utton

android:id="@+id/btn_translate"android:layout_width="wrap_content"

android:layout_height="wrap_content"android:text="平移" />

Button

android:id="@+id/btn_skew"android:layout_width="wrap_content"

android:layout_height="wrap_content"android:text="倾斜" />

LinearLayout>

ImageViewandroid:id="@+id/iv_base"

android:layout_width="wrap_content"android:layout_height="澳门威尼l斯人网址wrap_content" />

ImageView

android:id="@+id/iv_after"android:layout_width="wrap_content"

android:layout_height="wrap_content" />

LinearLayout> activity_main.xml

实今世码:

package cn.bgxt.canvasmatrixdemo;

import android.os.Bundle;

import android.view.View;import android.widget.Button;

import android.widget.ImageView;import android.app.Activity;

import android.graphics.Bitmap;import android.graphics.BitmapFactory;

import android.graphics.Canvas;import android.graphics.Matrix;

import android.graphics.Paint;

public class MainActivity extends Activity {private Button btn_scale, btn_rotate, btn_translate, btn_skew;

private ImageView iv_base, iv_after;private Bitmap baseBitmap;

private Paint paint;

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

btn_scale = (Button) findViewById(R.id.btn_scale);

btn_rotate = (Button) findViewById(R.id.btn_rotate);btn_translate = (Button) findViewById(R.id.btn_translate);

btn_skew = (Button) findViewById(R.id.btn_skew);

btn_scale.setOnClickListener(click);btn_rotate.setOnClickListener(click);

btn_translate.setOnClickListener(click);btn_skew.setOnClickListener(click);

iv_base = (ImageView) findViewById(R.id.iv_base);

iv_after = (ImageView) findViewById(R.id.iv_after);

baseBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);

iv_base.setImageBitmap(baseBitmap);

// 设置画笔,打消锯齿paint = new Paint();

paint.setAntiAlias(true);}

private View.OnClickListener click = new View.OnClickListener() {

@Override

public void onClick(View v) {

s澳门威尼l斯人网址witch (v.getId()) {case R.id.btn_scale:

bitmapScale(2.0f, 4.0f);break;

case R.id.btn_rotate:bitmapRotate(180);

break;case R.id.btn_translate:

bitmapTranslate(20f, 20f);break;

case R.id.btn_skew:bitmapSkew(0.2f, 0.4f);

break;default:

break;}

}

};

/奸淫 缩放图片

*/protected void bitmapScale(float x, float y) {

// 由于要将图片放大年夜,以是要根据放大年夜的尺寸从新创建BitmapBitmap afterBitmap = Bitmap.createBitmap(

(int) (baseBitmap.getWidth() * x),(int澳门威尼l斯人网址) (baseBitmap.getHeight() * y), baseBitmap.getConfig());

Canvas canvas = new Canvas(afterBitmap);// 初始化Matrix工具

Matrix matrix = new Matrix();// 根据传入的参数设置缩放比例

matrix.setScale(x, y);// 根据缩放比例,把图片draw到Canvas上

canvas.drawBitmap(baseBitmap, matrix, paint);iv_after.setImageBitmap(afterBitmap);

}

/奸淫 倾斜图片

*/protected void bitmapSkew(float dx, float dy) {

// 根据图片的倾斜比例,谋略变换后图片的大年夜小,Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth()

+ (int) (baseBitmap.getWidth() * dx), baseBitmap.getHeight()+ (int) (baseBitmap.getHeight() * dy), baseBitmap.getConfig());

Canvas canvas = new Canvas(afterBitmap);Matrix matrix = new Matrix();

// 设置图片倾斜的比例matrix.setSkew(dx, dy);

canvas.drawBitmap(baseBitmap, matrix, paint);iv_after.setImageBitmap(afterBitmap);

}

/奸淫 图片移动

*/protected void bitmapTranslate(float dx, float dy) {

// 必要根据移动的间隔来创建图片的拷贝图大年夜小Bitmap afterBitmap = Bitmap.createBitmap(

(int) (baseBitmap.getWidth() + dx),(int) (baseBitmap.getHeight() + dy), baseBitmap.getConfig());

Canvas canvas = new Canvas(afterBitmap);Matrix matrix = new Matrix();

// 设置移动的间隔matrix.setTranslate(dx, dy);

canvas.drawBitmap(baseBitmap, matrix, paint);iv_after.setImageBitmap(afterBitmap);

}

/奸淫 图片扭转

*/protected void bitmapRotate(float degrees) {

// 创建一个和原图一样大年夜小的图片Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth(),

baseBitmap.getHeight(), baseBitmap.getConfig());Canvas canvas = new Canvas(afterBitmap);

Matrix matrix = new Matrix();// 根据原图的中间位置扭转

matrix.setRotate(degrees, baseBitmap.getWidth() / 2,baseBitmap.getHeight() / 2);

canvas.drawBitmap(baseBitmap, matrix, paint);iv_after.setImageBitmap(afterBitmap);

}

}Ma澳门威尼l斯人网址inActivity.java

源码下载

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: