这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的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. 基于AsyncTask的图片下载

    有一阵子没有写程序,连基本的AsyncTask用法都记不清楚了,复习一下于是有了下面的图片加载类. package com.hitech.download; import java.io.IOExce ...

  2. jquery easyui a标记方法传值问题

    今天开发一个功能,其操作的按钮式是一个点击的a标记,并且是动态生成的,其点击方法需要传参数具体代码如下 {field:'time',title:'日程时间',width:200,align:'cent ...

  3. PostgreSQL Replication之第七章 理解Linux高可用(3)

    7.3 高可用软件的历史 有大量的专有的和开源的高可用性软件.专有的例子有:Solaris Cluster (有时称为Sun 集群 or SunCluster), SteelEye LifeKeepe ...

  4. 《剑指offer》二维数组中的查找

    一.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.输入描述 ar ...

  5. HDU-2050 折线分割平面 找规律&递推

    题目链接:https://cn.vjudge.net/problem/HDU-2050 题意 算了吧,中文题不解释了 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线 ...

  6. [JSOI2007]文本生成器(AC自动机+DP)

    题意 给你n个串.问有多少长度为m的串使得这n个串至少在其中出现过一次.输出答案膜10007意义下的结果. (n<=100,每个串的长度<=100) 题解 在AC自动机上跑DP. 用到一个 ...

  7. CF209C Trails and Glades(欧拉路)

    题意 最少添加多少条边,使无向图有欧拉回路. n,m≤106 题解 求出每个点的度数 奇度数点需要连一条新边 仅有偶度数点的连通块需要连两条新边 答案为上面统计的新边数 / 2 注意:此题默认以1为起 ...

  8. SweetAlert的入门

    在做后台管理系统,在用户交互这块(弹窗.提示相关),用了一款还不错的插件SweetAlert(一款原生js提示框,允许自定义,支持设置提示框标题.提示类型.确认取消按钮文本.点击后回调函数等等), 效 ...

  9. caioj 1106 树形动态规划(TreeDP)1:加分二叉树

    解这道题的前提是非常熟悉中序遍历的方式 我就是因为不熟悉而没有做出来 中序遍历是5 7 1 2 10的话,如果1是根节点 那么5 7 1就是1的左子树,2, 10就是右子树 这就有点中链式dp的味道了 ...

  10. HDU 4406 GPA

    GPA Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 440664 ...