C'est une petite DLL qui génère une image ou il y a l'image originale et son reflet en dessous qui s'estompe progressivement. Le principe est simple : on créé une image, on dessine l'image originale, on dessine l'image originale pivotée de 180° avec une symétrie horizontale. On applique ensuite un dégradé Transparent->Couleur d'arrière-plan sur la deuxième partie de l'image.
Source / Exemple :
Public Shared Function GetImageReflect(ByVal OriginalImage As Image, ByVal PercentOfHeight As Double, ByVal BackColor As Color) As Image
'On teste les arguments
If OriginalImage Is Nothing Then Throw New ArgumentNullException("OriginalImage")
'On créé une image de la même largeur que l'image d'origine et la hauteur nécéssaire pour faire rentrer le reflet
Dim img As Image = DirectCast(New Bitmap(OriginalImage.Width, CInt(OriginalImage.Height + (OriginalImage.Height * PercentOfHeight))), Image)
'On créé un objet Graphics pour le dessin
Dim gr As Graphics = System.Drawing.Graphics.FromImage(img)
'On dessine l'image originale
gr.DrawImage(OriginalImage, New Rectangle(0, 0, img.Width, OriginalImage.Height))
'On déclare la variable pour le reflet a partir de l'image originale
Dim reflect As Image = DirectCast(OriginalImage.Clone, Image)
'On pivote l'image de 180° avec symétrie horizontale
reflect.RotateFlip(RotateFlipType.Rotate180FlipX)
'Et on dessine le reflet en dessous de l'image originale
gr.DrawImage(reflect, New Rectangle(0, OriginalImage.Height, OriginalImage.Width, OriginalImage.Height))
'On créé un dégradé Transparent en haut et de la couleur de l'arrière-plan en bas
Dim gradient As New Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(0, img.Height), Color.Transparent, BackColor)
'On dessine un rectangle sur le reflet
gr.FillRectangle(gradient, New Rectangle(0, OriginalImage.Height, OriginalImage.Width, img.Height - OriginalImage.Height))
'On supprime les objets
gr.Dispose()
gr = Nothing
reflect.Dispose()
reflect = Nothing
gradient.Dispose()
gradient = Nothing
'On retourne l'image
Return img
End Function
Conclusion :
Si jamais quelqu'un a une idée pour remplacer la couleur d'arrière-plan par une sorte de "brush" transparent...
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.