Bitmaps anzeigen mit Blt, BltFast und BltFx  

DirectDraw wird am häufigsten für das Anzeigen von Bitmaps verwendet. Um ein Bitmap auf den Bildschirm zu bekommen gibt es drei verschiedene Möglichkeiten die alle ihre Vor- und Nachteile haben.

Doch zuerst einmal muss das gewünschte Bitmap in den Speicher geladen werden, um es anschließend in den BackBuffer kopieren zu können. Dazu dient wieder DirectDrawSurface7.

 
  Laden eines Bitmaps [ Top ]

Damit DirectDraw weiß wie das Bitmap zu laden ist, wird es über den Datentyp DDSURFACEDESC2 beschrieben. Das Bitmap kann sowohl mit, als auch ohne Angabe der Größe, in den Video- oder Systemspeicher geladen werden. Sinnvoll ist die Angabe der Größe und das Erstellen eines virtuellen, nicht sichtbaren Speichers. DirectDraw lädt dann solange die Bitmaps in den Videospeicher bis dieser voll ist, und schreibt dann weiter in den Systemspeicher. Daher sollten auch als Erstes die wichtigsten, oft gebrauchten Bitmaps geladen werden.

Dim BmpDesc As DDSURFACEDESC2

BmpDesc.lFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
BmpDesc.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
BmpDesc.lWidth = 73
BmpDesc.lHeight = 85

Die Bilder werden in einem Surface abgelegt, dazu wird das DirectDrawSurface7-Objekt verwendet.

Mittels der Funktion CreateSurfaceFromFile von DirectDraw werden die Bitmaps geladen.
Dim bmpBild1 As DirectDrawSurface7
Set
bmpBild1 = DD7.CreateSurfaceFromFile(App.Path & _
"\DX7.bmp", BmpDesc)
Es gibt auch eine Funktion CreateSurfaceFromResource um Bitmaps aus einer Res-Datei zu laden. Leider verhindert dies ein Bug und somit ist es mit VB6 nicht möglich.
 
  Blt [ Top ]

Blt ist der Klassiker unter den Blt-Funktionen. Kopiert wird von einem Rechteck (SourceRect) in ein Rechteck (DestinationRect).

Die Funktion braucht ein DestinationRect (siehe Datentyp RECT bei Grundlagen). Dies gibt an wohin Blt das Bitmap kopieren soll. Sind die Angaben größer als das Bitmap, wird es automatisch vergrößert (Stretch), sind die Angaben kleiner, wird das Bitmap automatisch verkleinert. Um die Originalgröße zu verwenden ist es am Einfachsten, auf Right und Bottom die Werte von Left und Top zu addieren.

Mit SourceRect weiss Blt ob das gesamte Bitmap oder nur ein Ausschnitt kopiert werden soll.

Die Handhabung ist nicht so einfach wie bei BltFast und das Vergrößern und Verkleinern bremst die Performance des Programms.

Dim destrect As RECT
Dim srcrect As RECT

 'Festlegen welchen Bereich vom Bitmap wir kopieren möchten
 ' ... in diesem Fall alles
With srcrect
   .Left = 0: .Right = 73
   .Top = 0: .Bottom = 85
End With

 'Das Bitmap wird vergrößert
With destrect
   .Left = 0: .Right = 800
   .Top = 0: .Bottom = 600
End With

 'Bitmap in den Backbuffer zeichnen
BackBuffer.Blt destrect, bmpBild1, srcrect, DDBLT_WAIT

 'Natürlich geht dann auch das Verkleinern ...
 'z.B. das ganze 2. Bild wird ein bisschen verkleinert
With srcrect
   .Left = 0: .Right = 218
   .Top = 0: .Bottom = 36
End With

With destrect
   .Left = 200: .Right = .Left + 100
   .Top = 100: .Bottom = .Top + 20
End With

 'Bitmap in den Backbuffer zeichnen
BackBuffer.Blt destrect, bmpBild2, srcrect, DDBLT_WAIT
Ein Beispiel zur Anzeigen von Bitmaps mit Blt können Sie hier downloaden:
  Download BitmapBlt.zip Download
BitmapsBlt.zip
 (19,3 kB)
Downloadzeit: <1 Min. - 28.8k / <1 Min. - ISDN Downloads bisher: [ 3372 ]
 
  BltFast [ Top ]
Diese Funktion ähnelt der Blt-Funktion, nur ist sie wie der Name schon sagt, wesentlich schneller.

BltFast braucht die Angaben X und Y um das Bitmap auf dem Ziel-Surface zu positionieren. Desweiteren wird der Funktion das Bitmap und das SourceRechteck übergeben.

BltFast unterstützt kein Dehnen, Spiegeln oder sonstige Effekte.

Dim srcrect As RECT

 'Festlegen welchen Bereich vom Bitmap wir kopieren möchten ...
 'in diesem Fall alles

With srcrect
    .Left = 0: .Right = 73
    .Top = 0: .Bottom = 85
End With

 'Bitmap in den Backbuffer zeichnen

BackBuffer.BltFast 100, 100, bmpBild1, srcrect, DDBLTFAST_WAIT
Ein Beispiel zur Anzeigen von Bitmaps mit BltFast können Sie hier downloaden:
  Download BitmapsBltFast.zip Download
BitmapsBltFast.zip
 (19,1 kB)
Downloadzeit: <1 Min. - 28.8k / <1 Min. - ISDN Downloads bisher: [ 3536 ]
 
  BltFx [ Top ]  

BltFx der Trickkünstler funktioniert wie die Blt-Funktion. Kopiert wird ein Bitmap aus einem Rechteck in ein Rechteck.

Die gewünschten Effekte werden über den Datentyp DDBLTFX gesetzt. Der Funktion werden dann die Effekte übergeben. Dazu muss auch ein Schalter mitgeschickt werden, der mitteilt welcher Effekt nun genutzt werden soll.

Dim bmpBltFx As DDBLTFX
bmpBltFx.lDDFX = DDBLTFX_MIRRORLEFTRIGHT
BackBuffer.BltFx destrect, bmpBild2, srcrect, DDBLT_WAIT Or _
DDBLT_DDFX, bmpBltFx

Die Verfügbarkeit der Effekte hängt von der verwendeten Grafikkarte ab. Spiegeln wird von fast allen Grafikkarten unterstützt, wobei z.B. Rasteroperationen (ROP) schon eine sehr gute Grafikkarte voraussetzen.

Ein Beispiel zur Anzeigen von Bitmaps mit BltFx können Sie hier downloaden:
  Download BitmapsBltFx.zip Download
BitmapsBltFx.zip
 (20,2 kB)
Downloadzeit: <1 Min. - 28.8k / <1 Min. - ISDN Downloads bisher: [ 3536 ]

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB-/VBA-Forum | DirectX-Forum | VB.Net | .Net-Forum | Foren-Archiv | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report

Letzte Aktualisierung, Montag, 14. Oktober 2002