1: /// <summary>
2: /// Causes a "Jitter" effect
3: /// </summary>
4: /// <param name="OriginalImage">Image to manipulate</param>
5: /// <param name="MaxJitter">Maximum number of pixels the item can move</param>
6: public static Bitmap Jitter(Bitmap OriginalImage, int MaxJitter)
7: {
8: Bitmap NewBitmap = new Bitmap(OriginalImage, OriginalImage.Width, OriginalImage.Height);
9: BitmapData NewData = Image.LockImage(NewBitmap);
10: BitmapData OldData = Image.LockImage(OriginalImage);
11: int NewPixelSize = Image.GetPixelSize(NewData);
12: int OldPixelSize = Image.GetPixelSize(OldData);
13: Random.Random TempRandom = new Random.Random();
14: for (int x = 0; x < NewBitmap.Width; ++x)
15: {
16: for (int y = 0; y < NewBitmap.Height; ++y)
17: {
18: int NewX = TempRandom.Next(-MaxJitter, MaxJitter);
19: int NewY = TempRandom.Next(-MaxJitter, MaxJitter);
20: NewX += x;
21: NewY += y;
22: NewX = MathHelper.Clamp(NewX, NewBitmap.Width - 1, 0);
23: NewY = MathHelper.Clamp(NewY, NewBitmap.Height - 1, 0);
24:
25: Image.SetPixel(NewData, x, y, Image.GetPixel(OldData, NewX, NewY, OldPixelSize), NewPixelSize);
26: }
27: }
28: Image.UnlockImage(NewBitmap, NewData);
29: Image.UnlockImage(OriginalImage, OldData);
30: return NewBitmap;
31: }