|
Lock/Unlock
- Get/SetLockedPixel |
 |
Die
Verwendung von GetLockedPixel und SetLockedPixel
ist sehr einfach. Mit diesen Funktionen kann ein
Pixel einer Surface direkt verändert
werden. So können Fading, Alpha
Blending und andere tolle Effekte erreicht
werden. Ein paar werden hier erklärt. Die
Verwendung von solchen Effekten wertet ein Spiel
ungemein auf, aber die Performance lässt dadurch
sehr nach.
Die
Funktion SetLockedPixel liefert im 16bit Modus
einen 16bit Farbwert (siehe DirectDraw
und 16bit Farben).
Doch
bevor auf eine Surface direkt zugegriffen werden
kann, muss diese mit Lock gesperrt
werden. Nach erfolgter Bearbeitung muss die
Surface wieder mit Unlock entsperrt werden.
Es darf nur auf Pixel innerhalb des gesperrten
Bereiches zugegriffen werden. Ein Zugriff außerhalb
dieses Bereiches führt unweigerlich zum Absturz
des Programms.
|
Lock(r As RECT, desc As DDSURFACEDESC2, flags
As CONST_DDLOCKFLAGS, hnd As Long)
|
Mit
dieser Funktion wird eine Surface gesperrt. Übergeben
wird das zu sperrende Rechteck r (siehe
Datentyp RECT unter Grundlagen).
Mit desc wird die Surfacebeschreibung übergeben
(siehe Datentyp DDSURFACEDESC2 unter
Grundlagen).
Über flags wird festgelegt, wie die
Surface gesperrt werden soll (zB. ReadOnly oder
WriteOnly). Das Argument hnd ist nicht
aktiv und wird auf 0 gesetzt.
|
|
 |
Dim destrect As RECT
Dim BmpDesc As DDSURFACEDESC2
BmpDesc.lFlags = DDSD_CAPS Or DDSD_HEIGHT Or _
DDSD_WIDTH Or DDSD_PIXELFORMAT
BmpDesc.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
BmpDesc.lWidth = 436
BmpDesc.lHeight = 72
'die Bilder werden für ReadOnly gelockt
bmpBild1.Lock destrect, BmpDesc, DDLOCK_WAIT Or _
DDLOCK_READONLY, 0
bmpBild2.Lock destrect, BmpDesc, DDLOCK_WAIT Or _
DDLOCK_READONLY, 0
'das Ergebnis-Bild wird für WriteOnly gelockt
bmpErgebnis.Lock destrect, BmpDesc, DDLOCK_WAIT Or _
DDLOCK_WRITEONLY, 0
|
 |
|
Unlock(r
As RECT)
|
Mit
dieser Funktion wird die gesperrte Surface wieder freigegeben.
Übergeben wird das gesperrte Rechteck r
(siehe Datentyp RECT unter Grundlagen).
|
|
 |
'freigeben aller Bilder mit Unlock
bmpBild1.Unlock destrect
bmpBild2.Unlock destrect
bmpErgebnis.Unlock destrect
|
 |
|
GetLockedPixel(x
As Long, y As Long) As Long
|
Diese
Funktion liefert den Farbwert eines Pixel auf x,
y. Im 16bit Modus liefert die Funktion einen
16bit Farbwert (siehe DirectDraw
und 16bit Farben).
|
SetLockedPixel(x
As Long, y As Long, col As Long)
|
Mit
dieser Funktion wird ein Pixel auf x, y
auf den Farbwert col gesetzt.
|
|
 |
Farbwert = bmpBild2.GetLockedPixel(x, y)
bmpErgebnis.SetLockedPixel x, y, Farbwert
|
 |
|
|