========图片相关的知识=======
a. 获得手机屏幕的宽高(兼容低版本)
WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
windowHeight = wm.getDefaultDisplay().getHeight();
windowWidth = wm.getDefaultDisplay().getWidth();
b. 加载图片到内存
-- 不是真的解析图片到内存,只是解析图片的宽高等信息
BitmapFactory.Options opt = new Options();
opt.inJustDecodeBounds = true;
BitmapFactory.decodeFile("/sdcard/a.jpg", opt);
--真的解析图片
opt.inJustDecodeBounds = false;
//采样率
opt.inSampleSize = 1;
Bitmap bm = BitmapFactory.decodeFile("/sdcard/a.jpg", opt);
c. 获得图片头部信息
ExifInterface exif = new ExifInterface("/sdcard/a.jpg");
String datetime = exif.getAttribute(ExifInterface.TAG_DATETIME);
String orientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
String make = exif.getAttribute(ExifInterface.TAG_MAKE);
d. 获取系统Gallery的图片
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 0);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
Uri uri = data.getData();
iv.setImageURI(uri);
}
}
e. 画图
-- 定义画笔
paint = new Paint();
paint.setStrokeWidth(3);
paint.setColor(Color.GRAY);
//创建图片模版
baseBitmap = Bitmap.createBitmap(300, 375, Bitmap.Config.ARGB_8888);
//创建画布
canvas = new Canvas(baseBitmap);
canvas.drawColor(Color.WHITE);
//然后响应ImageView的iv.setOnTouchListener(new OnTouchListener() {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: //finger down
break;
case MotionEvent.ACTION_MOVE: // finger move
break;
case MotionEvent.ACTION_UP: // finger up
break;
});
//最后保存到sdcard
FileOutputStream fos = new FileOutputStream(file);
baseBitmap.compress(CompressFormat.JPEG, 100, fos);
//模拟SD卡挂载媒体的动作,相当于刷新一下,Gallery里才能看到
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
f. 其他操作
-- decode出来的是只读图片,createBitmap出来的是可更改的
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.g3_back, opts);
-- 可以设置Matrix参数放大,缩小,旋转图片
matrix.setScale(0.5f, 1); //水平方向缩小0.5倍
matrix.setRotate(180, baseBitmap2.getWidth()/2, baseBitmap2.getHeight()/2); //以第二三参数为圆心旋转180度
matrix3.setTranslate(10, 15); //水平和竖直移动
matrix5.setScale(-1, 1); // 获得倒影效果