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

C# 超酷圖像特效(十):油畫效果實作

     編輯:關於C語言

前言

本系列第十篇,實作「油畫效果」:在鄰域內隨機取樣像素色彩,模擬油畫筆觸質感。

效果原理

  1. 設定鄰域半徑 iModel (如 2)。
  2. 對每像素,在 [x, x+iModel] × [y, y+iModel] 範圍隨機選取一像素色彩覆蓋當前像素。
  3. 隨機種子決定筆觸分佈,iModel 越大筆觸越明顯。

完整程式碼


private void btnOilPaint_Click(object sender, EventArgs e)
{
    using (var g = panel1.CreateGraphics())
    {
        int w = MyBitmap.Width, h = MyBitmap.Height;
        using (var img = MyBitmap.Clone(new RectangleF(0, 0, w, h), PixelFormat.DontCare))
        {
            var rnd = new Random();
            int model = 2;
            for (int x = w - model; x > 1; x--)
            {
                for (int y = h - model; y > 1; y--)
                {
                    int offset = rnd.Next(100000) % model;
                    Color c = img.GetPixel(x + offset, y + offset);
                    img.SetPixel(x, y, c);
                }
            }
            g.Clear(Color.White);
            g.DrawImage(img, new Rectangle(0, 0, w, h));
        }
    }
}

效果圖

油畫效果

改進方向

  • 使用 LockBits 存取像素資料,大幅提升速度。
  • 引入雙向邊緣保濾波 (Bilateral Filter) 取代隨機取樣,品質更穩定。
  • 支援筆觸方向、大小、顏色濃淡參數化。

結語

簡單的隨機鄰域取樣即可產生油畫質感。結合高效像素存取與進階濾波演算法,可達到專業級非真實感渲染 (NPR) 效果。

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