Bitmap与Matrix , 位图剪裁、缩放、平移、旋转、倾斜

Android开发中常使用位图(Bitmap)进行图像编辑

0.位图的创建与绘制

(1)Bitmap类

Bitmap bitmap = Bitmap .createBitmap(int width,int height,Config); 创建位图,width表示要创建的位图的宽度,height表示要创建的位图的高度,config表示图片的配置信息,config可为BitmapConfig.ARGB_8888

Bitmap bitmap = Bitmap .createBitmap(int colors[],int offset,int stride,int width,int height,Config config); 使用颜色数组创建一个指定宽高的位图,颜色数组的个数为width*height,config可为BitmapConfig.ARGB_8888

Bitmap bitmap = Bitmap .createBitmap(Bitmap src); 使用源位图创建一个新的位图。

Bitmap bitmap = Bitmap .createBitmap(Bitmap source,int x,int y,int width,int height); 从源位图的指定坐标开始剪切一个指定宽高的图像,用于创建新的位图。

Bitmap bitmap = Bitmap .createBitmap(Bitmap source,int x,int y,int width,int height,Matrix matrix,boolean filter); 按照Matrix规则从源位图的指定坐标开始剪切一个指定宽高的图像,用于创建新的位图,filter表示是否将新位图的像素配置设置为与源位图相同。如果设置为true,新位图将与源位图具有相同的像素配置(例如,ARGB_8888),否则,新位图将使用默认的像素配置。

(2)BitmapFactory类(位图工厂类)

Bitmap bitmap = BitmapFactory .decodeFile(String pathName); 将指定路径的文件解码为位图。

Bitmap bitmap = BitmapFactory .decodeStream(InputStream inputStream); 将指定输入流解码为位图。

Bitmap bitmap = BitmapFactory .decodeResource(Resource res,int id); 将给定的资源id解码为位图。

1.剪裁

Bitmap bitmap_resource = BitmapFactory.decodeResource(getResources(),R.drawable.imagetest);
Bitmap bitmap = Bitmap.createBitmap(bitmap_resource,startx,starty,xlen_width,ylen_height);

2.缩放

Matrix matrix=new Matrix();

matrix .setScale(float sx,float sy); 指定图像在X轴和Y轴的缩放比例为sx和sy。

matrix .preScale(float sx,float sy); 使用前乘的方式计算图像在X轴和Y轴的缩放比例。

matrix .postScale(float sx,float sy); 使用后乘的方式计算图像在X轴和Y轴的缩放比例。

Bitmap bitmap_resource = BitmapFactory.decodeResource(getResources(),R.drawable.imagetest);
Matrix matrix = new Matrix();
matrix.setScale(sx,sy);
Bitmap bitmap = Bitmap.createBitmap(bitmap_resource,0,0,xleng_width,yleng_height,matrix,true);

3.平移

Matrix matrix=new Matrix();

matrix .setTranslate(float dx,float dy); 指定图像在X轴和Y轴平移dx和dy的距离。

matrix .preTranslate(float dx,float dy); 使用前乘的方式计算图像在X轴和Y轴的平移距离。

matrix .postTranslate(float dx,float dy); 使用后乘的方式计算图像在X轴和Y轴的平移距离。

Bitmap bitmap_resource = BitmapFactory.decodeResource(getResources(),R.drawable.imagetest);
Matrix matrix = new Matrix();
matrix.setTranslate(dx,dy);
Bitmap bitmap = Bitmap.createBitmap(bitmap_resource,0,0,xleng_width,yleng_height,matrix,true);

4.旋转

Matrix matrix=new Matrix();

matrix .setRotate(float degrees); 指定图像旋转degrees度。

matrix .preRotate(float degrees); 使用前乘的方式指定图像旋转degrees度。

matrix .postRotate(float degrees,float px,float py); 使用后乘的方式控制Matrix类似以参数px、py为轴心旋转degrees度。

Bitmap bitmap_resource = BitmapFactory.decodeResource(getResources(),R.drawable.imagetest);
Matrix matrix = new Matrix();
matrix.postRotate(degrees,px,py);
Bitmap bitmap = Bitmap.createBitmap(bitmap_resource,0,0,xleng_width,yleng_height,matrix,true);

5.倾斜

Matrix matrix=new Matrix();

matrix .setSkew(float kx,float ky); 指定图像在X轴Y轴的倾斜值。

matrix .preSkew(float kx,float ky);使用前乘的方式指定图像在X轴Y轴的倾斜值。

matrix .postSkew(float kx,float ky); 使用后乘的方式指定图像在X轴Y轴的倾斜值。

Bitmap bitmap_resource = BitmapFactory.decodeResource(getResources(),R.drawable.imagetest);
Matrix matrix = new Matrix();
matrix.setSkew(float kx,float ky);
Bitmap bitmap = Bitmap.createBitmap(bitmap_resource,0,0,xleng_width,yleng_height,matrix,true);

你可能感兴趣的:(android,java)