C#将图片进行马赛克处理

 

/// <summary>
     /// 马赛克处理
     /// </summary>
     /// <param name="bitmap"></param>
     /// <param name="effectWidth"> 影响范围 每一个格子数 </param>
     /// <returns></returns>
     public System.Drawing.Bitmap AdjustTobMosaic(System.Drawing.Bitmap bitmap, int effectWidth)
     {
         // 差异最多的就是以照一定范围取样 玩之后直接去下一个范围
         for (int heightOfffset = 0; heightOfffset < bitmap.Height; heightOfffset += effectWidth)
         {
             for (int widthOffset =0; widthOffset < bitmap.Width; widthOffset += effectWidth)
             {
                 int avgR = 0, avgG = 0, avgB = 0;
                 int blurPixelCount = 0;
 
                 for (int x = widthOffset; (x < widthOffset + effectWidth && x < bitmap.Width); x++)
                 {
                     for (int y = heightOfffset; (y < heightOfffset + effectWidth && y < bitmap.Height); y++)
                     {
                         System.Drawing.Color pixel = bitmap.GetPixel(x, y);
 
                         avgR += pixel.R;
                         avgG += pixel.G;
                         avgB += pixel.B;
 
                         blurPixelCount++;
                     }
                 }
 
                 // 计算范围平均
                 avgR = avgR / blurPixelCount;
                 avgG = avgG / blurPixelCount;
                 avgB = avgB / blurPixelCount;
 
 
                 // 所有范围内都设定此值
                 for (int x = widthOffset; (x < widthOffset + effectWidth && x < bitmap.Width); x++)
                 {
                     for (int y = heightOfffset; (y < heightOfffset + effectWidth && y < bitmap.Height); y++)
                     {
 
                         System.Drawing.Color newColor = System.Drawing.Color.FromArgb(avgR, avgG, avgB);
                         bitmap.SetPixel(x, y, newColor);
                     }
                 }
             }
         }
 
         return bitmap;
     }

 

posted @ 2017-05-27 14:25  君莫笑·秋  阅读(1779)  评论(0编辑  收藏  举报