Autor Beitrag
Spectus.gn
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 38

Win XP
C# (VS 2008 Pro)
BeitragVerfasst: Di 13.01.09 15:04 
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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 13.01.09 17:41 
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 38

Win XP
C# (VS 2008 Pro)
BeitragVerfasst: 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.


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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: www.neowin.net/forum...post&p=585580792 (nur ein try-finally-Block wäre noch schön ;) ).

_________________
>λ=
Spectus.gn Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 38

Win XP
C# (VS 2008 Pro)
BeitragVerfasst: 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