• 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.     }  
  • 相关阅读:
    POJ3320 Jessica's Reading Problem
    POJ3320 Jessica's Reading Problem
    CodeForces 813B The Golden Age
    CodeForces 813B The Golden Age
    An impassioned circulation of affection CodeForces
    An impassioned circulation of affection CodeForces
    Codeforces Round #444 (Div. 2) B. Cubes for Masha
    2013=7=21 进制转换
    2013=7=15
    2013=7=14
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6722068.html
Copyright © 2020-2023  润新知