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

C# 超酷圖像特效(十二):積木效果實作

     編輯:關於C語言

前言

本系列第十二篇,實作「積木效果」:將圖像像素按平均亮度二值化為黑/白,呈現類積木塊視覺風格。

效果原理

  1. 取得每像素 RGB 平均值 avg = (R+G+B)/3。
  2. 閾值 128:avg >= 128 → 白 (255),否則 黑 (0)。
  3. 將處理後像素寫回位圖,繪製至畫布。

完整程式碼


private void btnBlockEffect_Click(object sender, EventArgs e)
{
    try
    {
        using (var g = panel1.CreateGraphics())
        using (var src = MyBitmap)
        {
            int w = src.Width, h = src.Height;
            using (var bmp = src.Clone(new RectangleF(0, 0, w, h), PixelFormat.DontCare))
            {
                for (int x = 0; x < w - 1; x++)
                {
                    for (int y = 0; y < h - 1; y++)
                    {
                        Color c = bmp.GetPixel(x, y);
                        int avg = (c.R + c.G + c.B) / 3;
                        int v = avg >= 128 ? 255 : 0;
                        bmp.SetPixel(x, y, Color.FromArgb(255, v, v, v));
                    }
                }
                g.Clear(Color.WhiteSmoke);
                g.DrawImage(bmp, new Rectangle(0, 0, w, h));
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "提示");
    }
}

效果圖

積木效果

優化建議

  • LockBits:取代 GetPixel/SetPixel,速度提升 100 倍以上。
  • 平行處理:Parallel.For 分行處理。
  • 動態閾值:Otsu 自適應二值化,效果更佳。

系列總結

本系列展示 12 種靜態圖像特效(底片、浮雕、黑白、柔化、銳化、霧化、光照、百葉窗、馬賽克、油畫、積木),核心類別:Bitmap、Graphics、Color、Rectangle。關鍵方法:Graphics.DrawImage (30 種多載),習慣用 DrawImage(Image, Rectangle) ——「把特定效果的圖裝進特定效果的框」。

結語

靜態特效是基礎,後續可擴充動態效果(分塊合成、四周擴散、上下對接)。原理相通,掌握像素級操作與 Graphics 繪圖管線,即可實作豐富視覺應用。

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