原帖地址:http://gundumw100.iteye.com/blog/849729
Java代码 收藏代码
  1. //压缩图片大小
  2. publicstaticBitmapcompressImage(Bitmapimage){
  3. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  4. image.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
  5. intoptions=100;
  6. while(baos.toByteArray().length/1024>100){//循环判断如果压缩后图片是否大于100kb,大于继续压缩
  7. baos.reset();//重置baos即清空baos
  8. image.compress(Bitmap.CompressFormat.JPEG,options,baos);//这里压缩options%,把压缩后的数据存放到baos中
  9. options-=10;//每次都减少10
  10. }
  11. ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
  12. Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream数据生成图片
  13. returnbitmap;
  14. }

Java代码 收藏代码
  1. /**
  2. *将彩色图转换为灰度图
  3. *@paramimg位图
  4. *@return返回转换好的位图
  5. */
  6. publicBitmapconvertGreyImg(Bitmapimg){
  7. intwidth=img.getWidth();//获取位图的宽
  8. intheight=img.getHeight();//获取位图的高
  9. int[]pixels=newint[width*height];//通过位图的大小创建像素点数组
  10. img.getPixels(pixels,0,width,0,0,width,height);
  11. intalpha=0xFF<<24;
  12. for(inti=0;i<height;i++){
  13. for(intj=0;j<width;j++){
  14. intgrey=pixels[width*i+j];
  15. intred=((grey&0x00FF0000)>>16);
  16. intgreen=((grey&0x0000FF00)>>8);
  17. intblue=(grey&0x000000FF);
  18. grey=(int)((float)red*0.3+(float)green*0.59+(float)blue*0.11);
  19. grey=alpha|(grey<<16)|(grey<<8)|grey;
  20. pixels[width*i+j]=grey;
  21. }
  22. }
  23. Bitmapresult=Bitmap.createBitmap(width,height,Config.RGB_565);
  24. result.setPixels(pixels,0,width,0,0,width,height);
  25. returnresult;
  26. }


android Bimtap 各种图片处理方法、图片特效_第1张图片

将一个图片切割成多个图片
有种场景,我们想将一个图片切割成多个图片。比如我们在开发一个拼图的游戏,就首先要对图片进行切割。
以下是封装好的两个类,可以实现图片的切割。仅供参考和学习。
一个是ImagePiece类,此类保存了一个Bitmap对象和一个标识图片的顺序索引的int变量。
Java代码 收藏代码
  1. importandroid.graphics.Bitmap;
  2. publicclassImagePiece{
  3. publicintindex=0;
  4. publicBitmapbitmap=null;
  5. }

一个是ImageSplitter类,有一个静态方法split,传入的参数是要切割的Bitmap对象,和横向和竖向的切割片数。比如传入的是3、3,则横竖向都切割成3片,最终会将整个图片切割成3X3=9片。
Java代码 收藏代码
  1. importjava.util.ArrayList;
  2. importjava.util.List;
  3. importandroid.graphics.Bitmap;
  4. publicclassImageSplitter{
  5. publicstaticList<ImagePiece>split(Bitmapbitmap,intxPiece,intyPiece){
  6. List<ImagePiece>pieces=newArrayList<ImagePiece>(xPiece*yPiece);
  7. intwidth=bitmap.getWidth();
  8. intheight=bitmap.getHeight();
  9. intpieceWidth=width/3;
  10. intpieceHeight=height/3;
  11. for(inti=0;i<yPiece;i++){
  12. for(intj=0;j<xPiece;j++){
  13. ImagePiecepiece=newImagePiece();
  14. piece.index=j+i*xPiece;
  15. intxValue=j*pieceWidth;
  16. intyValue=i*pieceHeight;
  17. piece.bitmap=Bitmap.createBitmap(bitmap,xValue,yValue,
  18. pieceWidth,pieceHeight);
  19. pieces.add(piece);
  20. }
  21. }
  22. returnpieces;
  23. }
  24. }


1、图标加灰色过滤;
2、android的图片资源默认是静态的,单实例;如果两个IM好友的头像一样,最简单的都是用的软件自带头像,有一个在线,一个离线,直接改变头像的灰度,则两个用户的头像都会变灰或者在线,答案是:Drawable.mutate()。
Java代码 收藏代码
  1. DrawablemDrawable=context.getResources().getDrawable(R.drawable.face_icon);
  2. //Makethisdrawablemutable.
  3. //Amutabledrawableisguaranteedtonotshareitsstatewithanyotherdrawable.
  4. mDrawable.mutate();
  5. ColorMatrixcm=newColorMatrix();
  6. cm.setSaturation(0);
  7. ColorMatrixColorFiltercf=newColorMatrixColorFilter(cm);
  8. mDrawable.setColorFilter(cf);


生成缩略图,抠自android launcher源码:
Java代码 收藏代码
  1. /*
  2. *Copyright(C)2008TheAndroidOpenSourceProject
  3. *
  4. *LicensedundertheApacheLicense,Version2.0(the"License");
  5. *youmaynotusethisfileexceptincompliancewiththeLicense.
  6. *YoumayobtainacopyoftheLicenseat
  7. *
  8. *http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. *Unlessrequiredbyapplicablelaworagreedtoinwriting,software
  11. *distributedundertheLicenseisdistributedonan"ASIS"BASIS,
  12. *WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
  13. *SeetheLicenseforthespecificlanguagegoverningpermissionsand
  14. *limitationsundertheLicense.
  15. */
  16. packagecom.android.launcher;
  17. importandroid.graphics.drawable.BitmapDrawable;
  18. importandroid.graphics.drawable.Drawable;
  19. importandroid.graphics.drawable.PaintDrawable;
  20. importandroid.graphics.Bitmap;
  21. importandroid.graphics.PixelFormat;
  22. importandroid.graphics.Canvas;
  23. importandroid.graphics.PaintFlagsDrawFilter;
  24. importandroid.graphics.Paint;
  25. importandroid.graphics.Rect;
  26. importandroid.content.res.Resources;
  27. importandroid.content.Context;
  28. /**
  29. *VariousutilitiessharedamongsttheLauncher'sclasses.
  30. */
  31. finalclassUtilities{
  32. privatestaticintsIconWidth=-1;
  33. privatestaticintsIconHeight=-1;
  34. privatestaticfinalPaintsPaint=newPaint();
  35. privatestaticfinalRectsBounds=newRect();
  36. privatestaticfinalRectsOldBounds=newRect();
  37. privatestaticCanvassCanvas=newCanvas();
  38. static{
  39. sCanvas.setDrawFilter(newPaintFlagsDrawFilter(Paint.DITHER_FLAG,
  40. Paint.FILTER_BITMAP_FLAG));
  41. }
  42. /**
  43. *ReturnsaDrawablerepresentingthethumbnailofthespecifiedDrawable.
  44. *Thesizeofthethumbnailisdefinedbythedimension
  45. *android.R.dimen.launcher_application_icon_size.
  46. *
  47. *Thismethodisnotthread-safeandshouldbeinvokedontheUIthreadonly.
  48. *
  49. *@paramiconTheicontogetathumbnailof.
  50. *@paramcontextTheapplication'scontext.
  51. *
  52. *@returnAthumbnailforthespecifiediconortheiconitselfifthe
  53. *thumbnailcouldnotbecreated.
  54. */
  55. staticDrawablecreateIconThumbnail(Drawableicon,Contextcontext){
  56. if(sIconWidth==-1){
  57. finalResourcesresources=context.getResources();
  58. sIconWidth=sIconHeight=(int)resources.getDimension(android.R.dimen.app_icon_size);
  59. }
  60. intwidth=sIconWidth;
  61. intheight=sIconHeight;
  62. floatscale=1.0f;
  63. if(iconinstanceofPaintDrawable){
  64. PaintDrawablepainter=(PaintDrawable)icon;
  65. painter.setIntrinsicWidth(width);
  66. painter.setIntrinsicHeight(height);
  67. }elseif(iconinstanceofBitmapDrawable){
  68. //Ensurethebitmaphasadensity.
  69. BitmapDrawablebitmapDrawable=(BitmapDrawable)icon;
  70. Bitmapbitmap=bitmapDrawable.getBitmap();
  71. if(bitmap.getDensity()==Bitmap.DENSITY_NONE){
  72. bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics());
  73. }
  74. }
  75. inticonWidth=icon.getIntrinsicWidth();
  76. inticonHeight=icon.getIntrinsicHeight();
  77. if(width>0&&height>0){
  78. if(width<iconWidth||height<iconHeight||scale!=1.0f){
  79. finalfloatratio=(float)iconWidth/iconHeight;
  80. if(iconWidth>iconHeight){
  81. height=(int)(width/ratio);
  82. }elseif(iconHeight>iconWidth){
  83. width=(int)(height*ratio);
  84. }
  85. finalBitmap.Configc=icon.getOpacity()!=PixelFormat.OPAQUE?
  86. Bitmap.Config.ARGB_8888:Bitmap.Config.RGB_565;
  87. finalBitmapthumb=Bitmap.createBitmap(sIconWidth,sIconHeight,c);
  88. finalCanvascanvas=sCanvas;
  89. canvas.setBitmap(thumb);
  90. //Copytheoldboundstorestorethemlater
  91. //IfweweretodooldBounds=icon.getBounds(),
  92. //thecalltosetBounds()thatfollowswould
  93. //changethesameinstanceandwewouldlosethe
  94. //oldbounds
  95. sOldBounds.set(icon.getBounds());
  96. finalintx=(sIconWidth-width)/2;
  97. finalinty=(sIconHeight-height)/2;
  98. icon.setBounds(x,y,x+width,y+height);
  99. icon.draw(canvas);
  100. icon.setBounds(sOldBounds);
  101. icon=newFastBitmapDrawable(thumb);
  102. }elseif(iconWidth<width&&iconHeight<height){
  103. finalBitmap.Configc=Bitmap.Config.ARGB_8888;
  104. finalBitmapthumb=Bitmap.createBitmap(sIconWidth,sIconHeight,c);
  105. finalCanvascanvas=sCanvas;
  106. canvas.setBitmap(thumb);
  107. sOldBounds.set(icon.getBounds());
  108. finalintx=(width-iconWidth)/2;
  109. finalinty=(height-iconHeight)/2;
  110. icon.setBounds(x,y,x+iconWidth,y+iconHeight);
  111. icon.draw(canvas);
  112. icon.setBounds(sOldBounds);
  113. icon=newFastBitmapDrawable(thumb);
  114. }
  115. }
  116. returnicon;
  117. }
  118. /**
  119. *ReturnsaBitmaprepresentingthethumbnailofthespecifiedBitmap.
  120. *Thesizeofthethumbnailisdefinedbythedimension
  121. *android.R.dimen.launcher_application_icon_size.
  122. *
  123. *Thismethodisnotthread-safeandshouldbeinvokedontheUIthreadonly.
  124. *
  125. *@parambitmapThebitmaptogetathumbnailof.
  126. *@paramcontextTheapplication'scontext.
  127. *
  128. *@returnAthumbnailforthespecifiedbitmaporthebitmapitselfifthe
  129. *thumbnailcouldnotbecreated.
  130. */
  131. staticBitmapcreateBitmapThumbnail(Bitmapbitmap,Contextcontext){
  132. if(sIconWidth==-1){
  133. finalResourcesresources=context.getResources();
  134. sIconWidth=sIconHeight=(int)resources.getDimension(
  135. android.R.dimen.app_icon_size);
  136. }
  137. intwidth=sIconWidth;
  138. intheight=sIconHeight;
  139. finalintbitmapWidth=bitmap.getWidth();
  140. finalintbitmapHeight=bitmap.getHeight();
  141. if(width>0&&height>0){
  142. if(width<bitmapWidth||height<bitmapHeight){
  143. finalfloatratio=(float)bitmapWidth/bitmapHeight;
  144. if(bitmapWidth>bitmapHeight){
  145. height=(int)(width/ratio);
  146. }elseif(bitmapHeight>bitmapWidth){
  147. width=(int)(height*ratio);
  148. }
  149. finalBitmap.Configc=(width==sIconWidth&&height==sIconHeight)?
  150. bitmap.getConfig():Bitmap.Config.ARGB_8888;
  151. finalBitmapthumb=Bitmap.createBitmap(sIconWidth,sIconHeight,c);
  152. finalCanvascanvas=sCanvas;
  153. finalPaintpaint=sPaint;
  154. canvas.setBitmap(thumb);
  155. paint.setDither(false);
  156. paint.setFilterBitmap(true);
  157. sBounds.set((sIconWidth-width)/2,(sIconHeight-height)/2,width,height);
  158. sOldBounds.set(0,0,bitmapWidth,bitmapHeight);
  159. canvas.drawBitmap(bitmap,sOldBounds,sBounds,paint);
  160. returnthumb;
  161. }elseif(bitmapWidth<width||bitmapHeight<height){
  162. finalBitmap.Configc=Bitmap.Config.ARGB_8888;
  163. finalBitmapthumb=Bitmap.createBitmap(sIconWidth,sIconHeight,c);
  164. finalCanvascanvas=sCanvas;
  165. finalPaintpaint=sPaint;
  166. canvas.setBitmap(thumb);
  167. paint.setDither(false);
  168. paint.setFilterBitmap(true);
  169. canvas.drawBitmap(bitmap,(sIconWidth-bitmapWidth)/2,
  170. (sIconHeight-bitmapHeight)/2,paint);
  171. returnthumb;
  172. }
  173. }
  174. returnbitmap;
  175. }
  176. }


Java代码 收藏代码
  1. //AndroidMatrix类实现镜像方法
  2. publicvoiddrawRegion(Imageimage_src,
  3. intx_src,inty_src,
  4. intwidth,intheight,
  5. inttransform,
  6. intx_dest,inty_dest,
  7. intanchor){
  8. if((anchor&VCENTER)!=0){
  9. y_dest-=height/2;
  10. }elseif((anchor&BOTTOM)!=0){
  11. y_dest-=height;
  12. }
  13. if((anchor&RIGHT)!=0){
  14. x_dest-=width;
  15. }elseif((anchor&HCENTER)!=0){
  16. x_dest-=width/2;
  17. }
  18. BitmapnewMap=Bitmap.createBitmap(image_src.getBitmap(),x_src,y_src,width,height);
  19. MatrixmMatrix=newMatrix();
  20. Matrixtemp=newMatrix();
  21. Matrixtemp2=newMatrix();
  22. float[]mirrorY={
  23. -1,0,0,
  24. 0,1,0,
  25. 0,0,1
  26. };
  27. temp.setValues(mirrorY);
  28. switch(transform){
  29. caseSprite.TRANS_NONE:
  30. break;
  31. caseSprite.TRANS_ROT90:
  32. mMatrix.setRotate(90,width/2,height/2);
  33. break;
  34. caseSprite.TRANS_ROT180:
  35. mMatrix.setRotate(180,width/2,height/2);
  36. break;
  37. caseSprite.TRANS_ROT270:
  38. mMatrix.setRotate(270,width/2,height/2);
  39. break;
  40. caseSprite.TRANS_MIRROR:
  41. mMatrix.postConcat(temp);
  42. break;
  43. caseSprite.TRANS_MIRROR_ROT90:
  44. mMatrix.postConcat(temp);
  45. mMatrix.setRotate(90,width/2,height/2);
  46. break;
  47. caseSprite.TRANS_MIRROR_ROT180:
  48. mMatrix.postConcat(temp);
  49. mMatrix.setRotate(180,width/2,height/2);
  50. break;
  51. caseSprite.TRANS_MIRROR_ROT270:
  52. mMatrix.postConcat(temp);
  53. mMatrix.setRotate(270,width/2,height/2);
  54. break;
  55. }
  56. mMatrix.setTranslate(x_dest,y_dest);
  57. canvas.drawBitmap(newMap,mMatrix,mPaint);
  58. }


Java代码 收藏代码
  1. //图片Url保存为位图并进行缩放操作
  2. //通过传入图片url获取位图方法
  3. publicBitmapreturnBitMap(Stringurl){
  4. URLmyFileUrl=null;
  5. Bitmapbitmap=null;
  6. try{
  7. myFileUrl=newURL(url);
  8. }catch(MalformedURLExceptione){
  9. e.printStackTrace();
  10. }
  11. try{
  12. HttpURLConnectionconn=(HttpURLConnection)myFileUrl
  13. .openConnection();
  14. conn.setDoInput(true);
  15. conn.connect();
  16. InputStreamis=conn.getInputStream();
  17. bitmap=BitmapFactory.decodeStream(is);
  18. is.close();
  19. }catch(IOExceptione){
  20. e.printStackTrace();
  21. }
  22. Log.v(tag,bitmap.toString());
  23. returnbitmap;
  24. }
  25. //通过传入位图,新的宽.高比进行位图的缩放操作
  26. publicstaticDrawableresizeImage(Bitmapbitmap,intw,inth){
  27. //loadtheorigialBitmap
  28. BitmapBitmapOrg=bitmap;
  29. intwidth=BitmapOrg.getWidth();
  30. intheight=BitmapOrg.getHeight();
  31. intnewWidth=w;
  32. intnewHeight=h;
  33. Log.v(tag,String.valueOf(width));
  34. Log.v(tag,String.valueOf(height));
  35. Log.v(tag,String.valueOf(newWidth));
  36. Log.v(tag,String.valueOf(newHeight));
  37. //calculatethescale
  38. floatscaleWidth=((float)newWidth)/width;
  39. floatscaleHeight=((float)newHeight)/height;
  40. //createamatrixforthemanipulation
  41. Matrixmatrix=newMatrix();
  42. //resizetheBitmap
  43. matrix.postScale(scaleWidth,scaleHeight);
  44. //ifyouwanttorotatetheBitmap
  45. //matrix.postRotate(45);
  46. //recreatethenewBitmap
  47. BitmapresizedBitmap=Bitmap.createBitmap(BitmapOrg,0,0,width,
  48. height,matrix,true);
  49. //makeaDrawablefromBitmaptoallowtosettheBitmap
  50. //totheImageView,ImageButtonorwhatever
  51. returnnewBitmapDrawable(resizedBitmap);
  52. }


Java代码 收藏代码
  1. 1.图片加载方法,方便用户加载图片
  2. /***
  3. *加载本地图片
  4. *@paramcontext:主运行函数实例
  5. *@parambitAdress:图片地址,一般指向R下的drawable目录
  6. *@return
  7. */
  8. publicfinalBitmapCreatImage(Contextcontext,intbitAdress){
  9. Bitmapbitmaptemp=null;
  10. bitmaptemp=BitmapFactory.decodeResource(context.getResources(),
  11. bitAdress);
  12. returnbitmaptemp;
  13. }
  14. 2.图片平均分割方法,将大图平均分割为N行N列,方便用户使用
  15. /***
  16. *图片分割
  17. *
  18. *@paramg
  19. *:画布
  20. *@parampaint
  21. *:画笔
  22. *@paramimgBit
  23. *:图片
  24. *@paramx
  25. *:X轴起点坐标
  26. *@paramy
  27. *:Y轴起点坐标
  28. *@paramw
  29. *:单一图片的宽度
  30. *@paramh
  31. *:单一图片的高度
  32. *@paramline
  33. *:第几列
  34. *@paramrow
  35. *:第几行
  36. */
  37. publicfinalvoidcuteImage(Canvasg,Paintpaint,BitmapimgBit,intx,
  38. inty,intw,inth,intline,introw){
  39. g.clipRect(x,y,x+w,h+y);
  40. g.drawBitmap(imgBit,x–line*w,y–row*h,paint);
  41. g.restore();
  42. }
  43. 3.图片缩放,对当前图片进行缩放处理
  44. /***
  45. *图片的缩放方法
  46. *
  47. *@parambgimage
  48. *:源图片资源
  49. *@paramnewWidth
  50. *:缩放后宽度
  51. *@paramnewHeight
  52. *:缩放后高度
  53. *@return
  54. */
  55. publicBitmapzoomImage(Bitmapbgimage,intnewWidth,intnewHeight){
  56. //获取这个图片的宽和高
  57. intwidth=bgimage.getWidth();
  58. intheight=bgimage.getHeight();
  59. //创建操作图片用的matrix对象
  60. Matrixmatrix=newMatrix();
  61. //计算缩放率,新尺寸除原始尺寸
  62. floatscaleWidth=((float)newWidth)/width;
  63. floatscaleHeight=((float)newHeight)/height;
  64. //缩放图片动作
  65. matrix.postScale(scaleWidth,scaleHeight);
  66. Bitmapbitmap=Bitmap.createBitmap(bgimage,0,0,width,height,
  67. matrix,true);
  68. returnbitmap;
  69. }
  70. 4.绘制带有边框的文字,一般在游戏中起文字的美化作用
  71. /***
  72. *绘制带有边框的文字
  73. *
  74. *@paramstrMsg
  75. *:绘制内容
  76. *@paramg
  77. *:画布
  78. *@parampaint
  79. *:画笔
  80. *@paramsetx
  81. *::X轴起始坐标
  82. *@paramsety
  83. *:Y轴的起始坐标
  84. *@paramfg
  85. *:前景色
  86. *@parambg
  87. *:背景色
  88. */
  89. publicvoiddrawText(StringstrMsg,Canvasg,Paintpaint,intsetx,
  90. intsety,intfg,intbg){
  91. paint.setColor(bg);
  92. g.drawText(strMsg,setx+1,sety,paint);
  93. g.drawText(strMsg,setx,sety–1,paint);
  94. g.drawText(strMsg,setx,sety+1,paint);
  95. g.drawText(strMsg,setx–1,sety,paint);
  96. paint.setColor(fg);
  97. g.drawText(strMsg,setx,sety,paint);
  98. g.restore();
  99. }
  100. 5.Android图片透明度处理代码
  101. /**
  102. *图片透明度处理
  103. *
  104. *@paramsourceImg
  105. *原始图片
  106. *@paramnumber
  107. *透明度
  108. *@return
  109. */
  110. publicstaticBitmapsetAlpha(BitmapsourceImg,intnumber){
  111. int[]argb=newint[sourceImg.getWidth()*sourceImg.getHeight()];
  112. sourceImg.getPixels(argb,0,sourceImg.getWidth(),0,0,sourceImg.getWidth(),sourceImg.getHeight());//获得图片的ARGB值
  113. number=number*255/100;
  114. for(inti=0;i<argb.length;i++){
  115. argb=(number<<24)|(argb&0×00FFFFFF);//修改最高2位的值
  116. }
  117. sourceImg=Bitmap.createBitmap(argb,sourceImg.getWidth(),sourceImg.getHeight(),Config.ARGB_8888);
  118. returnsourceImg;
  119. }
  120. 6.图片翻转
  121. Resourcesres=this.getContext().getResources();
  122. img=BitmapFactory.decodeResource(res,R.drawable.slogo);
  123. Matrixmatrix=newMatrix();
  124. matrix.postRotate(90);/*翻转90度*/
  125. intwidth=img.getWidth();
  126. intheight=img.getHeight();
  127. r_img=Bitmap.createBitmap(img,0,0,width,height,matrix,true);

Java代码 收藏代码
  1. importandroid.graphics.Bitmap;
  2. importandroid.graphics.Canvas;
  3. importandroid.graphics.LinearGradient;
  4. importandroid.graphics.Matrix;
  5. importandroid.graphics.Paint;
  6. importandroid.graphics.PixelFormat;
  7. importandroid.graphics.PorterDuffXfermode;
  8. importandroid.graphics.Rect;
  9. importandroid.graphics.RectF;
  10. importandroid.graphics.Bitmap.Config;
  11. importandroid.graphics.PorterDuff.Mode;
  12. importandroid.graphics.Shader.TileMode;
  13. importandroid.graphics.drawable.Drawable;
  14. /**
  15. *
  16. *@authorsuperdev
  17. *@version1.0
  18. *
  19. */
  20. publicclassImageUtil{
  21. /**
  22. *放大缩小图片
  23. */
  24. publicstaticBitmapzoomBitmap(Bitmapbitmap,intw,inth){
  25. intwidth=bitmap.getWidth();
  26. intheight=bitmap.getHeight();
  27. Matrixmatrix=newMatrix();
  28. floatscaleWidht=((float)w/width);
  29. floatscaleHeight=((float)h/height);
  30. matrix.postScale(scaleWidht,scaleHeight);
  31. Bitmapnewbmp=Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
  32. returnnewbmp;
  33. }
  34. /**
  35. *将Drawable转化为Bitmap
  36. */
  37. publicstaticBitmapdrawableToBitmap(Drawabledrawable){
  38. intwidth=drawable.getIntrinsicWidth();
  39. intheight=drawable.getIntrinsicHeight();
  40. Bitmapbitmap=Bitmap.createBitmap(width,height,drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888:Bitmap.Config.RGB_565);
  41. Canvascanvas=newCanvas(bitmap);
  42. drawable.setBounds(0,0,width,height);
  43. drawable.draw(canvas);
  44. returnbitmap;
  45. }
  46. /**
  47. *获得圆角图片的方法
  48. */
  49. publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap,floatroundPx){
  50. Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Config.ARGB_8888);
  51. Canvascanvas=newCanvas(output);
  52. finalintcolor=0xff424242;
  53. finalPaintpaint=newPaint();
  54. finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());
  55. finalRectFrectF=newRectF(rect);
  56. paint.setAntiAlias(true);
  57. canvas.drawARGB(0,0,0,0);
  58. paint.setColor(color);
  59. canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
  60. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  61. canvas.drawBitmap(bitmap,rect,rect,paint);
  62. returnoutput;
  63. }
  64. /**
  65. *获得带倒影的图片方法
  66. */
  67. publicstaticBitmapcreateReflectionImageWithOrigin(Bitmapbitmap){
  68. finalintreflectionGap=4;
  69. intwidth=bitmap.getWidth();
  70. intheight=bitmap.getHeight();
  71. Matrixmatrix=newMatrix();
  72. matrix.preScale(1,-1);
  73. BitmapreflectionImage=Bitmap.createBitmap(bitmap,0,height/2,width,height/2,matrix,false);
  74. BitmapbitmapWithReflection=Bitmap.createBitmap(width,(height+height/2),Config.ARGB_8888);
  75. Canvascanvas=newCanvas(bitmapWithReflection);
  76. canvas.drawBitmap(bitmap,0,0,null);
  77. PaintdeafalutPaint=newPaint();
  78. canvas.drawRect(0,height,width,height+reflectionGap,deafalutPaint);
  79. canvas.drawBitmap(reflectionImage,0,height+reflectionGap,null);
  80. Paintpaint=newPaint();
  81. LinearGradientshader=newLinearGradient(0,bitmap.getHeight(),0,bitmapWithReflection.getHeight()+reflectionGap,0x70ffffff,0x00ffffff,TileMode.CLAMP);
  82. paint.setShader(shader);
  83. //SettheTransfermodetobeporterduffanddestinationin
  84. paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
  85. //Drawarectangleusingthepaintwithourlineargradient
  86. canvas.drawRect(0,height,width,bitmapWithReflection.getHeight()+reflectionGap,paint);
  87. returnbitmapWithReflection;
  88. }
  89. }

Java代码 收藏代码
  1. privatebyte[]Bitmap2Bytes(Bitmapbm){
  2. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  3. bm.compress(Bitmap.CompressFormat.PNG,100,baos);
  4. returnbaos.toByteArray();
  5. }
  6. privateBitmapBytes2Bimap(byte[]b){
  7. if(b.length!=0){
  8. returnBitmapFactory.decodeByteArray(b,0,b.length);
  9. }
  10. else{
  11. returnnull;
  12. }
  13. }
  14. /**
  15. *createthebitmapfromabytearray
  16. *生成水印图片
  17. *@paramsrcthebitmapobjectyouwantproecss
  18. *@paramwatermarkthewatermarkabovethesrc
  19. *@returnreturnabitmapobject,ifparamter'slengthis0,returnnull
  20. */
  21. privateBitmapcreateBitmap(Bitmapsrc,Bitmapwatermark)
  22. {
  23. Stringtag="createBitmap";
  24. Log.d(tag,"createanewbitmap");
  25. if(src==null)
  26. {
  27. returnnull;
  28. }
  29. intw=src.getWidth();
  30. inth=src.getHeight();
  31. intww=watermark.getWidth();
  32. intwh=watermark.getHeight();
  33. //createthenewblankbitmap
  34. Bitmapnewb=Bitmap.createBitmap(w,h,Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图
  35. Canvascv=newCanvas(newb);
  36. //drawsrcinto
  37. cv.drawBitmap(src,0,0,null);//在0,0坐标开始画入src
  38. //drawwatermarkinto
  39. cv.drawBitmap(watermark,w-ww+5,h-wh+5,null);//在src的右下角画入水印
  40. //saveallclip
  41. cv.save(Canvas.ALL_SAVE_FLAG);//保存
  42. //store
  43. cv.restore();//存储
  44. returnnewb;
  45. }
  46. /**重新编码Bitmap
  47. *
  48. *@paramsrc
  49. *需要重新编码的Bitmap
  50. *
  51. *@paramformat
  52. *编码后的格式(目前只支持png和jpeg这两种格式)
  53. *
  54. *@paramquality
  55. *重新生成后的bitmap的质量
  56. *
  57. *@return
  58. *返回重新生成后的bitmap
  59. */
  60. privatestaticBitmapcodec(Bitmapsrc,Bitmap.CompressFormatformat,
  61. intquality){
  62. ByteArrayOutputStreamos=newByteArrayOutputStream();
  63. src.compress(format,quality,os);
  64. byte[]array=os.toByteArray();
  65. returnBitmapFactory.decodeByteArray(array,0,array.length);
  66. }
  67. //Stream转换成Byte
  68. staticbyte[]streamToBytes(InputStreamis){
  69. ByteArrayOutputStreamos=newByteArrayOutputStream(1024);
  70. byte[]buffer=newbyte[1024];
  71. intlen;
  72. try{
  73. while((len=is.read(buffer))>=0){
  74. os.write(buffer,0,len);
  75. }
  76. }catch(java.io.IOExceptione){
  77. }
  78. returnos.toByteArray();
  79. }
  80. //把View转换成Bitmap
  81. /**
  82. *把一个View的对象转换成bitmap
  83. */
  84. staticBitmapgetViewBitmap(Viewv){
  85. v.clearFocus();
  86. v.setPressed(false);
  87. //能画缓存就返回false
  88. booleanwillNotCache=v.willNotCacheDrawing();
  89. v.setWillNotCacheDrawing(false);
  90. intcolor=v.getDrawingCacheBackgroundColor();
  91. v.setDrawingCacheBackgroundColor(0);
  92. if(color!=0){
  93. v.destroyDrawingCache();
  94. }
  95. v.buildDrawingCache();
  96. BitmapcacheBitmap=v.getDrawingCache();
  97. if(cacheBitmap==null){
  98. Log.e(TAG,"failedgetViewBitmap("+v+")",newRuntimeException());
  99. returnnull;
  100. }
  101. Bitmapbitmap=Bitmap.createBitmap(cacheBitmap);
  102. //Restoretheview
  103. v.destroyDrawingCache();
  104. v.setWillNotCacheDrawing(willNotCache);
  105. v.setDrawingCacheBackgroundColor(color);
  106. returnbitmap;
  107. }

Java代码 收藏代码
  1. 读取raw资源文件中的mp3文件,然后通过音乐播放器播放:
  2. /**
  3. *把mp3文件写入卡
  4. *
  5. *@paramfileName
  6. *输出的文件名(全路径)
  7. *@paramcontext
  8. *context对象
  9. */
  10. privatevoidwriteMP3ToSDcard(StringfileName,Contextcontext){
  11. byte[]buffer=newbyte[1024*8];
  12. intread;
  13. BufferedInputStreambin=newBufferedInputStream(context.getResources().openRawResource(R.raw.ring));
  14. try{
  15. BufferedOutputStreambout=newBufferedOutputStream(newFileOutputStream(fileName));
  16. while((read=bin.read(buffer))>-1){
  17. bout.write(buffer,0,read);
  18. }
  19. bout.flush();
  20. bout.close();
  21. bin.close();
  22. }catch(FileNotFoundExceptione){
  23. e.printStackTrace();
  24. }catch(IOExceptione){
  25. e.printStackTrace();
  26. }
  27. }
  28. Intentintent=newIntent();
  29. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  30. intent.setAction(android.content.Intent.ACTION_VIEW);
  31. intent.setDataAndType(Uri.fromFile(newFile("XXXXmp3的文件全路径")),"audio/*");
  32. startActivity(intent);


绘制图像倒影
Java代码 收藏代码
  1. privatevoid
  2. _Init()
  3. {
  4. m_paint=newPaint(Paint.ANTI_ALIAS_FLAG);
  5. LinearGradientlg=newLinearGradient(
  6. 0,0,0,m_nShadowH,
  7. 0xB0FFFFFF,0x00000000,
  8. Shader.TileMode.CLAMP);
  9. m_paint.setShader(lg);
  10. m_paint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
  11. }
  12. @Overrideprotectedvoid
  13. onDraw(Canvascanvas)
  14. {
  15. super.onDraw(canvas);
  16. intnX=0;
  17. intnY=20;
  18. _DrawNormalImg(canvas,nX,nY);
  19. _DrawMirror(canvas,nX,nY);
  20. }
  21. privatevoid
  22. _DrawNormalImg(Canvascanvas,intnX,intnY)
  23. {
  24. canvas.save(Canvas.MATRIX_SAVE_FLAG);
  25. canvas.translate(nX,nY);
  26. m_dw.draw(canvas);
  27. canvas.restore();
  28. }
  29. privatevoid
  30. _DrawMirror(Canvascanvas,intnX,intnY)
  31. {
  32. intnW=m_dw.getIntrinsicWidth();
  33. intnH=m_dw.getIntrinsicHeight();
  34. ///////////////////////////////////
  35. //drawmirrorimage
  36. canvas.save(Canvas.MATRIX_SAVE_FLAG);
  37. canvas.scale(1.0f,-1.0f);
  38. canvas.translate(nX,-(nY+nH*2));
  39. canvas.clipRect(0,nH,nW,nH-m_nShadowH);
  40. m_dw.draw(canvas);
  41. canvas.restore();
  42. //////////////////////////////
  43. //drawmask
  44. canvas.save();
  45. canvas.translate(nX,nY+nH);
  46. canvas.drawRect(0,0,nW,m_nShadowH,m_paint);
  47. canvas.restore();
  48. }

Android 繪圖座標體系預設的原點在左上角,X 軸往右是越來越大的正值,而 Y 軸往下,則是越來越大的正值。要畫出垂直翻轉的圖片,其實也就是要垂直翻轉整個繪圖座標體系。在 Android 中,要如何做?答案就是 canvas.scale(1.0f, -1.0f)。很簡單吧,沒想到給 scale() 函式一個負值,就可以翻轉相對應的軸。
在 Photoshop 中,做鏡像特效的第二步是要對這翻轉的圖片,加個由灰到黑的漸層 mask。
在 Android 中,要畫漸層色,那就一定得用 LinearGradient 這個類別。至於要對背景圖加上個 mask,就請參考一下 Paint 的 setXfermode() 函式。_Init() 這個函式,就是負責生成一個由灰到黑漸層 mask 的 m_paint 物件。

android Bimtap 各种图片处理方法、图片特效_第2张图片

http://blog.csdn.net/Android_Tutor/archive/2010/11/02/5981753.aspx

http://www.cnblogs.com/TerryBlog/archive/2012/01/08/2316482.html

android常用图片特效处理
http://www.eoeandroid.com/thread-170526-1-1.html

相机(Camera)实时滤镜效果
http://www.eoeandroid.com/thread-171528-1-1.html

Android, WindowsPhone7, IOS ,vc2010平台40多套图片滤镜开源
http://www.cnblogs.com/daizhj/archive/2012/05/15/2501406.html

Android实现获取本机中所有图片
http://www.cnblogs.com/hanyonglu/archive/2012/05/10/2494908.html

更多相关文章

  1. 下载显示网路图片的例子
  2. Android自动生成代码工具整理
  3. Android如何实现图片轮播
  4. Android不常用代码(1)
  5. Android获取网页源代码
  6. 图片拖动功能实现
  7. Android平台上实现图片的缩放,圆角,倒影效果
  8. android读取图片

随机推荐

  1. Android学习系列(33)--App应用之提交到各
  2. Android 使用 Ksoap2 出现的低级错误...
  3. Android(安卓)ptrace注入基础
  4. android中一些容易遗忘的知识点
  5. Android 5.0 PreferenceActivity 自动添
  6. studyjams 3B better android
  7. Android应用程序签名详解 简介
  8. Android:Failed to install UIWidgetTest
  9. Android(安卓)Adapter详解(2)
  10. Android触摸事件的传递(四-1)--输入系统-In