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.
|