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