Image reflect - générer le reflet d'une image

Description

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

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.