Directdraw - afficher une image sur un bord de l'écran

Description

Ce petit code permet d'éviter les habituels effets de bord avec DirectDraw, c'est à dire les images qui disparaissent dès que l'on s'approche des bords de l'écran.

Source / Exemple :


'La fonction principale :

Function AfficherImage(Image As DirectDrawSurface7, ddsd As DDSURFACEDESC2, X As Integer, Y As Integer, Cadre As RECT)
Dim CadreImage As RECT

'Si le CadreAffichage=0 on prend l'écran comme cadre :
If Cadre.Right = 0 And Cadre.Bottom = 0 Then
    Cadre.Right = Screen.Width / Screen.TwipsPerPixelX
    Cadre.Bottom = Screen.Height / Screen.TwipsPerPixelY
End If

'Valeurs par défaut du cadre de l'image
CadreImage.Right = ddsd.lWidth
CadreImage.Bottom = ddsd.lHeight

'Le cadre de l'image ne doit pas dépasser le cadre d'affichage
If X < Cadre.Left Then
    If X + ddsd.lWidth > 0 Then CadreImage.Left = Cadre.Left - X Else Exit Function
End If
If X + ddsd.lWidth > Cadre.Right Then
    If X < Cadre.Right Then CadreImage.Right = Cadre.Right - X Else Exit Function
End If
If Y < Cadre.Top Then
    If Y + ddsd.lHeight > 0 Then CadreImage.Top = Cadre.Top - Y Else Exit Function
End If
If Y + ddsd.lHeight > Cadre.Bottom Then
    If Y < Cadre.Bottom Then CadreImage.Bottom = Cadre.Bottom - Y Else Exit Function
End If

'Dessiner l'image
Backbuffer.BltFast Min(X, 0), Min(Y, 0), Image, CadreImage, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY

End Function

Conclusion :


Vous remarquerez que la fonction demande la variable DDSURFACEDESC2 que l'on a utilisé pour charger l'image : c'est la seule façon que j'ai trouvé pour avoir la taille de l'image. Si vous avez une méthode pour connaitre la taille d'une surface sans cette variable prévenez-moi !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.