七、扩散
将xOffset与yOffset范围内的随机点颜色值移到当前位置显示。换种方式说,也就是将当前的点移到其他位置显示。p1 + stride * yIn + xIn * 3是偏移量的计算方式。
将xOffset与yOffset范围内的随机点颜色值移到当前位置显示。换种方式说,也就是将当前的点移到其他位置显示。p1 + stride * yIn + xIn * 3是偏移量的计算方式。
1
public static bool Diffuse(Bitmap b, int xOffset, int yOffset, int Step)
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
byte * p1 = p;
11
int nOffset = stride - b.Width*3;
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 % Step == 0 && x % Step == 0)
18
{
19
int xIn = rad.Next(2 * xOffset) - xOffset + x;
20
int yIn = rad.Next(2 * yOffset) - yOffset + y;
21
if(xIn < 1)xIn = 0;
22
else if(xIn > b.Width - 1)xIn = b.Width - 1;
23
if(yIn < 1)yIn = 0;
24
else if(yIn > b.Height - 1)yIn = b.Height - 1;
25
byte * pTemp = p1 + stride * yIn + xIn * 3;
26
p[0] = pTemp[0];
27
p[1] = pTemp[1];
28
p[2] = pTemp[2];
29
}
30
p += 3;
31
}
32
p += nOffset;
33
}
34
}
35
b.UnlockBits(bmData);
36
return true;
37
}
public static bool Diffuse(Bitmap b, int xOffset, int yOffset, int Step)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
byte * p1 = p;11
int nOffset = stride - b.Width*3;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 % Step == 0 && x % Step == 0)18
{19
int xIn = rad.Next(2 * xOffset) - xOffset + x;20
int yIn = rad.Next(2 * yOffset) - yOffset + y;21
if(xIn < 1)xIn = 0;22
else if(xIn > b.Width - 1)xIn = b.Width - 1;23
if(yIn < 1)yIn = 0;24
else if(yIn > b.Height - 1)yIn = b.Height - 1;25
byte * pTemp = p1 + stride * yIn + xIn * 3;26
p[0] = pTemp[0];27
p[1] = pTemp[1];28
p[2] = pTemp[2];29
}30
p += 3;31
}32
p += nOffset;33
}34
}35
b.UnlockBits(bmData);36
return true;37
}

浙公网安备 33010602011771号