Diffused bitmap - création d'une image diffuse.

Soyez le premier à donner votre avis sur cette source.

Vue 7 799 fois - Téléchargée 572 fois

Description

Le projet permet de visualiser la création d'une image diffuse.
La diffusion peut s'effectuer vers la droite, la gauche, le bas ou le haut et demande un léger temps de calcul.

Source / Exemple :


#region GetDiffusedBitmap (création d'une image diffuse)
/// <summary>
/// Retourne une image diffuse.
/// </summary>
/// <param name="img">Image d'origine.</param>
/// <param name="direction">Sens de la diffusion.</param>
/// <returns>Image diffusée.</returns>
public static Bitmap GetDiffusedBitmap(Image img, dbm_Direction direction)
{
	float stepFactor = 0.01f;
	float alphaFactor = stepFactor;
	float alpha = 1.0f;
	int step = 0;
	if (direction == dbm_Direction.Right || direction == dbm_Direction.Left)
		step = (int)(img.Width*stepFactor);
	else
		step = (int)(img.Height*stepFactor);

	int x = 0;
	if (direction == dbm_Direction.Left)
		x = img.Width - step;
	else if (direction == dbm_Direction.Top)
		x = img.Height - step;

	ColorMatrix cm = new ColorMatrix();
	cm.Matrix33 = alpha;

	ImageAttributes ia = new ImageAttributes();
	ia.SetColorMatrix(
		cm,
		ColorMatrixFlag.Default,
		ColorAdjustType.Bitmap
		);

	Bitmap bmp = new Bitmap(img.Width, img.Height);

	using (Graphics g = Graphics.FromImage(bmp))
	{
		while (cm.Matrix33 >= 0.0f)
		{
			Rectangle rect = Rectangle.Empty;
			if (direction == dbm_Direction.Right || direction == dbm_Direction.Left)
				rect = new Rectangle(x, 0, step, img.Height);
			else
				rect = new Rectangle(0, x, img.Width, step);
			g.DrawImage(
				img,
				rect,
				rect.X, 
				rect.Y,
				rect.Width,
				rect.Height,
				GraphicsUnit.Pixel,
				ia
				);

			if (direction == dbm_Direction.Right || direction == dbm_Direction.Bottom)
				x += step;
			else if (direction == dbm_Direction.Left || direction == dbm_Direction.Top)
				x -= step;

			alpha -= alphaFactor;
			cm.Matrix33 = alpha;
			ia.SetColorMatrix(
				cm,
				ColorMatrixFlag.Default,
				ColorAdjustType.Bitmap
				);
		}
	}

	return bmp;
}
#endregion

#region dbm_Direction
public enum dbm_Direction : short
{
	/// <summary>
	/// Vers la droite.
	/// </summary>
	Right			= 0,
	/// <summary>
	/// Vers la gauche.
	/// </summary>
	Left			= 1,
	/// <summary>
	/// Vers le haut.
	/// </summary>
	Top			= 2,
	/// <summary>
	/// Vers le bas.
	/// </summary>
	Bottom			= 3
}
	#endregion

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
12
belle effet !
Messages postés
1
Date d'inscription
dimanche 21 avril 2002
Statut
Membre
Dernière intervention
11 juillet 2005

Bonne source et interressante.:)
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
59
Pas mal, pas mal !
Je ne savais pas que c'était "si simple" de faire quelque chose comme ça... Enfin, encore faut-il connaître les classes ColorMatrixFlag, ColorMatrix et ImageAttributes...
Bonne source.

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.