Android 图片Bitmap的剪切的示例代码
一、什么是Android中的Bitmap
Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
二、Bitmap的剪切基本操作
publicstaticBitmapcreateBitmap(Bitmapsource,intx,inty,intwidth,intheight,Matrixm,booleanfilter)
从原始位图剪切图像,这是一种高级的方式。可以用Matrix(矩阵)来实现旋转等高级方式截图
参数说明:
Bitmapsource:要从中截图的原始位图
intx:起始x坐标
inty:起始y坐标
intwidth:要截的图的宽度
intheight:要截的图的宽度
Bitmap.Config config:一个枚举类型的配置,可以定义截到的新位图的质量
返回值:返回一个剪切好的Bitmap
三、Bitmap剪切的封装
实际使用中,因为项目需要时常需要对基本功能进行封装,下面是一段封装的代码,仅供参考。
importjava.io.ByteArrayOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.ArrayList;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.graphics.PorterDuff;
importandroid.graphics.PorterDuff.Mode;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Rect;
importandroid.graphics.RectF;
publicclassBitmapCut
{
/**
*通过资源id转化成Bitmap
*
*@paramcontext
*@paramresId
*@return
*/
publicstaticBitmapReadBitmapById(Contextcontext,intresId)
{
BitmapFactory.Optionsopt=newBitmapFactory.Options();
opt.inPreferredConfig=Bitmap.Config.RGB_565;
opt.inPurgeable=true;
opt.inInputShareable=true;
InputStreamis=context.getResources().openRawResource(resId);
returnBitmapFactory.decodeStream(is,null,opt);
}
/**
*设置背景为圆角
*
*@parambitmap
*@parampixels
*@return
*/
publicstaticBitmapremoveYuanjiao(Bitmapbitmap,intpixels)
{
intwidth=bitmap.getWidth();
intheight=bitmap.getHeight();
BitmapcreBitmap=Bitmap.createBitmap(width,height,
android.graphics.Bitmap.Config.ARGB_8888);
Canvascanvas=newCanvas(creBitmap);
Paintpaint=newPaint();
floatroundPx=pixels;
RectFrectF=newRectF(0,0,bitmap.getWidth()-pixels,
bitmap.getHeight()-pixels);
paint.setAntiAlias(true);
canvas.drawARGB(0,0,0,0);
canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
paint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap,0,0,paint);
if(!bitmap.isRecycled())
bitmap.recycle();
returncreBitmap;
}
/**
*按正方形裁切图片
*/
publicstaticBitmapImageCrop(Bitmapbitmap,booleanisRecycled)
{
if(bitmap==null)
{
returnnull;
}
intw=bitmap.getWidth();//得到图片的宽,高
inth=bitmap.getHeight();
intwh=w>h?h:w;//裁切后所取的正方形区域边长
intretX=w>h?(w-h)/2:0;//基于原图,取正方形左上角x坐标
intretY=w>h?0:(h-w)/2;
Bitmapbmp=Bitmap.createBitmap(bitmap,retX,retY,wh,wh,null,
false);
if(isRecycled&&bitmap!=null&&!bitmap.equals(bmp)
&&!bitmap.isRecycled())
{
bitmap.recycle();
bitmap=null;
}
//下面这句是关键
returnbmp;//Bitmap.createBitmap(bitmap,retX,retY,wh,wh,null,
//false);
}
/**
*按长方形裁切图片
*
*@parambitmap
*@return
*/
publicstaticBitmapImageCropWithRect(Bitmapbitmap)
{
if(bitmap==null)
{
returnnull;
}
intw=bitmap.getWidth();//得到图片的宽,高
inth=bitmap.getHeight();
intnw,nh,retX,retY;
if(w>h)
{
nw=h/2;
nh=h;
retX=(w-nw)/2;
retY=0;
}else
{
nw=w/2;
nh=w;
retX=w/4;
retY=(h-w)/2;
}
//下面这句是关键
Bitmapbmp=Bitmap.createBitmap(bitmap,retX,retY,nw,nh,null,
false);
if(bitmap!=null&&!bitmap.equals(bmp)&&!bitmap.isRecycled())
{
bitmap.recycle();
bitmap=null;
}
returnbmp;//Bitmap.createBitmap(bitmap,retX,retY,nw,nh,null,
//false);
}
/**
*Bitmap-->byte[]
*
*@parambmp
*@return
*/
publicstaticbyte[]readBitmap(Bitmapbmp)
{
ByteArrayOutputStreambaos=newByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG,60,baos);
try
{
baos.flush();
baos.close();
}catch(IOExceptione)
{
e.printStackTrace();
}
returnbaos.toByteArray();
}
/**
*将图像裁剪成圆形
*
*@parambitmap
*@return
*/
publicstaticBitmaptoRoundBitmap(Bitmapbitmap)
{
if(bitmap==null)
{
returnnull;
}
intwidth=bitmap.getWidth();
intheight=bitmap.getHeight();
floatroundPx;
floatleft,top,right,bottom,dst_left,dst_top,dst_right,dst_bottom;
if(width<=height)
{
roundPx=width/2;
top=0;
bottom=width;
left=0;
right=width;
height=width;
dst_left=0;
dst_top=0;
dst_right=width;
dst_bottom=width;
}else
{
roundPx=height/2;
floatclip=(width-height)/2;
left=clip;
right=width-clip;
top=0;
bottom=height;
width=height;
dst_left=0;
dst_top=0;
dst_right=height;
dst_bottom=height;
}
Bitmapoutput=Bitmap.createBitmap(width,height,Config.ARGB_8888);
Canvascanvas=newCanvas(output);
finalintcolor=0xff424242;
finalPaintpaint=newPaint();
finalRectsrc=newRect((int)left,(int)top,(int)right,
(int)bottom);
finalRectdst=newRect((int)dst_left,(int)dst_top,
(int)dst_right,(int)dst_bottom);
finalRectFrectF=newRectF(dst);
paint.setAntiAlias(true);
canvas.drawARGB(0,0,0,0);
paint.setColor(color);
canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap,src,dst,paint);
if(bitmap!=null&&!bitmap.isRecycled())
{
bitmap.recycle();
bitmap=null;
}
returnoutput;
}
//将图片变成带圆边的圆形图片
publicstaticBitmapgetRoundBitmap(Bitmapbitmap,intwidth,intheight)
{
if(bitmap==null)
{
returnnull;
}
//将图片变成圆角
BitmaproundBitmap=Bitmap.createBitmap(width,height,
Config.ARGB_8888);
Canvascanvas=newCanvas(roundBitmap);
Paintpaint=newPaint(Paint.ANTI_ALIAS_FLAG);
intlen=(width>height)?height:width;
canvas.drawCircle(width/2,height/2,len/2-8,paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
BitmapscaledBitmap=Bitmap.createScaledBitmap(bitmap,len,len,true);
canvas.drawBitmap(scaledBitmap,0,0,paint);
//将图片加圆边
BitmapoutBitmap=Bitmap.createBitmap(width,height,Config.ARGB_8888);
canvas=newCanvas(outBitmap);
paint=newPaint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(0xffffffff);
canvas.drawCircle(width/2,height/2,len/2-4,paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_OVER));
canvas.drawBitmap(roundBitmap,0,0,paint);
bitmap.recycle();
bitmap=null;
roundBitmap.recycle();
roundBitmap=null;
scaledBitmap.recycle();
scaledBitmap=null;
returnoutBitmap;
}
//将图片变成带圆边的圆形图片
publicstaticBitmapgetRoundBitmap(Bitmapbitmap,intwidth,intheight,
intcolor)
{
if(bitmap==null)
{
returnnull;
}
//将图片变成圆角
BitmaproundBitmap=Bitmap.createBitmap(width,height,
Config.ARGB_8888);
Canvascanvas=newCanvas(roundBitmap);
Paintpaint=newPaint(Paint.ANTI_ALIAS_FLAG);
intlen=(width>height)?height:width;
canvas.drawCircle(width/2,height/2,len/2-8,paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
BitmapscaledBitmap=Bitmap.createScaledBitmap(bitmap,len,len,true);
canvas.drawBitmap(scaledBitmap,0,0,paint);
//将图片加圆边
BitmapoutBitmap=Bitmap.createBitmap(width,height,Config.ARGB_8888);
canvas=newCanvas(outBitmap);
paint=newPaint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(color);
canvas.drawCircle(width/2,height/2,len/2-4,paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_OVER));
canvas.drawBitmap(roundBitmap,0,0,paint);
bitmap.recycle();
bitmap=null;
roundBitmap.recycle();
roundBitmap=null;
scaledBitmap.recycle();
scaledBitmap=null;
returnoutBitmap;
}
/**
*function:图片转圆角
*
*@parambitmap
*需要转的bitmap
*@parampixels
*转圆角的弧度
*@return转圆角的bitmap
*/
publicstaticBitmaptoRoundCorner(Bitmapbitmap,intpixels)
{
Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(),Config.ARGB_8888);
Canvascanvas=newCanvas(output);
finalintcolor=0xff424242;
finalPaintpaint=newPaint();
finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());
finalRectFrectF=newRectF(rect);
finalfloatroundPx=pixels;
paint.setAntiAlias(true);
canvas.drawARGB(0,0,0,0);
paint.setColor(color);
canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap,rect,rect,paint);
if(bitmap!=null&&!bitmap.isRecycled())
{
bitmap.recycle();
}
returnoutput;
}
/**
*获取指定的圆角图片
*
*@parambitmap
*@return
*/
publicstaticBitmapgetRadiusBitmap(Bitmapbitmap)
{
Paintpaint=newPaint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(0xffffffff);
BitmapradiusBitmap=Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(),Config.ARGB_8888);
Canvascanvas=newCanvas(radiusBitmap);
RectFrectF=newRectF(0,0,bitmap.getWidth(),bitmap.getHeight());
canvas.drawRoundRect(rectF,7,7,paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap,0,0,paint);
if(bitmap!=null&&!bitmap.isRecycled())
{
bitmap.recycle();
}
returnradiusBitmap;
}
//获得指定大小的圆边的bitmap数组
publicstaticArrayListgetRadiusBitmapList(String[]pathArray,
intsize,intlen,floatradius,intcolor)
{
BitmapcanvasBitmap=null;
Canvascanvas=null;
Paintpaint=null;
RectFrectF=newRectF(0,0,len-radius,len-radius);
Filefile=null;
FileInputStreamfis=null;
Bitmapbitmap=null;
BitmapscaledBitmap=null;
ArrayListlist=newArrayList();
for(inti=0;ih)
{
if(h>w*num2/num1)
{
nw=w;
nh=w*num2/num1;
retX=0;
retY=(h-nh)/2;
}else
{
nw=h*num1/num2;
nh=h;
retX=(w-nw)/2;
retY=0;
}
}else
{
if(w>h*num2/num1)
{
nh=h;
nw=h*num2/num1;
retY=0;
retX=(w-nw)/2;
}else
{
nh=w*num1/num2;
nw=w;
retY=(h-nh)/2;
retX=0;
}
}
Bitmapbmp=Bitmap.createBitmap(bitmap,retX,retY,nw,nh,null,
false);
if(isRecycled&&bitmap!=null&&!bitmap.equals(bmp)
&&!bitmap.isRecycled())
{
bitmap.recycle();
bitmap=null;
}
returnbmp;//Bitmap.createBitmap(bitmap,retX,retY,nw,nh,null,
//false);
}
}
示例代码:Bitmaptest_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。