IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Pb Lecture de bitmap monochrome


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3
    Par défaut Pb Lecture de bitmap monochrome
    Bonjour,

    j'avais envoyé le message suivant sur le forum de C++, n'ayant pas eu de réponse, je retente ma chance sur celui de Borland

    Je suis en train de modifier un programme sur Builder pour qu'il puisse lire des images bitmap monochrome. Malheureusement, il me manque une fonction pour pouvoir lire les pixels (en RGB ou niveaux de gris, g ce qu'il faut mais pas en monochrome (codé sur un bit)).

    Quelqu'un pourrait-il m'aider s'il vous plait? ca devient assez urgent.

    Merci d'avance.

    a+

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    MyBitmap->LoadFromFile(...);
    if(MyBitmap->PixelFormat==pf1bit)//monochrome vraiment ?
        {
        for(int y=0;y<MyBitmap->Height;y++)
            {
            Byte Masque=0x80;//renouveler le masque à chaque ligne
            Byte *pByte=(Byte*)MyBitmap->ScanLine[y];
            for(int x=0;x<MyBitmap->Width;x++)
                {
                 if((pByte[x/8]&Masque)==Masque)
                    {
                    //allumé
                    }
                 else
                    {
    	  //éteint
    	  }
                 asm//rotation circulaire vers la droite du masque
                    {
    	            MOV AL,Masque;
    	            ROR AL,1;
    	            MOV Masque,AL;
                    }
                }
            }
        }
    Peut-être que ça marche...on ne sait jamais...

  3. #3
    Membre éprouvé
    Homme Profil pro
    VP of Research and Innovation
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Canada

    Informations professionnelles :
    Activité : VP of Research and Innovation

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Par défaut
    Bonjour,

    Pour lire les bits d'une image tu dois utiliser la propriété ScanLine.
    Son interprétation dépend de la propriété PixelFormat.

    si ton image est codée en 1Bit, alors 1 octet est égal à 8 points.
    si ton image est codée en 8Bits, alors 1 octet est égal à 1 points.
    etc. ...

    Voici un exemple ou j'affiche une image sous forme de texte dans un Memo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
        Byte *ptr;
        Memo1->Text = "";
        AnsiString Line;
     
        int iiMax = (ABitmap->Width / 8);
     
        if ((ABitmap->Width % 8) != 0) {
            iiMax++;
        }
     
            ABitmap->PixelFormat = Graphics::pf1bit;
     
            for (int y = 0; y < (ABitmap->Height); y++)
            {
                ptr = (Byte *)ABitmap->ScanLine[y];
                Line = "";
                for (int x = 0; x < iiMax; x++) {
     
                    __int16 APixel = ptr[x];
                    __int16 AMask = 0x80;
     
                    for (; AMask > 0x00; AMask = AMask >> 1) {
                        if ((APixel & AMask) == 0) {
                            Line = Line + "1";
                        }
                        else {
                            Line = Line + "0";
                        }
                    }
                    Line = Line + " ";
                }
     
                Memo1->Lines->Add(Line);
                Application->ProcessMessages();
            }

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3
    Par défaut Merci...
    Bonjour,

    et merci beaucoup à vous 2 . je n'ai pas encore essayé les 2 méthodes, dès que j'ai avancé un petit peu dans ce programme je vous en parle.

    merci encore et à bientôt.

    Loïc

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3
    Par défaut Ca marche!
    Si si ca marche!!

    En fait je n'avais pas pensé à lire le bitmap comme objet; dans ma première version je le lisais comme fichier avec fseek et fread, et je n'avais pas de pbs de taille de pixels car tout était sur 8 bits ou + donc codé sur un char...

    ...et c'est bien plus simple comme celà d'ailleurs...

    merci encore et a+

    Loïc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertir une image BMP en Bitmap monochrome?
    Par byubi dans le forum ImageJ
    Réponses: 3
    Dernier message: 31/03/2009, 21h42
  2. GDI bitmap monochrome->couleur
    Par freehair dans le forum MFC
    Réponses: 10
    Dernier message: 25/02/2008, 17h02
  3. Lecture d'une image bitmap
    Par Nanoucha dans le forum Assembleur
    Réponses: 1
    Dernier message: 17/02/2006, 22h47
  4. Lecture d'un bitmap en Java. Comment ?
    Par Jean++ dans le forum Multimédia
    Réponses: 10
    Dernier message: 17/01/2006, 10h03
  5. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo