Récupérer caractère d'un fichier bmp ?

Signaler
Messages postés
8
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
20 mai 2010
-
Messages postés
8
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
20 mai 2010
-
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.

2 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
42
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é. -
Messages postés
8
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
20 mai 2010

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.