Domanda

Buona sera,

Ho diversi immagini a 32 bit in buffer di memoria che desidero "blit" ad un contesto di dispositivo, in modo rapido. La velocità è un problema qui perché il buffer verrà manipolato costantemente e devono essere blitted alla DC ripetutamente.

La profondità di colore del tampone è di 32 bit, per cui è già in formato DIB previsto di SetDIBits (). Tuttavia, questo è piuttosto ingombrante in quanto la porta di bitmap SetDIBits () non può essere già selezionato nel controller prima dell'operazione. Così ho bisogno di costante scambio fuori bitmap della DC, SetDIBits call (), scambiare la parte posteriore bitmap nel DC, e poi blit il CC a CC della finestra. Per me, che sembra proprio come un sacco di carico di lavoro sulla CPU e troppa ramificazione nella API di Windows; modo troppo per ottenere prestazioni ottimali.

Sarei interessato nel usando DirectX, se non mi costringono a usare contesti di periferica per le operazioni 2D, o texture caricamento di memoria video prima di visualizzarli, perché i contenuti dell'immagine sono in continua evoluzione.

La mia domanda è semplice (nonostante la lunga writeup). Quale sarebbe il modo più veloce per me di blit un'immagine da un buffer di pixel in memoria sullo schermo? L'accesso diretto al buffer dei pixel di un DC sarebbe grande, ma so che non succederà.

Grazie per aver letto il mio lungo writeup.

È stato utile?

Soluzione

C'è un metodo API CreateDIBSection per creare un DIB che le applicazioni possono scrivere direttamente. Questo permette di aggiornare continuamente il bitmap (sia memcopy o direttamente scrittura).

Vedere MSDN articolo per ulteriori dettagli.

L'accesso al bitmap deve essere sincronizzato. A tale scopo, chiamando la funzione GdiFlush.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top