这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的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比较好,不然原图会看不清楚。

android 图片特效处理之图片叠加的更多相关文章

  1. android 图片特效处理之 图片叠加

    这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...

  2. android图片特效处理之图片叠加

    这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...

  3. 图片特效-仿 iPhone 图片查看器效果

    —————————————————————— <script type="text/javascript">                    var arr = ...

  4. android 图片特效处理之 光晕效果

    这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...

  5. android 图片特效处理之光晕效果

    这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...

  6. android图片特效处理之光晕效果

    这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...

  7. android 图片特效处理之怀旧效果

    图片特效处理系列将介绍图片的像素点的特效处理,这些物资注重的是原理.也就是说只要你知道这些算法不管是C++,VB,C#,Java都可以做出相同的特效.下面将介绍图片怀旧效果的算法.算法如下: 上面公式 ...

  8. android图片特效处理之怀旧效果

    图片特效处理系列将介绍图片的像素点的特效处理,这些物资注重的是原理.也就是说只要你知道这些算法不管是C++,VB,C#,Java都可以做出相同的特效.下面将介绍图片怀旧效果的算法.算法如下: 上面公式 ...

  9. android图片特效处理之模糊效果

    这篇将讲到图片特效处理的模糊效果.跟前面一样是对像素点进行处理,算法是通用的,但耗时会更长,至于为什么,看了下面的代码你就会明白. 算法: 一.简单算法:将像素点周围八个点包括自身一共九个点的RGB值 ...

随机推荐

  1. EntityFramework学习笔记1--安装

    1.新建项目 2.工具=>NuGet程序包管理器=>程序包管理控制器 3.PM> Install-Package EntityFramework 安装EF

  2. 模拟select样式,自定义下拉列表为树结构

    效果图如下: 首先,需要用到的库jQuery,zTree(官网API:http://www.treejs.cn/v3/api.php) 注意:因为zTree是基于jQuery的,所以应该先引入jQue ...

  3. Angular2/Ionic2集成Promact/md2.md

    最近想找一套比较完整的基于Material风格的Angular2的控件库,有两个选择一个是Angular官方的Material2,但是这套库的DatePicker控件目前只能支持年月日,不支持时分秒, ...

  4. core组件进阶

    访问图像像素 存储方式 BGR连续存储有助于提升图像扫描速度. isContinuous()判断是否是连续存储. 颜色空间缩减 仅用这些颜色中具有代表性的很小的部分,就足以达到同样的效果. 将现有颜色 ...

  5. celery 学习

    1. 列出计划的ETA任务(worker) celery -A proj inspect scheduled 参考文档:http://docs.celeryproject.org/en/latest/ ...

  6. Java基础学习总结(15)——java读取properties文件总结

    一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...

  7. python通过sigar收集服务器信息

    http://blog.csdn.net/mirahs/article/details/49681787

  8. Bitmap缓存机制

    Bitmap缓存机制 载入一个bitmap到UI里面比較简单直接.可是,假设我们一次载入大量的bitmap数据的时候就变得复杂了.很多情况下(比方这些组件:ListVIew,GridView或者Vie ...

  9. void指针 (补充)

    void* 表示空指针.空指针不能直接使用,比如,指针的加减法操作(由于不知道类型,无法确定偏移的大小).某些情况下.不知道指针的类型,先用void*来取代,依据须要再强制转换成须要的指针类型使用. ...

  10. Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable

    一.Exectuor框架简介 Java从1.5版本开始,为简化多线程并发编程,引入全新的并发编程包:java.util.concurrent及其并发编程框架(Executor框架). Executor ...