圖像變換和觸摸畫圖

package com.example.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class Test extends Activity implements OnTouchListener{
	private static String TAG = "MediaStore";
	boolean isFirst = true;
	
	ImageView imageView1;
	ImageView imageView2;
	ImageView imageView3;
	View screem;
	
	Canvas canvas_in;
	Paint paint_in;
	Bitmap bitmap_in ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
	/******************圖形變換矩陣****************************/
		
		imageView1 = (ImageView) findViewById(R.id.alterImage);
		Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.abc12345);
		Matrix matrix = new Matrix();
		matrix.setRotate(15, src.getWidth()/2, src.getHeight()/2); //圖像中心旋轉
		Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, false);
		
		Matrix matrix2 = new Matrix();
		matrix2.setScale(0.5f, 0.5f); 
		matrix2.postRotate(15, src.getWidth()/2, src.getHeight()/2); // 若是先縮放再旋轉須要用postRotate()
		
		/*******************顏色矩陣***************************/
		
		imageView2 = (ImageView) findViewById(R.id.alterColorImage);
		ColorMatrix colorMatrix = new ColorMatrix();
		
		float contrast = 1.5f;  //顏色對比加強
		float brightness = -25;  //亮度,通常圖像對比加強亮度就減小
		colorMatrix.set(new float[]{
				contrast, 0, 0, 0, brightness,
				0, contrast, 0, 0, brightness,
				0, 0, contrast, 0, brightness,
				0, 0, 0, contrast, 0,				
		});
		
		Bitmap bmp1 = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.RGB_565); //建立空白bitmap
		Canvas canvas = new Canvas(bmp1); //建立畫布
		Paint paint = new Paint();
		paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix)); //畫筆加上顏色矩陣
		canvas.drawBitmap(src, 0, 0, paint);
		
		imageView1.setImageBitmap(src);
		imageView2.setImageBitmap(bmp1);
		
		write2file(bmp1, "12345.jpg");
		
		/***************手寫板筆跡畫圖******************/
		screem = findViewById(R.id.screem);
		screem.setOnTouchListener(this);
		
		bitmap_in = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.RGB_565);
		canvas_in = new Canvas(bitmap_in);
		paint_in = new Paint();
		paint_in.setColor(Color.WHITE);
		paint_in.setStyle(Paint.Style.FILL_AND_STROKE); // 輪廓加填充
		paint_in.setStrokeWidth(2);
		
		imageView3 = (ImageView) findViewById(R.id.putIn);
		imageView3.setImageBitmap(bitmap_in);
		imageView3.setOnTouchListener(this);
		
	}

	float downx = 0;
	float downy = 0;
	float upx = 0;
	float upy = 0;
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		
		if (v.getId() == R.id.screem) {	  //點擊屏幕出現手寫板
			imageView3.setVisibility(View.VISIBLE);
			if(v.getId() != R.id.putIn) { //點擊其餘其餘區域重置畫布

				Paint clearPaint = new Paint();
				canvas_in.drawPaint(clearPaint);
				//canvas_in.drawColor(0, Mode.CLEAR); // 兩種方法均可以
				
				imageView3.invalidate();
			}
		}
		if (v.getId() == R.id.putIn) {
			switch (event.getAction()) {
			
				case MotionEvent.ACTION_DOWN:
					downx = event.getX();
					downy = event.getY();
					break;
	
				case MotionEvent.ACTION_UP:
					break;
	
				case MotionEvent.ACTION_MOVE:
					upx = event.getX();
					upy = event.getY();
					canvas_in.drawLine(downx, downy, upx, upy, paint_in);
					imageView3.invalidate();
					downx = upx;
					downy = upy;
					break;
	
				case MotionEvent.ACTION_CANCEL:
					break;
			}
		}
		return true; //must be true
	}
	
	
	/**
	 * bitmap 位圖寫成文件
	 * @param bmp1 位圖
	 * @param name 文件名
	 */
	private void write2file(Bitmap bmp1 , String name) {
		File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath().toString()  + File.separator, name);
		try {
			file.createNewFile();
			OutputStream os = new FileOutputStream(file);
			bmp1.compress(Bitmap.CompressFormat.JPEG, 100, os);
			os.flush();
			System.out.println("writeFile");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}
相關文章
相關標籤/搜索