Android中常用的bitmap处理方法 (bitmap工具类)
16lz
2021-01-24
收集了很多bitmap相关的处理方法,几乎全部应用在项目中,所以特记录下!
[java] view plain copy
- packagecom.tmacsky.utils;
- importjava.io.ByteArrayOutputStream;
- importjava.io.IOException;
- importandroid.content.Context;
- importandroid.content.res.Resources;
- importandroid.graphics.Bitmap;
- importandroid.graphics.BitmapFactory;
- importandroid.graphics.Canvas;
- importandroid.graphics.Matrix;
- importandroid.graphics.Paint;
- importandroid.graphics.PixelFormat;
- importandroid.graphics.PorterDuffXfermode;
- importandroid.graphics.Rect;
- importandroid.graphics.RectF;
- importandroid.graphics.Bitmap.Config;
- importandroid.graphics.PorterDuff.Mode;
- importandroid.graphics.drawable.BitmapDrawable;
- importandroid.graphics.drawable.Drawable;
- importandroid.view.View;
- importandroid.view.View.MeasureSpec;
- publicclassImageUtils{
- //--->bitmap相关
- //参考网站http://www.cnblogs.com/fighter/archive/2012/02/20/android-bitmap-drawable.html
- //见博客:http://blog.sina.com.cn/s/blog_afb547c60101j7qn.html
- /**
- *View转成bitmap
- *@paramview
- *@return
- */
- publicstaticBitmapconvertViewToBitmap(Viewview){
- view.setDrawingCacheEnabled(true);
- view.measure(MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED),
- MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED));
- view.layout(0,0,view.getMeasuredWidth(),view.getMeasuredHeight());
- view.buildDrawingCache();
- returnview.getDrawingCache();
- }
- /**
- *缩放Drawable
- *@paramdrawable
- *@paramw缩放后需要的宽度
- *@paramh缩放后需要的高度
- *@return
- */
- publicstaticDrawablezoomDrawable(Drawabledrawable,intw,inth){
- intwidth=drawable.getIntrinsicWidth();
- intheight=drawable.getIntrinsicHeight();
- //drawable转换成bitmap
- Bitmapoldbmp=drawableToBitmap(drawable);
- //创建操作图片用的Matrix对象
- Matrixmatrix=newMatrix();
- //计算缩放比例
- floatsx=((float)w/width);
- floatsy=((float)h/height);
- //设置缩放比例
- matrix.postScale(sx,sy);
- //建立新的bitmap,其内容是对原bitmap的缩放后的图
- Bitmapnewbmp=Bitmap.createBitmap(oldbmp,0,0,width,height,
- matrix,true);
- returnnewBitmapDrawable(newbmp);
- }
- /**
- *缩放bitmap
- *@paramoldBitmap输入bitmap
- *@paramnewWidth
- *@paramnewHeight
- *@return
- */
- publicstaticBitmapzoomBitmap(BitmapoldBitmap,intnewWidth,intnewHeight){
- //获得图片的宽高
- intwidth=oldBitmap.getWidth();
- intheight=oldBitmap.getHeight();
- //计算缩放比例
- floatscaleWidth=((float)newWidth)/width;
- floatscaleHeight=((float)newHeight)/height;
- //取得想要缩放的matrix参数
- Matrixmatrix=newMatrix();
- matrix.postScale(scaleWidth,scaleHeight);
- //得到新的图片
- Bitmapnewbm=Bitmap.createBitmap(oldBitmap,0,0,width,height,matrix,
- true);
- returnnewbm;
- }
- /**
- *缩放网络图片依赖于zoomBitmap
- *@paramimg
- *@paramnewWidth
- *@paramnewHeight
- *@return
- */
- publicstaticBitmapzoomImg(Stringimg,intnewWidth,intnewHeight){
- //图片源
- Bitmapbm=BitmapFactory.decodeFile(img);
- if(null!=bm){
- returnzoomBitmap(bm,newWidth,newHeight);
- }
- returnnull;
- }
- /**
- *缩放网络图片依赖于zoomBitmap
- *@paramcontext
- *@paramimg
- *@paramnewWidth
- *@paramnewHeight
- *@return
- */
- publicstaticBitmapzoomImg(Contextcontext,Stringimg,intnewWidth,
- intnewHeight){
- //图片源
- try{
- Bitmapbm=BitmapFactory.decodeStream(context.getAssets()
- .open(img));
- if(null!=bm){
- returnzoomBitmap(bm,newWidth,newHeight);
- }
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- returnnull;
- }
- /**
- *判断bitmap是否存在
- *@parambitmap
- *@return
- */
- publicstaticbooleanbitmapAvailable(Bitmapbitmap){
- returnbitmap!=null&&bitmap.getWidth()>0&&bitmap.getHeight()>0;
- }
- /**
- *drawable转成bitmap
- *@paramdrawable
- *@return
- */
- publicstaticBitmapdrawableToBitmap(Drawabledrawable){
- //取drawable的长宽
- intw=drawable.getIntrinsicWidth();
- inth=drawable.getIntrinsicHeight();
- //取drawable的颜色格式
- Bitmap.Configconfig=drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
- :Bitmap.Config.RGB_565;
- //建立对应bitmap
- Bitmapbitmap=Bitmap.createBitmap(w,h,config);
- //建立对应bitmap的画布
- Canvascanvas=newCanvas(bitmap);
- drawable.setBounds(0,0,w,h);
- //把drawable内容画到画布中
- drawable.draw(canvas);
- returnbitmap;
- }
- /**
- *Bitmap转换成Drawable
- *@paramcontext
- *@parambitmap
- *@return
- */
- publicstaticDrawablebitmapToDrawable(Contextcontext,Bitmapbitmap){
- //因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
- BitmapDrawablebd=newBitmapDrawable(context.getResources(),bitmap);
- returnbd;
- }
- /**
- *从资源中获取Bitmap
- *@paramcontext
- *@paramreqR.drawable.icon(eg.)
- *@return
- */
- publicBitmapgetBitmapFromResources(Contextcontext,intreq){
- Resourcesres=context.getResources();
- Bitmapbmp=BitmapFactory.decodeResource(res,req);
- returnbmp;
- }
- /**
- *Byte[]->Bitmap的转换
- */
- publicBitmapBytes2Bimap(byte[]b){
- if(b.length!=0){
- returnBitmapFactory.decodeByteArray(b,0,b.length);
- }else{
- returnnull;
- }
- }
- /**
- *Bitmap->Byte[]的转换
- *@parambm
- *@return
- */
- publicbyte[]Bitmap2Bytes(Bitmapbm){
- ByteArrayOutputStreambaos=newByteArrayOutputStream();
- bm.compress(Bitmap.CompressFormat.PNG,100,baos);
- returnbaos.toByteArray();
- }
- /**
- *获取圆角图片
- *@parambitmap
- *@paramroundPx圆角的弧度
- *@return
- */
- publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap,floatroundPx){
- intw=bitmap.getWidth();
- inth=bitmap.getHeight();
- Bitmapoutput=Bitmap.createBitmap(w,h,Config.ARGB_8888);
- Canvascanvas=newCanvas(output);
- finalintcolor=0xff424242;
- finalPaintpaint=newPaint();
- finalRectrect=newRect(0,0,w,h);
- finalRectFrectF=newRectF(rect);
- 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);
- returnoutput;
- }
- }
转自:http://blog.csdn.net/tmacsky/article/details/38121283
更多相关文章
- Android(安卓)Bitmap用法总结
- Android(安卓)webview上传图片(相册/相机)
- android 系统定制的小技巧
- Android(安卓)Bitmap保存为.bmp格式,图像转化为黑白图片
- Android实战(七)------myeclipse发布Android项目-------Android
- Android入门教程(二十三)------之Gallery
- 基于Android的Word文档阅读器
- 【Android】Android之修改app标题与图标