einzelne Pixel setzen

DirectDraw bietet auch die Möglichkeit einzelne Pixel auf dem Surface zu verändern. Da diese Funktion in Kombination mit Visual Basic nicht gerade die schnellste ist, empfiehlt es sich sparsam mit ihr umzugehen (Ihr müsst ja nicht gleich jedes Surface vor dem blitten, pixelweise manipulieren). Sagen wir mal für ein Sternenfeld reicht es aus ;)....

Zuerst wird das Surface "gelockt" (engl. lock = sperren), d.h. es wird "eingefroren", so dass es nur für die Pixelmanipulation empfänglich ist. Für die Lock Methode benötigen wir sowohl ein sourceRECT (gibt den einzufrierenden Bereich an), als auch die Surfacebeschreibung (DDSurfacedesc2). Nach dem wir das Surface mit der Lock Methode "eingefroren" (eingentlich müsste es ja sperren heissen...) haben, können wir mit der SetLockedPixel Methode ganz einfach Pixel auf das Surface zeichnen und mit der Methode GetLockedPixel die Farbwerte einzelner Pixel auslesen. Die Positionsangaben der Pixel sind unabhägnig von der Position des Surface. Zum Schluß müssen wir das Surface wieder freigeben, dies geschieht mit der Unlock Methode.

ddsSurface.Lock srcRECT, ddsdSurface, DDLOCK_WAIT, 0 'Surface einfrieren

ddsSurface.GetLockedPixel X, Y 'Liefert den Fabwert (asl Long) des Pixels der sich an der Postiton X,Y befindet

ddsSurface.SetLockedPixel X, Y, Color 'Ändert an der Postion X,Y im Surface den Farbwert

ddsSurface.Unlock srcRECT 'Surface freigeben

Zu beachten sind die verschiedenen Farbformate im 16 bit Modus, die die Grafikkarten benutzen (es folgt später ein Tutorial). Es ist zwar immer das RGB-Modell, doch gibt es da auch Unterschiede. Wenn Ihr viele Pixelmanipulationen durchführt, dann alle gleichzeitig! Also einmal das Surface mit der Lock Methode einfrieren, alle Pixelmanipulationen tätigen und dann das Surface mit Unlock wieder freigeben, denn die Lock Methode knabbert ebenfalls an der Performance ;) . So, nun könnt Ihr sogar einzelne Pixel zeichnen....

 

Druckbare Version


Autor: Alexander Ney / Mehr Tutorials auf www.vb-overkill.de.vu