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

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

2 réponses

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