• android 图片特效处理之 光晕效果


    这篇将讲到图片特效处理的图片光晕效果。跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果android图像处理系列之十三--图片特效处理之六-光照效果。实现的效果是圆圈之内图片像素点不变,圆圈之外的点做模糊处理。所以用到了模糊效果和光照效果里面的是否是在圆圈内的算法,可以说是上面提到的两篇的效果的组合。

    下面看效果图:

    原图:


    效果图:


    光晕效果看得不是很明显,模糊强度不够,但是还能明显看到图片中有一个圆圈,圈内区域要比圈外区域看得清楚一点(MM的左右脸就可以看到效果)。处理效果不是很理想,在此只能抛砖引玉。下面贴代码:

      1. /** 
      2.      * 光晕效果 
      3.      * @param bmp 
      4.      * @param x 光晕中心点在bmp中的x坐标 
      5.      * @param y 光晕中心点在bmp中的y坐标 
      6.      * @param r 光晕的半径 
      7.      * @return 
      8.      */  
      9.     public Bitmap halo(Bitmap bmp, int x, int y, float r)  
      10.     {  
      11.         long start = System.currentTimeMillis();  
      12.         // 高斯矩阵  
      13.         int[] gauss = new int[] { 1, 2, 1, 2, 4, 2, 1, 2, 1 };  
      14.           
      15.         int width = bmp.getWidth();  
      16.         int height = bmp.getHeight();  
      17.         Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);  
      18.           
      19.         int pixR = 0;  
      20.         int pixG = 0;  
      21.         int pixB = 0;  
      22.           
      23.         int pixColor = 0;  
      24.           
      25.         int newR = 0;  
      26.         int newG = 0;  
      27.         int newB = 0;  
      28.           
      29.         int delta = 18; // 值越小图片会越亮,越大则越暗  
      30.           
      31.         int idx = 0;  
      32.         int[] pixels = new int[width * height];  
      33.         bmp.getPixels(pixels, 0, width, 0, 0, width, height);  
      34.         for (int i = 1, length = height - 1; i < length; i++)  
      35.         {  
      36.             for (int k = 1, len = width - 1; k < len; k++)  
      37.             {  
      38.                 idx = 0;  
      39.                 int distance = (int) (Math.pow(k - x, 2) + Math.pow(i - y, 2));  
      40.                 // 不是中心区域的点做模糊处理  
      41.                 if (distance > r * r)  
      42.                 {  
      43.                     for (int m = -1; m <= 1; m++)  
      44.                     {  
      45.                         for (int n = -1; n <= 1; n++)  
      46.                         {  
      47.                             pixColor = pixels[(i + m) * width + k + n];  
      48.                             pixR = Color.red(pixColor);  
      49.                             pixG = Color.green(pixColor);  
      50.                             pixB = Color.blue(pixColor);  
      51.                               
      52.                             newR = newR + (int) (pixR * gauss[idx]);  
      53.                             newG = newG + (int) (pixG * gauss[idx]);  
      54.                             newB = newB + (int) (pixB * gauss[idx]);  
      55.                             idx++;  
      56.                         }  
      57.                     }  
      58.                       
      59.                     newR /= delta;  
      60.                     newG /= delta;  
      61.                     newB /= delta;  
      62.                       
      63.                     newR = Math.min(255, Math.max(0, newR));  
      64.                     newG = Math.min(255, Math.max(0, newG));  
      65.                     newB = Math.min(255, Math.max(0, newB));  
      66.                       
      67.                     pixels[i * width + k] = Color.argb(255, newR, newG, newB);  
      68.                       
      69.                     newR = 0;  
      70.                     newG = 0;  
      71.                     newB = 0;  
      72.                 }  
      73.             }  
      74.         }  
      75.           
      76.         bitmap.setPixels(pixels, 0, width, 0, 0, width, height);  
      77.         long end = System.currentTimeMillis();  
      78.         Log.d("may", "used time="+(end - start));  
      79.         return bitmap;  
      80.     } 
  • 相关阅读:
    长春理工大学第十四届程序设计竞赛F Successione di Fixoracci——找规律&&水题
    长春理工大学第十四届程序设计竞赛A Rubbish——并查集&&联通块
    长春理工大学第十四届程序设计竞赛D Capture The Flag——哈希&&打表
    2018ccpc吉林 E:THE TOWER——数形结合
    区间第K小——可持久化线段树模板
    牛客练习赛3 贝伦卡斯泰露——队列&&爆搜
    [LeetCode] Find Peak Element
    [LeetCode] Intersection of Two Linked Lists
    C++静态库与动态库
    模板的全特化与偏特化
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6722648.html
Copyright © 2020-2023  润新知