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(); } } }