2012-04-04 11 views
1

Ich habe eine WPF-Anwendung, wo ich eine Funktion hinzufügen muss, die eine Reihe von Vollbild-Bitmaps sehr schnell anzeigen wird. In den meisten Fällen sind es nur zwei Bilder, die die beiden Bilder im Wesentlichen umschalten. Die Geschwindigkeit, mit der sie angezeigt werden, sollte konstant 10-20 ms pro Bild sein. Ich habe versucht, dies direkt in WPF mit einem Timer zu tun, aber die Display-Rate schien zu variieren ein wenig zu verlassen. Ich habe auch versucht, SharpGL (ein. Net-Wrapper auf OpenGL), aber es war sehr langsam bei der Verwendung von großen Bildern (ich habe vielleicht nicht den besten Weg). Ich werde alle Bitmaps im Voraus haben, vor der Kompilierzeit, so dass das Format geändert werden kann, solange die Pixel nicht verändert werden.Bitmaps schnell anzeigen

Was wäre der beste Weg, dies zu tun?

Ich bin bereits hinter dem Zeitplan zurück, so dass ich keine Zeit habe, viele APIs zu lernen oder mit vielen Optionen zu experimentieren.

+1

Ist Ihr Programm in Ordnung oder können andere Programme ausgeführt werden? Sie müssen sie im Speicher haben, da das Laden von der Festplatte diese Geschwindigkeit verhindert, ist das vernünftig? –

+0

James, dies wird die einzige Anwendung sein, die auf dem System läuft, also muss ich mir keine Gedanken über Ressourcenverschwendung machen. – softwork

Antwort

1

"Ich habe versucht, dies direkt in WPF mit einem Timer zu tun, aber die Anzeigerate schien zu variieren etwas zu beenden."

Anstatt einen Timer zu verwenden, verwenden Sie Thread.Sleep (20), da es nicht so viele Systemressourcen enthält. Dies sollte Ihnen eine sofortige Verbesserung geben.

Es klingt auch so, als würde die Benutzerinteraktion mit der Anwendung erfolgen, während die Bilder schnell umgeschaltet werden, in diesem Fall den Code, der die Bilder in einem Hintergrundthread schaltet. Beachten Sie jedoch, dass die Benutzeroberfläche nicht Thread-sicher ist.

Dies sind nur schnelle Gewinne, aber Sie könnten DirectX verwenden müssen für Hardware Acceleration HAL zu umgehen:

Die Hardware Abstraction Layer von Windows (HAL) in Hal.dll umgesetzt. Die HAL implementiert eine Reihe von Funktionen, die auf unterschiedliche Weise von verschiedenen Hardwareplattformen implementiert sind, wobei sich in diesem Zusammenhang hauptsächlich auf den Chipsatz bezieht. Andere Komponenten des Betriebssystems können diese Funktionen dann auf allen Plattformen in gleicher Weise aufrufen, ohne Rücksicht auf die tatsächliche Implementierung.

+0

Die Verwendung eines Timers mit hoher Auflösung wäre ebenfalls hilfreich: http://msdn.microsoft.com/en-us/library/aa964692(v=vs.85).aspx –