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 :

regler un probleme avec mon code


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 29
    Par défaut regler un probleme avec mon code
    salut tout le monde
    mon probleme se pose dans l'affichage de mon histogramme a partir d'une image bitmâp voila ce que j'ai coder :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unitramzi.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormClick(TObject *Sender)
    {
    OpenPictureDialog1->Execute();
    Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    Image1->Height=Image1->Picture->Height;
    Image1->Width=Image1->Picture->Width;
     
    }
    //---------------------------------------------------------------------------
     
      void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Canvas->Rectangle(300,50,600,300);
    Canvas->Pen->Color=clBlue;
    Canvas->MoveTo(320,75);
    Canvas->LineTo(320,300) ;
    Canvas->MoveTo(320,200);
    Canvas->LineTo(450,200);
    int histo[266];
    int i,j;
    for(i=0;i<266;i++)
    histo[i]=0;
    for(i=48;i<Image1->Width+1024;i++)
     for(j=8;j<Image1->Height+1024;j++)
    histo[Canvas->Pixels[i][j]]++;
    for(i=0;i<266;i++)
    Canvas->Pen->Color=clBlack;
    Canvas->MoveTo(i+320,100);
    Canvas->LineTo(i+320,histo[i]+100);
     
    }
    mais j'ai rien al'execution donc je vous demande de jetez un coup d'oeil sur ce code et me corriger si c'est possible

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut kachaloarmin
    Je pense que ton probleme vient du fait que tu n'a pas encadre ton code par les accolades dans tes boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(i=0;i<266;i++)
    {
    ... Le code qui doit etre execute
    }
    for(i=48;i<Image1->Width+1024;i++)
    {
    ... Le second code qui doit etre execute
    }

  3. #3
    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
    Salut !

    Il faudrait savoir si le bitmap est un 8 ou 24 bits.
    Savoir également si ce bitmap est en couleurs ou en niveaux de gris.

    Il est clair qu'on va avoir un gros problème de débordement dans ton code, avec l'index du tableau !
    Pour un noir, Pixels va renvoyer 0x000000 mais pour un blanc on a 0xFFFFFF.
    donc attention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    histo[ Canvas->Pixels[i][j] ]++;
    Si le bitmap est un 8 bits, il suffit d'utiliser ScanLine pour récupérer l'index de la couleur qui sera aussi celui de l'histo.

    Si maintenant on a un 24 bits, on a deux possibilités, soit il s'agit d'un bitmap en niveaux de gris soit c'est de la couleur à profusion !
    Pour un bitmap à niveau de gris, on sait que les composantes (RGB) sont égales donc il suffit de récupérer l'une ou l'autre et on se retrouve à gérer comme dans le cas d'un bitmap 8 bits, à la différence près que l'on accède à une entité 24 bits, composée donc de 3 octets consécutifs pour les RGB.
    J'ai donné du code allant dans ce sens, sur ce forum !

    Si on a par contre un bitmap 24 bits couleurs... je pense qu'on est obligé de raisonner autrement.
    On peut éventuellement forcer une conversion en 8 bits.
    Sinon, faire l'histogramme en R,G et B. ou utiliser d'autres formules... à ce stade je ne suis pas spécialiste !

    A plus !

Discussions similaires

  1. [Débutant] Probleme avec mon code ou mon ftp?
    Par bananekiller dans le forum VB.NET
    Réponses: 0
    Dernier message: 12/06/2012, 21h12
  2. [AJAX] Code ajax
    Par christa_k dans le forum AJAX
    Réponses: 2
    Dernier message: 23/09/2009, 09h32
  3. Probleme avec mon code : Comment changer de JPanel
    Par serialkilled dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/12/2006, 10h13
  4. [Tableaux] probleme avec mon code pour faire un parseur !
    Par Joe-La-Boule dans le forum Langage
    Réponses: 10
    Dernier message: 11/10/2006, 15h35
  5. Problème avec mon code et avec gcc
    Par JavaAcro dans le forum Linux
    Réponses: 3
    Dernier message: 13/06/2006, 22h47

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