Backslash
Captain
- Registriert
- Okt. 2006
- Beiträge
- 3.242
Hab den Screenshot jetzt nicht mit der Methode gemacht, aber so gehts bei mir:
Code:
static void Main(string[] args)
{
char[] rgb = { 'r', 'g', 'b' };
DateTime captStart = DateTime.Now;
Bitmap pic1 = CaptureScreen();
Bitmap pic2 = CaptureScreen();
TimeSpan captDelta = DateTime.Now - captStart;
Console.WriteLine("screen capture duration: {0} / {1}ms", captDelta, captDelta.TotalMilliseconds);
Rectangle imgSize = new Rectangle(0, 0, pic1.Width, pic1.Height);
BitmapData pic1Data = pic1.LockBits(imgSize, ImageLockMode.ReadOnly, pic1.PixelFormat);
BitmapData pic2Data = pic2.LockBits(imgSize, ImageLockMode.ReadOnly, pic2.PixelFormat);
int pixelCount = pic1.Width * pic1.Height;
int Bpp = 4;
int byteCount = pixelCount * Bpp;
int minX = pic1.Width, minY = pic1.Height;
int maxX = 0, maxY = 0;
DateTime start = DateTime.Now;
unsafe
{
byte* pic1ptr = (byte*)pic1Data.Scan0;
byte* pic2ptr = (byte*)pic2Data.Scan0;
for (int i = 0; i < byteCount; i++)
if (pic1ptr[i] != pic2ptr[i])
{
int x = (i / Bpp) % pic1.Width;
int y = (i / Bpp) / pic1.Width;
if (x < minX) minX = x;
if (x > maxX) maxX = x;
if (y < minY) minY = y;
if (y > maxY) maxY = y;
//Console.WriteLine("ungleich bei {0} => ({1}, {2}, {3})", i, (i / Bpp) % pic1.Width, (i / Bpp) / pic1.Width, rgb[i%Bpp]);
}
}
DateTime end = DateTime.Now;
pic1.UnlockBits(pic1Data);
pic2.UnlockBits(pic2Data);
TimeSpan dauer = end - start;
Console.WriteLine("fertig nach {0} / {1}ms", dauer.ToString(), dauer.TotalMilliseconds);
Console.WriteLine("änderung in {0}, {1} / {2}, {3}", minX, minY, maxX, maxY);
Graphics g = Graphics.FromImage(pic2);
g.DrawRectangle(new Pen(Color.Red, 1.0f), minX, minY, maxX - minX, maxY - minY);
pic1.Save("pic1.png", ImageFormat.Png);
pic2.Save("pic2.png", ImageFormat.Png);
Console.WriteLine("gespeichert.");
Console.ReadLine();
}
private static Bitmap CaptureScreen()
{
Bitmap screenBmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(screenBmp);
g.CopyFromScreen(0, 0, 0, 0, new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
g.Dispose();
//Console.WriteLine(screenBmp.PixelFormat.ToString());
return screenBmp;
}