一、Load图形到内存中
对于像数码相机相片特别大,内存吃不消,此时加载到内存前,需要处理,防止出现OOM异常。
方法1:
原理:只显示原图的1/8,通过BitmapFactory.Options来实现 。
实现:
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inSampleSize = 8;
Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);
imv.setImageBitmap(bmp);
方法2:
原理:根据当前屏幕分辨率的大小,加载图片。
实现:
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, opt);
int heightRatio = (int)Math.ceil(opt.outHeight/(float)dh);
int widthRatio = (int)Math.ceil(opt.outWidth/(float)dw);
//判断是否要进行缩放
if (heightRatio > 1 && widthRatio > 1){
if (heightRatio > widthRatio){
opt.inSampleSize = heightRatio;//高度变化大,按高度缩放
}else{
opt.inSampleSize = widthRatio; // 宽度变化大,按宽度缩放
}
}
opt.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeFile(imageFilePath, opt);
二、获取Exif图片信息
//从文件获取exif信息
ExifInterface ei = new ExifInterface(imageFilePath);
String imageDescription = ei.getAttribute("ImageDescription");
if (imageDescription != null) {
Log.v("EXIF", imageDescription);
}
//把exif信息写到文件:
ExifInterface ei = new ExifInterface(imageFilePath);
ei.setAttribute("ImageDescription","Something New");
三、从gallery获取一个图形
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(“image/*”);
intent.getData() ;//获取image的uri
Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().??
openInputStream(imageFileUri), null, opt);
四、创建bitmap拷贝
Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().??
openInputStream(imageFileUri), null, opt);
Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(),??
bmp.getConfig());
Canvas canvas = new Canvas(alteredBitmap);
Paint paint = new Paint();
canvas.drawBitmap(bmp, 0, 0, paint);
五、图形缩放
Matrix matrix = new Matrix();
matrix.setValues(new float[] {
1, 0, 0,
0, 1, 0,
0, 0, 1
});
x = 1x + 0y + 0z
y = 0x + 1y + 0z
z = 0x + 0y + 1z
通过canvas.drawBitmap(bmp, matrix, paint);创建bitmap
1.水平缩放0.5
2.垂直拉扯2倍
matrix.setScale(1.5f,1);//水平点放大到1.5f,垂直1
六、图形旋转
Matrix matrix = new Matrix();
matrix.setRotate(15);
canvas.drawBitmap(bmp, matrix, paint);
paint.setAntiAlias(true);//消除锯齿
matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2); //指定圆心的旋转
Matrix matrix = new Matrix();
matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2);
alteredBitmap = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),matrix, false);
alteredImageView.setImageBitmap(alteredBitmap);
七、图形平移
setTranslate(1.5f,-10);
八、镜子效果
matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(),0);
九、倒影效果
matrix.setScale(1, -1);
matrix.postTranslate(0, bmp.getHeight());