Frage

Guter Abend,

Ich habe mehr 32-Bit-Bilder in Speicherpuffern, dass ich auf „Blit“ will auf einen Gerätekontext, schnell. Die Geschwindigkeit ist ein hier Problem, da der Puffer ständig manipuliert werden wird und Notwendigkeit, auf den DC wird Blitted wiederholt.

Die Farbtiefe des Puffers ist 32 Bits, so ist es bereits in dem DIB-Format erwartet SetDIBits (). Dies wird jedoch recht umständlich, da das Bitmap-Ziel von SetDIBits () nicht bereits in die DC vor der Operation ausgewählt werden. Also ich ständig Auslagerungs die Bitmap DC benötigen, rufen Sie SetDIBits (), tauschen in die DC die Bitmap zurück, und dann die DC DC, um das Fenster blitten. Für mich, das scheint nur wie eine Menge Arbeitsbelastung auf der CPU und zu viel in dem Windows-API-Verzweigung; zu viel Art und Weise für eine optimale Leistung.

Ich würde mit DirectX interessiert sein, wenn es nicht mich zwingen, habe Geräte Contexts für 2D-Operationen oder zum Hochladen Texturen in den Videospeicher zu verwenden, bevor sie angezeigt werden, da der Inhalt des Bildes ändern sich ständig.

Meine Frage ist einfach (trotz der langen writeup). Was wäre der schnellste Weg für mich, um ein Bild von einem Pixelpuffer auf den Bildschirm im Speicher blitten? Direkter Zugriff auf die Pixelpuffer eines DC wäre großartig, aber ich weiß, das wird nicht passieren.

Dank für meine langen writeup zu lesen.

War es hilfreich?

Lösung

Es gibt eine API-Methode CreateDIBSection erstellen ein DIB, dass Anwendungen auch direkt schreiben können. Dies ermöglicht es, kontinuierlich den Bitmap-Aktualisierung (entweder memcopy oder direkt an sie zu schreiben).

Siehe MSDN-Artikel für weitere Details.

Der Zugriff auf die Bitmap müssen synchronisiert werden. Tun Sie dies, indem Sie die GdiFlush Funktion aufrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top