Gestion des images - 1

Soyez le premier à donner votre avis sur cette source.

Vue 9 140 fois - Téléchargée 595 fois

Description

Ce petit programme prends en parametre de la ligne de commande un chemin d'accès à une image et en fabrique une nouvelle en négatif.

Source / Exemple :


using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace ConsoleApplication5
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			if (args.Length != 1)
			{
				Console.Error.WriteLine("Erreur de syntaxe : ConsoleApplication5 <fichier image>");
				return;
			}

			Bitmap img;

			try
			{
				img = new Bitmap(args[0]);
			}
			catch
			{
				Console.Error.WriteLine("Format de l'image inconnu");
				return;
			}

			Color ctmp;

			for (int x = 0;x < img.Width;x++)
				for (int y = 0;y < img.Height;y++)
				{
					ctmp = img.GetPixel(x,y);
					ctmp = Color.FromArgb(255-ctmp.R,255-ctmp.G,255-ctmp.B);
					img.SetPixel(x,y,ctmp);
				}

			try
			{
				img.Save(args[0]+".bmp",ImageFormat.Bmp);
			}
			catch
			{
				Console.Error.WriteLine("Impossible d'enregistrer l'image");
				return;
			}

			Console.Out.WriteLine("Les couleurs de l'image ont été inversées");
		}
	}
}

Conclusion :


Je met tous les fichiers du projet dans le zip car je ne sais pas comment cela va rendre sur le site juste ce code ...

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Messages postés
224
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
17 juin 2006

Salut, à lire ton code, je vois tout de suite 2 erreurs qui font que ton code doit être assez lent à l'exécution...

1. Dans tes boucles, tu accèdes aux propriétés img.Width et img.Height ce qui a pour effet de nettement ralentir ton programme. Stocke les valeurs dans des variables, et compare le temps d'exécution...

2. GetPixel et SetPixel sont très lent eux aussi, pour des performances optimales, travailles en mode unsafe pour récupérer le tableau des pixels sous forme d'un pointeur d'Uint32 (Argb). Ensuite, applique un XOR 0x00ffffff à chaque pixel, dans l'ordre ou ils viennent (à partir de la valeur de départ du pointeur et pour chaque pixel, pas besoin de width, height).

Si tu fais ça, juste pour te donner un ordre d'idées, le temps de calcul nécessaire pour rendre une image d'environ 3000 x 4000 pixels prendra 0,34 secondes, celui nécessaire pour une image de 800 x 600 prendra 0,03 secondes.

Si tu veux que je poste un morceau de code faisant cela, il suffit de demander =)

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.