五、马赛克
在指定大小的范围内,图象的颜色取成相同的。
在指定大小的范围内,图象的颜色取成相同的。
1
public static bool Mosaic(Bitmap b, int PixelSize)
2
{
3
BitmapData bmData = b.LockBits(new Rectangle(0, 0, 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
}
public static bool Mosaic(Bitmap b, int PixelSize)2
{3
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), 4
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);5
int stride = bmData.Stride;6
System.IntPtr Scan0 = bmData.Scan0;7
unsafe8
{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
else24
{25
p[0] = (byte)blue;26
p[1] = (byte)green;27
p[2] = (byte)red;28
}29
}30
else31
{ 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
}

浙公网安备 33010602011771号