MrMexx
Messages postés8Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention20 mai 2010
-
3 févr. 2010 à 09:39
MrMexx
Messages postés8Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention20 mai 2010
-
4 févr. 2010 à 08:42
Bonjours, dans le cadre d'une étude scolaire, et étant débutant dans le C# je me permet de vous demander votre aide :) Mon but étant de récupérer une chaine de caractère qui compose un fichier .bmp pour l'insérer dans un tableau à deux dimension en vue d'effectuer des opérations de permutation des chaines pour effectuer des rotations d'image et des comparaisons entre chaines. Mais je ne sais pas du tout comment procéder. Pour étudier un peu le fichier image j'ai commencer par télécharger WinHex. Quelqu'un peux t'il m'indiquer la démarche, la fonction à utiliser ? Merci.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 3 févr. 2010 à 15:09
Salut
Tout d'abord, un char (System.Char) en C# fait 2 octets. De plus, une chaine de caractères est un string.
En l'occurrence, je pense que tu parlais d'un tableau de byte.
Pour obtenir les pixels d'une image bitmap, tu as plusieurs solutions :
- lire manuellement chaque byte du fichier
- utiliser la classe System.Drawing.Bitmap et ses méthodes managées
- utiliser la classe System.Drawing.Bitmap et du code unsafe
Première méthode : Relativement simple sur les .bmp, mais il faut d'abord voir la structure d'un tel fichier pour distinguer l'en-tête des pixels eux-même (une petite recherche sur internet suffira).
Tu peux utiliser Stream.ReadByte() (sans oublier de caster en byte) pour lire chaque composante du pixel.
Deuxième méthode : Simple, et marche également sur les .jpg, .png... mais pas très performante.
Tu charges ton fichier avec new Bitmap(Image.FromFile("Mon fichier.bmp")); puis tu utilises la méthode GetPixel(x,y) qui te renvoie une Color (qui possède les propriétés A, R, G et B qui sont des byte.
Troisième méthode : fonctionne avec les .jpg, .png..., performante, mais plus complexe. Fais une recherche sur "LockBits C#" pour avoir plus d'informations.
Après, tu peux utiliser une syntaxe de pointeurs C/C++ en mettant ton code dans un bloc unsafe{} (et en acceptant le code unsafe dans ton projet) ou utiliser les méthodes de gestion mémoire de C# (genre System.Runtime.InteropServices.Marshal.Copy())
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
MrMexx
Messages postés8Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention20 mai 2010 4 févr. 2010 à 08:42
Bonjours, je tiens particulièrement à te remercier Krimog, ce matin je vais étudier la deuxième, qui d'après tes dires, se révèle plus facile Puis si j'y arrive j'essayerai volontiers la 3èmes solution. Je repasserai sur le poste plus tard pour te tenir au courant . Merci encore.