影象的平移,縮放..
阿新 • • 發佈:2019-02-12
package com.itheima.img;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.view.Menu;
import android.widget.ImageView;
public class MainActivity extends Activity {
ImageView iv_src , iv_target;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_src = (ImageView) findViewById(R.id.iv_src);
iv_target = (ImageView) findViewById(R.id.iv_target);
//先讓原圖顯示
//1. 得到原圖
Bitmap srcBitmap = BitmapFactory.decodeFile("/mnt/sdcard/tp1.jpg");
iv_src.setImageBitmap(srcBitmap);
//旋轉的圖片顯示 --- 但凡是對影象進行操作 (平移、旋轉、縮放) ,都是對這張影象在記憶體中的拷貝操作,
//而不是對本圖進行操作。
//2.得到拷貝的圖片
//先創建出來一份空白的點陣圖,這個點陣圖的寬度和高度與原圖一模一樣 , 配置資訊也一模一樣。
//以下寫的程式碼相當於是臨摹一張正版的圖片一樣 ,假設臨摹的是八駿圖 . 這裡相當於是得到了一張空白的紙張
Bitmap copytBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
//3. 定義畫板 畫板上放置空白的紙張,一會要進行作畫
Canvas canvas = new Canvas(copytBitmap);
//4. 定義畫筆
Paint paint = new Paint();
//paint.setColor(color)
//5. 定義矩陣 -- 目前是按照1:1的比例作畫
Matrix matrix = new Matrix();
//指定旋轉15度
//matrix.setRotate(180, copytBitmap.getWidth() / 2 , copytBitmap.getHeight() / 2);
//matrix.setTranslate(50, 50);
//縮放 ,寬度是原來的0.2倍 ,高度是原來的0.8倍
//matrix.setScale(0.2f, 0.8f);
//把y座標都全部改成負數
matrix.setScale(1, -1) ;
//讓其平移回來顯示 setXXXX並不會在以前的效果基礎上再設定新的效果。
// postXXXX在以前的基礎上作變更。
matrix.postTranslate(0, copytBitmap.getHeight());
//6. 開始作畫 引數一: 參照哪一個圖片作畫 引數二:矩陣 引數三: 畫筆
canvas.drawBitmap(srcBitmap, matrix, paint);
//7.顯示圖片
iv_target.setImageBitmap(copytBitmap);
}
}
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.view.Menu;
import android.widget.ImageView;
public class MainActivity extends Activity {
ImageView iv_src , iv_target;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_src = (ImageView) findViewById(R.id.iv_src);
iv_target = (ImageView) findViewById(R.id.iv_target);
//先讓原圖顯示
//1. 得到原圖
Bitmap srcBitmap = BitmapFactory.decodeFile("/mnt/sdcard/tp1.jpg");
iv_src.setImageBitmap(srcBitmap);
//旋轉的圖片顯示 --- 但凡是對影象進行操作 (平移、旋轉、縮放) ,都是對這張影象在記憶體中的拷貝操作,
//而不是對本圖進行操作。
//2.得到拷貝的圖片
//先創建出來一份空白的點陣圖,這個點陣圖的寬度和高度與原圖一模一樣 , 配置資訊也一模一樣。
//以下寫的程式碼相當於是臨摹一張正版的圖片一樣 ,假設臨摹的是八駿圖 . 這裡相當於是得到了一張空白的紙張
Bitmap copytBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
//3. 定義畫板 畫板上放置空白的紙張,一會要進行作畫
Canvas canvas = new Canvas(copytBitmap);
//4. 定義畫筆
Paint paint = new Paint();
//paint.setColor(color)
//5. 定義矩陣 -- 目前是按照1:1的比例作畫
Matrix matrix = new Matrix();
//指定旋轉15度
//matrix.setRotate(180, copytBitmap.getWidth() / 2 , copytBitmap.getHeight() / 2);
//matrix.setTranslate(50, 50);
//縮放 ,寬度是原來的0.2倍 ,高度是原來的0.8倍
//matrix.setScale(0.2f, 0.8f);
//把y座標都全部改成負數
matrix.setScale(1, -1) ;
//讓其平移回來顯示 setXXXX並不會在以前的效果基礎上再設定新的效果。
// postXXXX在以前的基礎上作變更。
matrix.postTranslate(0, copytBitmap.getHeight());
//6. 開始作畫 引數一: 參照哪一個圖片作畫 引數二:矩陣 引數三: 畫筆
canvas.drawBitmap(srcBitmap, matrix, paint);
//7.顯示圖片
iv_target.setImageBitmap(copytBitmap);
}
}