图象处理算法(五)

五、马赛克
  在指定大小的范围内,图象的颜色取成相同的。
 1        public static bool Mosaic(Bitmap b, int PixelSize)
 2        {
 3            BitmapData bmData = b.LockBits(new Rectangle(00, b.Width, b.Height), 
 4                ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
 5            int stride = bmData.Stride;
 6            System.IntPtr Scan0 = bmData.Scan0;
 7            unsafe
 8            {
 9                byte * p = (byte *)(void *)Scan0;
10                int nOffset = stride - b.Width*3;
11                int blue = 0, green = 0, red = 0;
12                Random rad = new Random();
13                for(int y=0;y<b.Height;++y)
14                {
15                    for(int x=0; x < b.Width; ++x )
16                    {
17                    if (y % PixelSize == 0)
18                    {
19                         if (x % PixelSize == 0)
20                         {
21                          blue = p[0]; green = p[1]; red = p[2];
22                         }
    
23                         else
24                         {
25                          p[0= (byte)blue;
26                          p[1= (byte)green;
27                          p[2= (byte)red;
28                         }

29                    }

30                    else
31                    
32                         byte * pTemp = p - bmData.Stride;
33
34                         p[0= (byte)pTemp[0];
35                         p[1= (byte)pTemp[1];
36                         p[2= (byte)pTemp[2];
37                        }

38                        p += 3;
39                    }

40                    p += nOffset;
41                }

42            }

43            b.UnlockBits(bmData);
44            return true;
45        }
原文地址:https://www.cnblogs.com/faib/p/661049.html