这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的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. Laravel-路由组和中间件

    Laravel-路由组和中间件 标签(空格分隔): php 定义路由组 Route::group(['prefix'=>'Anime'], function(){ Rout::match(['g ...

  2. The evolution of cluster scheduler architectures--转

    原文地址:http://www.firmament.io/blog/scheduler-architectures.html cluster schedulers are an important c ...

  3. python3.x学习笔记3(基础知识)

    1.集合集合是一个无序的,不重复的数据组合,作用如下: >>去重,把一个列表变成集合,就自动去重 >>关系测试,测试两组数据之前的交集.差集.并集等关系 2.关系运算 交集: ...

  4. javascript面向对象编程,带你认识封装、继承和多态

    原文链接:点我 周末的时候深入的了解了下javascript的面向对象编程思想,收获颇丰,感觉对面向对象编程有了那么一丢丢的了解了~很开森 什么是面向对象编程 先上一张图,可以对面向对象有一个大致的了 ...

  5. Timestamp 转 date

    Timestamp startTime = new Timestamp(new Date().getTime());

  6. shell应用之批量添加用户实例

    这里要实现功能介绍 读取一个用户列表文件 给列表中的用户添加随机密码需要包含大小写字符和数字 保存对应的用户和密码文件 这些用户属于同个用户组 1.列表文件 [root@mail ~]# cat li ...

  7. Delayer 基于 Redis 的延迟消息队列中间件

    Delayer 基于 Redis 的延迟消息队列中间件,采用 Golang 开发,支持 PHP.Golang 等多种语言客户端. 参考 有赞延迟队列设计 中的部分设计,优化后实现. 项目链接:http ...

  8. python在leecode刷题-第一题和第七题

    class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] num ...

  9. 大话设计模式C++实现-第15章-抽象工厂模式

    一.UML图 二.概念 抽象方法模式(Abstract Factory):提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们详细的类. 三.包括的角色 (1)抽象工厂 (2)详细工厂:包含详细 ...

  10. JAVA 不同类载入器命名空间的理解

                曾经一直有这样一个疑惑: 都说在JAVA中,由不同类载入器载入的类在虚拟机中位于不同的命名空间下,不同命名空间下的类相互不可见. 这让我产生了一个迷惑:假设有一个类A使用了ja ...