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; ArrayList list=newArrayList (); for(inti=0;i h) { 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。