Einzelne Grafik in dieses Fenster ausgegeben
Anschließend soll eine Grafik in dieses Fenster ausgegeben werden. Weil die auszugebende Grafik das Fenster komplett
abdecken soll, muss ein Rechteck berechnet werden, das in der linken, oberen Ecke der Grafik, also bei 0, 0 beginnt
und die Breite und Höhe des Fenster aufweist:
rSrc.Left = 0
rSrc.Right = 0
rSrc.Bottom = ddsd2.lHeight
rSrc.Right = ddsd2.lWidth
Nun kann endlich die Grafik aus dem Offscreen-Surface in das Fenster ausgegeben werden.
Dazu wird der Blt-Befehl des Primary-Surfaces aufgerufen.
ddrval = primarySurface. _
Blt(rDst, offscreenSurface, _
rSrc, DDBLT_WAIT)
BLT steht für
Block Image Transfer, den blockorientierten Bildtransfer. Blt kopiert die
Daten aus dem im zweiten Parameter angegebenen Surface in das Surface, für das der Blt-Befehl
aufgerufen wurde. Wohin das Quellsurface kopiert werden soll, bestimmt die im ersten Parameter angegebene
RECT-Struktur. Welcher Bereich des Quellsurfaces kopiert werden soll, bestimmt dagegen die im dritten
Parameter übergebene RECT-Struktur. Der letzte Parameter dieses Aufrufs (DDBLT_WAIT) gibt an,
dass der BltBefehl erst dann zum Aufrufer zurückkehren soll, wenn der Blt-Befehl vollständig
abgearbeitet wurde. Wird in diesem Parameter der Wert 0 übergeben, kehrt Blt sofort zum Aufrufer zurück,
ohne darauf zu warten, dass DirectDraw die Grafikoperation überhaupt angefangen, geschweige denn
beendet hat - das ist allerdings nur für extreme High-Speed Anwendungen mit ineinandergeschachtelten Blt-Aufrufen sinnvoll.
Da Ziel- und Quellrechteck (rDst und rSrc) eine unterschiedliche Größe aufweisen können, führt
Blt eine automatische Größenanpassung ("Stretching") des anzuzeigenden Bildes durch. Ist es kleiner
als das Zielrechteck, wird es gestreckt, ist es größer als das Zielrechteck, wird es gestaucht.
Animationen
Das vollständige Programm zum Zeichnen einer Bitmap in ein Fenster finden Sie auf der Heft-CD im Verzeichnis
\Quellen\DirectX\DirectX1. Damit haben Sie bereits das Handwerkszeug für interessante Spielereien, etwa
eine Animation. Dazu muss das auf dem Bildschirm anzuzeigende Bild allerdings laufend verändert werden. Theoretisch
könnten dazu eine Reihe unterschiedlicher Offscreen-Surfaces angelegt werden, die jeweils eine weitere Sequenz der
Animation aufnehmen. Es gibt allerdings eine wesentlich elegantere Methode: Die verschiedenen Sequenzen werden
einfach in einer großen Bitmap zusammengefasst. Es ist sogar möglich, die Sequenzen mehrerer Objekte in einer
gemeinsamen Abbildung zu vereinen.
Eine Bitmap mit 60 Sequenzen einer Animation.