本文共 1635 字,大约阅读时间需要 5 分钟。
[函数名称]
图像油画效果 OilpaintingProcess(WriteableBitmap src)
[算法说明]
图像油画效果可以看作是轻度的雾化,因此我们只需将雾化的阈值设置为2即可,雾化效果在下一小节有详细介绍。
[函数代码]
////// Oil painting process. /// /// The source image. ///public static WriteableBitmap OilpaintingProcess(WriteableBitmap src)图像油画效果 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; WriteableBitmap srcImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); byte[] tempMask = (byte[])temp.Clone(); Random ran = new Random(); int k = 0; int dx = 0; int dy = 0; for (int j = 0; j < h; j++) { for (int i = 1; i < w; i++) { k = ran.Next(2); dx = (i + k) >= w ? w - 1 : (i + k); dy = (j + k) >= h ? h - 1 : (j + k); temp[i * 4 + j * w * 4] = (byte)tempMask[dx * 4 + dy * w * 4]; temp[i * 4 + 1 + j * w * 4] = (byte)tempMask[dx * 4 + 1 + dy * w * 4]; temp[i * 4 + 2 + j * w * 4] = (byte)tempMask[dx * 4 + 2 + dy * w * 4]; } } Stream sTemp = srcImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(temp, 0, w * 4 * h); return srcImage; } else { return null; } }
[图像效果]