这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片叠加两篇文章,此篇所讲的与之前有一点区别。叠加原理是两张图片的像素点按透明度叠加,不会进行颜色过滤。叠加图片可以是JPG格式,跟前在一样,最好是放大assets目录。下面看效果图:

Android图片特效处理之图片叠加_第1张图片+Android图片特效处理之图片叠加_第2张图片Android图片特效处理之图片叠加_第3张图片

代码:

[java] view plain copy
  1. /**
  2. *图片效果叠加
  3. *@parambmp限制了尺寸大小的Bitmap
  4. *@return
  5. */
  6. privateBitmapoverlay(Bitmapbmp)
  7. {
  8. longstart=System.currentTimeMillis();
  9. intwidth=bmp.getWidth();
  10. intheight=bmp.getHeight();
  11. Bitmapbitmap=Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);
  12. //对边框图片进行缩放
  13. Bitmapoverlay=BitmapFactory.decodeResource(mContext.getResources(),R.drawable.rainbow_overlay);
  14. intw=overlay.getWidth();
  15. inth=overlay.getHeight();
  16. floatscaleX=width*1F/w;
  17. floatscaleY=height*1F/h;
  18. Matrixmatrix=newMatrix();
  19. matrix.postScale(scaleX,scaleY);
  20. BitmapoverlayCopy=Bitmap.createBitmap(overlay,0,0,w,h,matrix,true);
  21. intpixColor=0;
  22. intlayColor=0;
  23. intpixR=0;
  24. intpixG=0;
  25. intpixB=0;
  26. intpixA=0;
  27. intnewR=0;
  28. intnewG=0;
  29. intnewB=0;
  30. intnewA=0;
  31. intlayR=0;
  32. intlayG=0;
  33. intlayB=0;
  34. intlayA=0;
  35. finalfloatalpha=0.5F;
  36. int[]srcPixels=newint[width*height];
  37. int[]layPixels=newint[width*height];
  38. bmp.getPixels(srcPixels,0,width,0,0,width,height);
  39. overlayCopy.getPixels(layPixels,0,width,0,0,width,height);
  40. intpos=0;
  41. for(inti=0;i<height;i++)
  42. {
  43. for(intk=0;k<width;k++)
  44. {
  45. pos=i*width+k;
  46. pixColor=srcPixels[pos];
  47. layColor=layPixels[pos];
  48. pixR=Color.red(pixColor);
  49. pixG=Color.green(pixColor);
  50. pixB=Color.blue(pixColor);
  51. pixA=Color.alpha(pixColor);
  52. layR=Color.red(layColor);
  53. layG=Color.green(layColor);
  54. layB=Color.blue(layColor);
  55. layA=Color.alpha(layColor);
  56. newR=(int)(pixR*alpha+layR*(1-alpha));
  57. newG=(int)(pixG*alpha+layG*(1-alpha));
  58. newB=(int)(pixB*alpha+layB*(1-alpha));
  59. layA=(int)(pixA*alpha+layA*(1-alpha));
  60. newR=Math.min(255,Math.max(0,newR));
  61. newG=Math.min(255,Math.max(0,newG));
  62. newB=Math.min(255,Math.max(0,newB));
  63. newA=Math.min(255,Math.max(0,layA));
  64. srcPixels[pos]=Color.argb(newA,newR,newG,newB);
  65. }
  66. }
  67. bitmap.setPixels(srcPixels,0,width,0,0,width,height);
  68. longend=System.currentTimeMillis();
  69. Log.d("may","overlayAmeliorateusedtime="+(end-start));
  70. returnbitmap;
  71. }


叠加的边框图片还是大点比较好,也要控制被叠加图片大小。alpha变量值可以根据需求修改,建议还是大于0.5比较好,不然原图会看不清楚。

更多相关文章

  1. android sqlite 存储图片
  2. 学习笔记之——Android中的Picasso实现圆形头像、圆角图片工具类
  3. ndroid显示在线图片
  4. Android 根据所给的图片位置获得Thumbnail
  5. Android HttpURLConnection上传图片至Servlet端指定目录
  6. Android当中显示网络图片
  7. android通过Intent调用手机图片,音频,视频录音拍照等代码
  8. android通过图片名称获取资源识别码

随机推荐

  1. Android(安卓)Edittext设置android:imeOp
  2. Android获取屏幕分辨率及DisplayMetrics
  3. Android(安卓)实现QQ第三方登录
  4. 转Android系统架构
  5. Android客户端与服务器交互方式(1)
  6. android进程重启及activity恢复
  7. Android探索之旅 | 面向对象和Java基础
  8. 性能优化——Android图片压缩与优化的几
  9. Android开发者必须深入学习的10个应用开
  10. 几个应用开源项目