android字体 光晕,数字图像处理软件-特效–光晕特效(五)

光晕特效在于凸显一个光圈:

下面是效果图

e5a447c644e01e14b128191ec64d4776.png

/**

* 光晕效果

* @param bmp

* @param x 光晕中心点在bmp中的x坐标

* @param y 光晕中心点在bmp中的y坐标

* @param r 光晕的半径

* @return

*/

public static Bitmap halo(Bitmap bmp, int x, int y, float r)

{

long start = System.currentTimeMillis();

// 高斯矩阵

int[] gauss = new int[] { 1, 2, 1, 2, 4, 2, 1, 2, 1 };

int width = bmp.getWidth();

int height = bmp.getHeight();

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

int pixR = 0;

int pixG = 0;

int pixB = 0;

int pixColor = 0;

int newR = 0;

int newG = 0;

int newB = 0;

int delta = 18; // 值越小图片会越亮,越大则越暗

int idx = 0;

int[] pixels = new int[width * height];

bmp.getPixels(pixels, 0, width, 0, 0, width, height);

for (int i = 1, length = height – 1; i

{

for (int k = 1, len = width – 1; k

{

idx = 0;

int distance = (int) (Math.pow(k – x, 2) + Math.pow(i – y, 2));

// 不是中心区域的点做模糊处理

if (distance > r * r)

{

for (int m = -1; m

{

for (int n = -1; n

{

pixColor = pixels[(i + m) * width + k + n];

pixR = Color.red(pixColor);

pixG = Color.green(pixColor);

pixB = Color.blue(pixColor);

newR = newR + (int) (pixR * gauss[idx]);

newG = newG + (int) (pixG * gauss[idx]);

newB = newB + (int) (pixB * gauss[idx]);

idx++;

}

}

newR /= delta;

newG /= delta;

newB /= delta;

newR = Math.min(255, Math.max(0, newR));

newG = Math.min(255, Math.max(0, newG));

newB = Math.min(255, Math.max(0, newB));

pixels[i * width + k] = Color.argb(255, newR, newG, newB);

newR = 0;

newG = 0;

newB = 0;

}

}

}

bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

long end = System.currentTimeMillis();

Log.d(“may”, “used time=”+(end – start));

return bitmap;

}

如上所说我们需要对圆做设置:1.圆心的XY。2.圆的半径。

有了这些设定,我们就可以确定圆圈的范围,对园内和圆外做不同的操作,这里我让圆内保持不变,圆外改变

这样就完成了,当然大家可以针对园内做成亮色,把离圆心近的地方做更深程度的亮色,这样就有光线的感觉了

相关资源:unity光晕插件UnityAsset-GlowEffect(MobileFriendly)v1.2.3…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月20日
下一篇 2021年4月20日

相关推荐