GDI+图片磨砂玻璃效果的实现
GDI+图片毛玻璃效果的实现
分享一个图片毛玻璃效果的算法
原理:
从原像素的某个范围内随机选取一部分像素,讲其进行Alpha混合模糊得到目标像素值
下面上代码:
分享一个图片毛玻璃效果的算法
原理:
从原像素的某个范围内随机选取一部分像素,讲其进行Alpha混合模糊得到目标像素值
下面上代码:
/// <summary>
/// 对颜色数组进行混合
/// </summary>
/// <param name="colors"></param>
/// <returns></returns>
public static Color BlendColor(Color[] colors)
{
if (colors.Length <= 0)
return Color.Transparent;
ulong asum = 0, rsum = 0, gsum = 0, bsum = 0;
for (int i = 0, len = colors.Length; i < len; i++)
{
asum += colors[i].A;
rsum += (ulong)(colors[i].A*colors[i].R);
gsum += (ulong)(colors[i].G*colors[i].A);
bsum += (ulong)(colors[i].B*colors[i].A);
}
if (asum == 0)
return Color.Transparent;
rsum /= asum;
gsum /= asum;
bsum /= asum;
asum /= (ulong)colors.Length;
return Color.FromArgb((int)asum, (int)rsum, (int)gsum, (int)bsum);
}
/// <summary>
/// 毛玻璃效果
/// </summary>
/// <param name="srcBmp">源图片</param>
/// <param name="minRadius">最小离散半径</param>
/// <param name="maxRadius">最大离散半径</param>
/// <param name="samples">采样点数</param>
/// <returns></returns>
public static Bitmap FrostedEffect(Bitmap srcBmp, int minRadius, int maxRadius, int samples)
{
int width = srcBmp.Width;