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

+

代码:

  1. /**
  2. * 图片效果叠加
  3. * @param bmp 限制了尺寸大小的Bitmap
  4. * @return
  5. */
  6. private Bitmap overlay(Bitmap bmp)
  7. {
  8. long start = System.currentTimeMillis();
  9. int width = bmp.getWidth();
  10. int height = bmp.getHeight();
  11. Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
  12. // 对边框图片进行缩放
  13. Bitmap overlay = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.rainbow_overlay);
  14. int w = overlay.getWidth();
  15. int h = overlay.getHeight();
  16. float scaleX = width * 1F / w;
  17. float scaleY = height * 1F / h;
  18. Matrix matrix = new Matrix();
  19. matrix.postScale(scaleX, scaleY);
  20. Bitmap overlayCopy = Bitmap.createBitmap(overlay, 0, 0, w, h, matrix, true);
  21. int pixColor = 0;
  22. int layColor = 0;
  23. int pixR = 0;
  24. int pixG = 0;
  25. int pixB = 0;
  26. int pixA = 0;
  27. int newR = 0;
  28. int newG = 0;
  29. int newB = 0;
  30. int newA = 0;
  31. int layR = 0;
  32. int layG = 0;
  33. int layB = 0;
  34. int layA = 0;
  35. final float alpha = 0.5F;
  36. int[] srcPixels = new int[width * height];
  37. int[] layPixels = new int[width * height];
  38. bmp.getPixels(srcPixels, 0, width, 0, 0, width, height);
  39. overlayCopy.getPixels(layPixels, 0, width, 0, 0, width, height);
  40. int pos = 0;
  41. for (int i = 0; i < height; i++)
  42. {
  43. for (int k = 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. long end = System.currentTimeMillis();
  69. Log.d("may", "overlayAmeliorate used time="+(end - start));
  70. return bitmap;
  71. }

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

最新文章

  1. sql 入门经典(第五版) Ryan Stephens 学习笔记 后续——存储引擎
  2. Maven_pom.xml介绍
  3. 带连接池的netty客户端核心功能实现剖解
  4. C++ 中的名称冲突之 &quot;y1&quot;
  5. lintcode:接雨水
  6. OC6_代理的基本概念
  7. LNMP下防跨站、跨目录安全设置,仅支持PHP 5.3.3以上版本
  8. 自动生成 Lambda查询和排序,从些查询列表so easy
  9. 关于IoCallDriver
  10. MTK Android4.0.3 ICS 添加缅甸语Myanmar
  11. spring mvc接收JSON格式的参数
  12. Spring Boot 整合 MyBatis
  13. [APIO/ctsc2007]
  14. windows8.1全角与半角切换快捷键
  15. Perl系列文章
  16. repo命令详解
  17. A. 【UNR #1】争夺圣杯
  18. 体验godaddy域名转入,添加A记录,及使用dnspod的NS
  19. js获取元素到屏幕左上角的距离
  20. vs2017预览版下载

热门文章

  1. 洛谷——P1970 花匠
  2. SharePoint Search之(五)Query spelling correction— 查询拼写纠正
  3. UI_UISegmentedControl 控件
  4. android系统又一次刷ROM简记(一)
  5. 在Maven项目中关于SSM框架中邮箱验证登陆
  6. BZOJ1306: [CQOI2009]match循环赛
  7. 融云消息接口apicloud
  8. 解决The requested resource is not available的办法
  9. IntelliJ IDEA springmvc demo
  10. Docker学习总结(6)——通过 Docker 化一个博客网站来开启我们的 Docker 之旅