收集了很多bitmap相关的处理方法,几乎全部应用在项目中,所以特记录下!

[java] view plain copy
  1. packagecom.tmacsky.utils;
  2. importjava.io.ByteArrayOutputStream;
  3. importjava.io.IOException;
  4. importandroid.content.Context;
  5. importandroid.content.res.Resources;
  6. importandroid.graphics.Bitmap;
  7. importandroid.graphics.BitmapFactory;
  8. importandroid.graphics.Canvas;
  9. importandroid.graphics.Matrix;
  10. importandroid.graphics.Paint;
  11. importandroid.graphics.PixelFormat;
  12. importandroid.graphics.PorterDuffXfermode;
  13. importandroid.graphics.Rect;
  14. importandroid.graphics.RectF;
  15. importandroid.graphics.Bitmap.Config;
  16. importandroid.graphics.PorterDuff.Mode;
  17. importandroid.graphics.drawable.BitmapDrawable;
  18. importandroid.graphics.drawable.Drawable;
  19. importandroid.view.View;
  20. importandroid.view.View.MeasureSpec;
  21. publicclassImageUtils{
  22. //--->bitmap相关
  23. //参考网站http://www.cnblogs.com/fighter/archive/2012/02/20/android-bitmap-drawable.html
  24. //见博客:http://blog.sina.com.cn/s/blog_afb547c60101j7qn.html
  25. /**
  26. *View转成bitmap
  27. *@paramview
  28. *@return
  29. */
  30. publicstaticBitmapconvertViewToBitmap(Viewview){
  31. view.setDrawingCacheEnabled(true);
  32. view.measure(MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED),
  33. MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED));
  34. view.layout(0,0,view.getMeasuredWidth(),view.getMeasuredHeight());
  35. view.buildDrawingCache();
  36. returnview.getDrawingCache();
  37. }
  38. /**
  39. *缩放Drawable
  40. *@paramdrawable
  41. *@paramw缩放后需要的宽度
  42. *@paramh缩放后需要的高度
  43. *@return
  44. */
  45. publicstaticDrawablezoomDrawable(Drawabledrawable,intw,inth){
  46. intwidth=drawable.getIntrinsicWidth();
  47. intheight=drawable.getIntrinsicHeight();
  48. //drawable转换成bitmap
  49. Bitmapoldbmp=drawableToBitmap(drawable);
  50. //创建操作图片用的Matrix对象
  51. Matrixmatrix=newMatrix();
  52. //计算缩放比例
  53. floatsx=((float)w/width);
  54. floatsy=((float)h/height);
  55. //设置缩放比例
  56. matrix.postScale(sx,sy);
  57. //建立新的bitmap,其内容是对原bitmap的缩放后的图
  58. Bitmapnewbmp=Bitmap.createBitmap(oldbmp,0,0,width,height,
  59. matrix,true);
  60. returnnewBitmapDrawable(newbmp);
  61. }
  62. /**
  63. *缩放bitmap
  64. *@paramoldBitmap输入bitmap
  65. *@paramnewWidth
  66. *@paramnewHeight
  67. *@return
  68. */
  69. publicstaticBitmapzoomBitmap(BitmapoldBitmap,intnewWidth,intnewHeight){
  70. //获得图片的宽高
  71. intwidth=oldBitmap.getWidth();
  72. intheight=oldBitmap.getHeight();
  73. //计算缩放比例
  74. floatscaleWidth=((float)newWidth)/width;
  75. floatscaleHeight=((float)newHeight)/height;
  76. //取得想要缩放的matrix参数
  77. Matrixmatrix=newMatrix();
  78. matrix.postScale(scaleWidth,scaleHeight);
  79. //得到新的图片
  80. Bitmapnewbm=Bitmap.createBitmap(oldBitmap,0,0,width,height,matrix,
  81. true);
  82. returnnewbm;
  83. }
  84. /**
  85. *缩放网络图片依赖于zoomBitmap
  86. *@paramimg
  87. *@paramnewWidth
  88. *@paramnewHeight
  89. *@return
  90. */
  91. publicstaticBitmapzoomImg(Stringimg,intnewWidth,intnewHeight){
  92. //图片源
  93. Bitmapbm=BitmapFactory.decodeFile(img);
  94. if(null!=bm){
  95. returnzoomBitmap(bm,newWidth,newHeight);
  96. }
  97. returnnull;
  98. }
  99. /**
  100. *缩放网络图片依赖于zoomBitmap
  101. *@paramcontext
  102. *@paramimg
  103. *@paramnewWidth
  104. *@paramnewHeight
  105. *@return
  106. */
  107. publicstaticBitmapzoomImg(Contextcontext,Stringimg,intnewWidth,
  108. intnewHeight){
  109. //图片源
  110. try{
  111. Bitmapbm=BitmapFactory.decodeStream(context.getAssets()
  112. .open(img));
  113. if(null!=bm){
  114. returnzoomBitmap(bm,newWidth,newHeight);
  115. }
  116. }catch(IOExceptione){
  117. //TODOAuto-generatedcatchblock
  118. e.printStackTrace();
  119. }
  120. returnnull;
  121. }
  122. /**
  123. *判断bitmap是否存在
  124. *@parambitmap
  125. *@return
  126. */
  127. publicstaticbooleanbitmapAvailable(Bitmapbitmap){
  128. returnbitmap!=null&&bitmap.getWidth()>0&&bitmap.getHeight()>0;
  129. }
  130. /**
  131. *drawable转成bitmap
  132. *@paramdrawable
  133. *@return
  134. */
  135. publicstaticBitmapdrawableToBitmap(Drawabledrawable){
  136. //取drawable的长宽
  137. intw=drawable.getIntrinsicWidth();
  138. inth=drawable.getIntrinsicHeight();
  139. //取drawable的颜色格式
  140. Bitmap.Configconfig=drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
  141. :Bitmap.Config.RGB_565;
  142. //建立对应bitmap
  143. Bitmapbitmap=Bitmap.createBitmap(w,h,config);
  144. //建立对应bitmap的画布
  145. Canvascanvas=newCanvas(bitmap);
  146. drawable.setBounds(0,0,w,h);
  147. //把drawable内容画到画布中
  148. drawable.draw(canvas);
  149. returnbitmap;
  150. }
  151. /**
  152. *Bitmap转换成Drawable
  153. *@paramcontext
  154. *@parambitmap
  155. *@return
  156. */
  157. publicstaticDrawablebitmapToDrawable(Contextcontext,Bitmapbitmap){
  158. //因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
  159. BitmapDrawablebd=newBitmapDrawable(context.getResources(),bitmap);
  160. returnbd;
  161. }
  162. /**
  163. *从资源中获取Bitmap
  164. *@paramcontext
  165. *@paramreqR.drawable.icon(eg.)
  166. *@return
  167. */
  168. publicBitmapgetBitmapFromResources(Contextcontext,intreq){
  169. Resourcesres=context.getResources();
  170. Bitmapbmp=BitmapFactory.decodeResource(res,req);
  171. returnbmp;
  172. }
  173. /**
  174. *Byte[]->Bitmap的转换
  175. */
  176. publicBitmapBytes2Bimap(byte[]b){
  177. if(b.length!=0){
  178. returnBitmapFactory.decodeByteArray(b,0,b.length);
  179. }else{
  180. returnnull;
  181. }
  182. }
  183. /**
  184. *Bitmap->Byte[]的转换
  185. *@parambm
  186. *@return
  187. */
  188. publicbyte[]Bitmap2Bytes(Bitmapbm){
  189. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  190. bm.compress(Bitmap.CompressFormat.PNG,100,baos);
  191. returnbaos.toByteArray();
  192. }
  193. /**
  194. *获取圆角图片
  195. *@parambitmap
  196. *@paramroundPx圆角的弧度
  197. *@return
  198. */
  199. publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap,floatroundPx){
  200. intw=bitmap.getWidth();
  201. inth=bitmap.getHeight();
  202. Bitmapoutput=Bitmap.createBitmap(w,h,Config.ARGB_8888);
  203. Canvascanvas=newCanvas(output);
  204. finalintcolor=0xff424242;
  205. finalPaintpaint=newPaint();
  206. finalRectrect=newRect(0,0,w,h);
  207. finalRectFrectF=newRectF(rect);
  208. paint.setAntiAlias(true);
  209. canvas.drawARGB(0,0,0,0);
  210. paint.setColor(color);
  211. canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
  212. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  213. canvas.drawBitmap(bitmap,rect,rect,paint);
  214. returnoutput;
  215. }
  216. }

转自:http://blog.csdn.net/tmacsky/article/details/38121283


更多相关文章

  1. Android(安卓)Bitmap用法总结
  2. Android(安卓)webview上传图片(相册/相机)
  3. android 系统定制的小技巧
  4. Android(安卓)Bitmap保存为.bmp格式,图像转化为黑白图片
  5. Android实战(七)------myeclipse发布Android项目-------Android
  6. Android入门教程(二十三)------之Gallery
  7. 基于Android的Word文档阅读器
  8. 【Android】Android之修改app标题与图标

随机推荐

  1. 图解Android - System Service 概论 和 A
  2. Android的6种布局管理器总结
  3. [置顶] Android性能分析——Activity启动
  4. Android(二)数据存储和访问 之文件
  5. Android(安卓)Studio—— jni初体验(一)
  6. android style(样式)和theme(主题)设置
  7. Android资源文件分析
  8. Android提权原理
  9. Android-线程笔记
  10. Activity的生命周期,状态保存,窗口显示,取得