一、什么是Android中的Bitmap
Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
二、Bitmap的剪切基本操作
位图的旋转也可以借助Matrix或者Canvas来实现。
通过postRotate方法设置旋转角度,然后用createBitmap方法创建一个经过旋转处理的Bitmap对象,最后用drawBitmap方法绘制到屏幕上,于是就实现了旋转操作。
三、Bitmap剪切的封装
实际使用中,因为项目需要时常需要对基本功能进行封装,下面是一段封装的代码,仅供参考。
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
public class BitmapRotating
{
/**
* 通过资源id转化成Bitmap
*
* @param context
* @param resId
* @return
*/
public static Bitmap ReadBitmapById(Context context, int resId)
{
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is, null, opt);
}
/**
* Bitmap --> byte[]
*
* @param bmp
* @return
*/
public static byte[] readBitmap(Bitmap bmp)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 60, baos);
try
{
baos.flush();
baos.close();
} catch (IOException e)
{
e.printStackTrace();
}
return baos.toByteArray();
}
/**
* 读取图片旋转的角度
*
* @param filename
* @return
*/
public static int readPictureDegree(String filename)
{
int rotate = 0;
try
{
ExifInterface exifInterface = new ExifInterface(filename);
int result = exifInterface.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
switch (result)
{
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
default:
break;
}
} catch (IOException e)
{
e.printStackTrace();
}
return rotate;
}
/**
* 旋转图片
*
* @param angle
* @param bitmap
* @return
*/
public static Bitmap rotaingImageView(int angle, Bitmap bitmap)
{
// 旋转图片 动作
Matrix matrix = new Matrix();
matrix.postRotate(angle);
// 创建新的图片
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), matrix, true);
if (resizedBitmap != bitmap && bitmap != null && !bitmap.isRecycled())
{
bitmap.recycle();
bitmap = null;
}
return resizedBitmap;
}
/**
* 读取图片旋转的角度
*
* @param filename
* @return
*/
public static void setPictureDegree(String filename, int degree)
{
try
{
if (degree == 0)
{
return;
}
int rotate = ExifInterface.ORIENTATION_UNDEFINED;
switch (degree)
{
case 90:
rotate = ExifInterface.ORIENTATION_ROTATE_90;
break;
case 180:
rotate = ExifInterface.ORIENTATION_ROTATE_180;
break;
case 270:
rotate = ExifInterface.ORIENTATION_ROTATE_270;
break;
default:
break;
}
ExifInterface exifInterface = new ExifInterface(filename);
exifInterface.setAttribute(ExifInterface.TAG_ORIENTATION,
String.valueOf(rotate));
exifInterface.saveAttributes();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
示例代码:http://download.csdn.net/detail/stop_pig/7162695