首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 超酷圖像特效(六):霧化效果實作

     編輯:關於C語言

前言

本系列第六篇,實作「霧化效果」:引入隨機位移打亂像素位置,產生毛玻璃/霧氣視覺感覺。

效果原理

  1. 對每像素 (x,y),產生隨機偏移 (dx, dy),範圍 [0, 18]。
  2. 目標像素取自 src[x+dx, y+dy],邊界裁剪。
  3. 隨機種子每像素重新產生 (原碼缺陷),導致極度混亂;改進可使用固定種子或 Perlin Noise。

完整程式碼


private void btnFrost_Click(object sender, EventArgs e)
{
    try
    {
        int w = pictureBox1.Image.Width, h = pictureBox1.Image.Height;
        using (var newBmp = new Bitmap(w, h))
        using (var oldBmp = (Bitmap)pictureBox1.Image)
        {
            var rnd = new Random();
            for (int x = 1; x < w - 1; x++)
                for (int y = 1; y < h - 1; y++)
                {
                    int k = rnd.Next(123456);
                    int dx = Math.Min(w - 1, x + k % 19);
                    int dy = Math.Min(h - 1, y + k % 19);
                    newBmp.SetPixel(x, y, oldBmp.GetPixel(dx, dy));
                }
            pictureBox1.Image = newBmp;
        }
    }
    catch (Exception ex) { MessageBox.Show(ex.Message, "提示"); }
}

效果圖

霧化效果

改進方向

  • 相干隨機:使用 Perlin/Simplex Noise 產生平滑位移場,避免閃爍噪點。
  • 高斯模糊:真正的霧化通常指高斯模糊,可用可分離卷積核高效實現。
  • LockBits:批次像素存取,速度提升百倍。

結語

簡單隨機位移即可產生霧化視覺,但品質有限。理解噪聲函數、卷積核、高效像素存取,是進階圖像處理的必經之路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved