![]()
LA TECHNIQUE DU BLITTING
Dans cet article, nous couvrirons les bases de l'utilisation de la technique du blitting pour les transfères entre les surfaces.
| Types de Blitting |
DirectDraw (enfin DirectX) a l'avantage de travailler directement avec le HardWare, contrairement au GDI de Windows. Ceci rend l'application plus rapide.
Quand vous aurez fini de créer les surfaces (contenant
vos images et autres), vous aurez besoin de faire des transfères entre celles-ci.
Par exemple: j'ai une surface contenant un paysage, et une autre contenant une voiture. Le
principe est de coller la voiture sur le paysage: c'est ce qu'on appelle le Blitting.
Il existe différents types de Blit avec DirectDraw:
| BLTFAST |
Le blit avec BltFast est assez simple, voici la structure de la fonction.
| DestSurface.BltFast(DestX As Long, DestY as Long, SrcSurface As DirectDrawSurface7,SrcRect As RECT,flags As CONST_BLTFASTFLAGS) |
Un petit exemple nous fera du bien.
| DestSurface.BltFast 0, 0, SrcSurface, ddRect(0, 0, 100, 100), DDBLTFAST_WAIT |
On blit dans la surface DestSurface, dans le coin en haut
à gauche, depuis la surface SrcSurface, dans un rectangle ddRect(0,0,100,100).
On précise au hardware d'attendre que le blit est fini pour continuer (DDBLTFAST_WAIT),
cela vous évitera des problèmes.
A Noter que la fonction ddRect(0,0,100,100) n'est pas une fonction vb ! Nous allons voir comment la créer plus bas.
| BLT |
La fonction Blt demande un peu plus de paramètres. Voici sa structure:
| DestSurface.Blt(DestRect As RECT,SrcSurface As DirectDrawSurface7, SrcRect As RECT,flags As CONST_BLTFLAGS) |
Voyons un exemple:
| DestSurface.Blt ddRect(50,0,150,100), SrcSurface, ddRect(0,0,100,100),DDBLT_WAIT |
On blit dans la surface DestSurface (dans le rectangle
ddRect(50,0,150,100)), depuis la surface SrcSurface (enfin la portion de surface définie
par ddRect(0,0,100,100)).
On précise au hardware d'attendre que le blit est fini pour continuer (DDBLT_WAIT).
Vous avez vite remarqué que pour faire des agrandissements ou réductions (technique du Stretching) il suffit de modifier les rectangles source et destination.
Pour les non-speaking english:
To Stretch = Etirer
AGRANDISSEMENT
Il faut que le rectangle de destination soit plus grand que le rectangle source. Exemple:
| DestSurface.Blt ddRect(0,0,200,200), SrcSurface, ddRect(0,0,100,100),DDBLT_WAIT |
Cet exemple double la taille de SrcSurface et le colle dans DestSurface.
REDUCTION
Il faut que le rectangle de destination soit plus petit que le rectangle source. Exemple:
| DestSurface.Blt ddRect(0,0,100,100), SrcSurface, ddRect(0,0,200,200),DDBLT_WAIT |
Cet exemple réduit de moitié la taille de SrcSurface et le colle dans DestSurface.
| Types de Blitting |
La fonction BltColorFill permet de remplir une surface avec une couleur donnée. Voici la structure:
| DestSurface.BltColorFill (destRect as Rect, fillValue as Long) as Long |
Un petit exemple:
| DestSurface.BltColorFill ddRect(0,0,100,100), 0 |
On remplit la portion ddRect(0,0,100,100) de la surface DestSurface avec la couleur Noire (Noir = 0).
| BLITTING: ASTUCE |
Lors d'un blitting, si vous ne connaissez pas exactement
les différentes dimensions des surfaces, vous pouvez demander à DirectDraw de
sélectionner les surfaces en entier.
Il suffit de passer comme paramètre un rectangle vide: ddRect(0,0,0,0)
Exemple:
| DestSurface.BltColorFill ddRect(0,0,0,0), 0 |
Ceci va sélectionner la surface DestSurface en entier et la remplir avec la couleur noire.
| La fonction ddRect(x1 as long, y1 as long, x2 as long, y2 as long) as RECT |
Comme je l'ai dis plus haut, la fonction ddRect n'est pas
une fonction vb, il faut donc la créer.
La fonction ddRect permet d'enregistrer des valeurs à travers ses arguments et ensuite de
renvoyer un objet de type RECT.
| Public Function
ddRect(x1 As Long, y1 As Long,
x2 As Long, y2 As Long)
As RECT ddRect.Left = x1 ddRect.Right = x2 ddRect.Top = y1 ddRect.Bottom = y2 End Function |
Vous pourrez ensuite l'utiliser ainsi:
| DestSurface.BltColorFill ddRect(0,0,200,100), 0 |
Au lieu de faire encore tout ceci:
| Dim myRect As
RECT myRect.Left = 0 myRect.Right = 150 myRect.Top = 0 myRect.Bottom = 100 Surface.BltColorFill myRect, 0 |
C'était pas trop difficile tout ça!
| Conclusion |
Bien vous venez de découvrir les
différents types de blitting que DirectDraw nous offre. Nous avons seulement vu quelques
types, les autres sont peu importants et un peu trop sophistiqués pour le moment.
Nous sommes maintenant prêts à dessiner sur l'écran de l'utilisateur.
Lorsque nous serons en Mode Plein Ecran nous appellerons cela le Flipping et en Mode
Fenêtré le Clipping.
[Home]
[Actualités]
[Trucs
& Astuces]
[Astuces Windows]
[ActiveX-Ocx/Dll]
[Articles]
[Codes Sources]
[VB
Games]
[Fichiers Sons]
[Fichiers Icônes]
[Programmes & Sources]
[Mailing-List]
[Divers]
[A Propos]