![]()
CHARGER UN GIF/JPG DANS UNE SURFACE
Dans cet article, nous couvrirons les bases du chargement d'une image gif/jpg dans une surface.
Vous pouvez télécharger le projet exemple de cet article: Code Source Du Projet : ddgifjpg.zip
| DirectX et les Gif/Jpg |
Il est bien vrai que les bitmaps sont souvent un peu lourds, c'est pourquoi la plus part des programmeurs préfèrent utiliser les images gif ou jpg, Mais DirectX ne dispose d'aucune fonction permettant de le faire. Nous allons donc voir comment procéder.
| Déclarations des Fonctions APIs et Constante |
Vous avez le choix entre ajouter la référence "Win32 Type Librairy" à votre projet ou déclarer un ensemble de fonctions API.
Ajouter la Librairie
Vous n'aurez plus ainsi besoin de déclarer les APIs et constantes utilisées par la procédure de chargement de gif/jpg.
Déclarer Manuellement les Fonctions APIs
Vous déclarez les fonctions APIs et les constantes par la méthode traditionnelle avant de les utiliser. C'est préférable pour un projet aussi minuscule que le notre.
| 'APIs POUR CHARGER UN GIF/JPG Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Public Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As Any) As Long Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long 'Constantes pour charger un Gif/Jpg 'Copie la source vers la destination Private Const SRCCOPY = &HCC0020 |
Passons à la fonction elle-même.
| Fonction CreateSurfaceFromFile |
CreateSurfaceFromFile est la fonction qui va charger le
gif/jpg dans la surface.
| Public Function
CreateSurfaceFromFile(DirectDraw As DirectDraw7, ByVal
FileName As String, SurfaceDesc As
DDSURFACEDESC2) As DirectDrawSurface7 Dim Picture As StdPicture Dim Width As Long Dim Height As Long Dim Surface As DirectDrawSurface7 Dim hdcPicture As Long Dim hdcSurface As Long 'On Charge l'image Set Picture = LoadPicture(FileName) 'On convertit les dimensions 'de vbHimetric vers vbPixel Width = CLng((Picture.Width * 0.001) * 567 / Screen.TwipsPerPixelX) Height = CLng((Picture.Height * 0.001) * 567 / Screen.TwipsPerPixelY) 'On définit les propriété de la description With SurfaceDesc If .lFlags = 0 Then .lFlags = DDSD_CAPS .lFlags = .lFlags Or DDSD_WIDTH Or DDSD_HEIGHT If .ddscaps.lCaps = 0 Then .ddscaps.lCaps = DDSCAPS_OFFSCREENPLAIN If .lWidth = 0 Then .lWidth = Width If .lHeight = 0 Then .lHeight = Height End With 'On crée la surface DirectDraw Set Surface = DirectDraw.CreateSurface(SurfaceDesc) 'On crée de la Mémoire (pour charger l'image) hdcPicture = CreateCompatibleDC(0) 'On sélectionne le Picture et on le copie 'vers la mémoire crée SelectObject hdcPicture, Picture.Handle 'Handle de la surface hdcSurface = Surface.GetDC 'On copie l'image contenue dans hdcSurface vers la surface StretchBlt hdcSurface, 0, 0, SurfaceDesc.lWidth, SurfaceDesc.lHeight, hdcPicture, 0, 0, Width, Height, SRCCOPY 'On libère l'espace mémoire contenue dans hdcSurface Surface.ReleaseDC hdcSurface DeleteDC hdcPicture 'On transfère la Surface Set CreateSurfaceFromFile = Surface 'On vide Tout ! Set Picture = Nothing Set Surface = Nothing End Function |
Il ne reste plus qu'à appeler la fonction.
| Dim Surface As
DirectDrawSurface7 Dim ddsd As DDSURFACEDESC2 Set Surface = CreateSurfaceFromFile(DD, "C:\image.gif", ddsd) |
Je crois que c'est tout!
| Conclusion |
Bien vous venez de découvrir comment charger une image
gif/jpg dans une surface DirectDraw7. Vous pouvez faire de même avec un bitmap.
A Noter que c'est une fonction de Patrice Scribe [Vba51].
On ne peut malheureusement pas charger des gif animés. Mais nous allons voir dans le
prochain article comme réaliser des animations à l'aide des fonctions inclues dans
DirectX7.
| Téléchargement |
Vous pouvez télécharger le projet exemple de cet article:
Ce projet affiche une image gif sur l'écran en mode fenêtré.
[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]