Entwickler-Ecke

Multimedia / Grafik - CopyFromScreen-Alternative


Spectus.gn - Di 13.01.09 15:04
Titel: CopyFromScreen-Alternative
Hi an alle,
habe mal wieder ein massives Problem.
und zwar ist die Graphics.CopyFromScreen()-Methode viel zu langsam. damit macht man effektiv 3-6 Bilder pro Sekunde.
Ich will jedesmal den ganzen Screen "abfotografieren", da es bei der CopyFromScreen()-Methode egal ist, ob man nur einen Teil-screen oder den ganzen möchte. reichen würde mir aber auch nur ein teil.

Kann mir einer eine schnellere Alternative nennen?

so siehts momentan aus

C#-Quelltext
1:
2:
3:
Bitmap test1 = new Bitmap(SystemInformation.PrimaryMonitorSize.Width, SystemInformation.PrimaryMonitorSize.Height);
Graphics test = Graphics.FromImage(test1);
test.CopyFromScreen(0,000, test1.Size);

Vielen Dakn im Vorraus.

Spectus.gn


Kha - Di 13.01.09 17:41
Titel: Re: CopyFromScreen-Alternative
user profile iconSpectus.gn hat folgendes geschrieben Zum zitierten Posting springen:
und zwar ist die Graphics.CopyFromScreen()-Methode viel zu langsam. damit macht man effektiv 3-6 Bilder pro Sekunde.
Wenn du das Bild danach speicherst, hast du das auch mitberechnet? Bzw. was hast du überhaupt vor ;) ?

Ich weiß nicht, ob es viel bringt, aber versuch einmal, nicht das Bitmap und das Graphics-Objekt nicht jedes Mal neu zu erstellen, sondern beide in einer Variablen zu speichern.


Spectus.gn - Di 13.01.09 18:24

Die Bitmap wird nur verarbeitet und nicht gespeichert. Daher weniger zeitlicher Aufwand. Aber dieses CopyFromScreen() dauert ewig. Am besten wären 20+ Verarbeitungen pro Sekunde.



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Bitmap tBitmap = new Bitmap(SystemInformation.PrimaryMonitorSize.Width, SystemInformation.PrimaryMonitorSize.Height);  
Graphics tGraphics = Graphics.FromImage(test1);

tGraphics.CopyFromScreen(0,000, tBitmap.Size); 
  
//überprüfen, ob des Pixel X*Y von tBitmap das durch tGraphics übergeben wurde 'white' ist.
while(!(tBitmap.GetPixel(x,y) == Color.FromARGB(255,255,255,255)))
{
tGraphics.CopyFromScreen(0,000, tBitmap.Size); 
}

Hat jemand ne Idee?


Kha - Di 13.01.09 19:04

Du kannst auch direkt aus dem Desktop ein Graphics-Objekt erstellen, allerdings nicht mit den Framework-Methoden, siehe z.B: http://www.neowin.net/forum/index.php?showtopic=293883&view=findpost&p=585580792 (nur ein try-finally-Block wäre noch schön ;) ).


Spectus.gn - Di 13.01.09 21:09

vielen Dank für die Hilfe. Es funktioniert und ist verdammt schnell.
100 Scrennshots in 0,2 Sekunden. Damit lässt sich arbeiten.

Den Quelltext poste ich in naher Zukunft.
MfG und Danke
Spectus.gn