Version 2.0!
Features
Tutorials
Files
Glossary
Projects
Contact
Links
Message Board
Extras
LuckyCam
Old News
Sign Guestbook
View Guestbook
VB Horoscope
VB Photo Album
.
ATTENTION READERS! Lucky's VB Gaming Site is no longer active. For updated game programming information and tutorials, please visit The Game Programming Wiki!

> bitblt

BitBlt Tutorial - Door Gary Beebe (Translated by Pieterjan Vandegaer from Eyesight Development)

(In deze tutorial heb ik een masker, mask genoemd, om het overzichtelijk te houden).

Het eerste ding wat ik je aanraad te doen is een Module aan je project toe te voegen. In de Declaratie sectie van die Module moet je de volgende code toevoegen:

 Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, _
 ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, _
 ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
 ByVal ySrc As Long, ByVal dwRop As Long) As Long

 Public Const SRCCOPY = &HCC0020
 Public Const SRCPAINT = &HEE0086
 Public Const SRCAND = &H8800C6

 Public RetVal as Long

hDestDC is het object waar de prent heengeschreven wordt. De bestemming is hier gekenmerkt aan zijn hDC
X en Y zijn de coördinaten waar je de linkse boven hoek van die prent op z'n bestemming wilt zetten.
nWidth en nHeight zijn de breedte en de hoogte van de prent die je op de bestemming wilt zetten
hSrcDC is het bron object waar je de prent vandaan haalt. De bron is hier gekenmerkt aan zijn hDC
xSrc en ySrc zijn de coördinaten van de linkse boven hoek van de bron-prent vanwaar je wilt beginnen te kopiëren
dwRop is de raster uitvoerder, ook gekend als BitwiseOperator.  Zijn waarde drukt de manier uit hoe de prent gekopiërd zal worden, dit zijn mogelijke waarden:

SRCCOPY Kopiëert de prent op een identieke manier
SRCPAINT Kopiëert de prent buiten wat zwart is.
SRCAND Kopiëert de prent buiten wat wit is.

RetVal is enkel een waarde dat wet gebruiken om de uitvoering te starten, het niet gelijk aan nul mogen zijn, nadat het BitBlt statement uitgevoerd is. Als het toch de waarde nul heeft dan betekent het dat je statement niet goed functioneert.

Ok, Dus wat hebben we nodig? Fig 1 Teneerste hebben we een achtergrond figuur nodig.  We hebben eigenlijk geen achtergrond figuur nodig, maar in dit voorbeeld is het nodig om alles gemakkelijk te kunnen uitleggen. We zullen zeggen dat onze achtergrond figuur Picture1 is(in een PictureBox), en zoals we al kunnen zien, heeft het de figuur van een disco zaal er in. Dit is waar onze sprite zal staan. De prent is 320 x 200 pixels groot, zonder de zwarte rand dat je erond ziet. We zullen het in onze code voorstellen als Picture1.hDC.

Fig 2 Deze, groovy persoon, is onze sprite.  Merk de zwarte achtergrond op. Dit is de plaats waar je kan doorkijken zoals de plaatsen onder zijn armen. Deze figuur is 110 x 189 pixels, zonder de zwarte rand.
We zullen deze figuur voorstellen als DiscoSpr en in de code wordt ie voorgesteld als DiscoSpr.hDC. Fig 3 Dit is onze mask. Een monochrome kopie (zwart en wit) van onze sprite. Je kan het zien als een silhouet van onze persoon. Merk op dat de achtergrond (wat we als zwart zien op de originele sprite) hier wit is(zoals onder zijn armen, en het eigenlijk object is helemaal zwart. Onze mask is heeft exact de zelfde grote als onze sprite, 110 x 189 pixels, zonder de zwarte rand. We zullen zeggen dat deze figuur DiscoMsk genoemd word, en we kunnen hem aanroepen met DiscoMsk.hDC.

Nu hebben we een oppervlak object nodig. In dit voorbeeld zullen we Form1 gebruiken.  Je kan elk object gebruiken dat een hDC heeft. Fig 4 - 5
De eerste stap wat we doen is Picture1 op Form1 plaatsen.  We doen dit door het volgende commando te gebruiken:

Retval = Bitblt (Form1.hDC, 0, 0,  320, 200, Picture1.hDC, 0, 0, SRCCOPY)

Dit zal de figuur in Picture1 (Fig 1) in de bovenste linkse hoek van Form1 plaatsen. Het volgende ding dat we moeten doen is een mask klaarzetten voor de sprite. Het mask is belangrijk, het laat de computer weten welke plaatsen dat ie moet tonen en welke niet(In Fig 3, wat zwart is zal getoond worden), We doen dit door het volgende commando te gebruiken:

Retval = Bitblt (Form1.hDC, 10, 10, 110, 189, DiscoMsk.hDC, 0, 0, SRCAND)

Dit zal het mask plaatsen op de hoek 10, 10 van Form1.  En ten laatste moeten we nog de sprite over het mask plaatsen. Wel, het mask zegt wat er in de sprite getoond moet worden (de zwarte gedeelten van het mask). Om de Sprite te tonen gebruiken we deze code:

RetVal = Bitblt (Form1.hDC, 10, 10, 110, 189, DiscoSpr.hDC, 0, 0, SRCPAINT)

De eerste figuur Fig 4 toont hoe Form1 eruit ziet nadat we de achtergrond geplaatst hebben en het mask erover gezet hebben. De 2de figuur (Fig 5) toont hoe Form1 eruit ziet nadat we de sprite over het mask geplaatst zouden hebben:

Om BitBlt beter te leren kennen kan je beter je eigen figuren gebruiken. Fig 6  
Je hoeft ook geen honderden tekening te maken of honderden pictureboxes gebruiken, je kan ze allemaal in een tekening zetten en allemaal in 1 picturebox. Het enige wat je moet doen is xSrc en ySrc vervangen. nWidth en nHeight zou je niet moeten veranderen, breedte en hoogte blijft altijd constant.