\\ Home : Articoli : Stampa
Accesso diretto alla memoria per DirectDraw
Di RobyDx (del 04/08/2007 @ 09:12:23, in DirectX9, linkato 1576 volte)

Le superfici in DirectDraw sono come sappiamo degli array di numeri corrispondenti ai colori. L'array di colori viene estratto eseguengo una operazione chiamata accesso alla memoria che genera una matrice di dimensione larghezza x altezza. Ogni punto di questa matrice è un intero che tramite la classe color possiamo facilmente gestire per ottenere o inserire il colore. Prima che iniziate a procedere vi avverto che DirectDraw presenta un grosso bug in questa istruzione. Se avete aggiornato alla versione 9.0b questa funzionerà altrimenti non troverete questa istruzione e vi sarà impossibile compiere questa azione.

Dim dati As Integer(,)
Dim i As Integer
Dim j As Integer
dati = CType(superficie.Lock(LockFlags.Wait), Integer(,))
For i = 0 To 639
    For j = 0 To 479
        dati(i, j) = Color.Red.ToArgb
    Next
Next

superficie.Unlock(dati)

In questo esempio ho bloccato una superficie 640 x 480. Tra l'istruzione lock e l'istruzione unlock potete modificare o ricevere i colori tramite l'array dati. Qualsiasi modifica ad esso influenzerà la superficie (puntatori). L'accesso alla memoria si rivela particolarmente utile per l'elaborazione a livello di pixel dell'immagine. Nel mio esempio l'immagine viene fatta diventare semplicemente rossa.