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++ Discussion :

le type const char* const * et fltk en toile de fond


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 29
    Par défaut le type const char* const * et fltk en toile de fond
    Bonjour tout le monde,

    Je suis en train de travailler sur le codage/decodage de Datamatrix ECC200 pour un stage.
    Pour pouvoir tester le programme de decodage (realise en mode console), je programme un GUI qui prend une image BMP fournie par le site :http://datamatrix.kaywa.com/
    Mon idee est de retravailler cette image et coder les cases noires par 1 et les cases blanches par 0.
    Pour la bmp fournie par le site, il y'a une bordure de 6 pixels blancs et puis des carres de 12 pixels de cote representant les donnees.

    J'ai choisi d'utiliser a tort ou a raison FLTK et j'ai malheureusement tres peu de connaissances sur les GUI en general.
    Et je bute essentiellement sur le probleme de recuperer les datas fournie par un accesseur de Fl_Image.

    J'arrive ainsi a charger la matrice et l'afficher mais je n'ai aucune idee comment exploiter les donnees contenues dans ce format Fl_Image.

    La fonction data() revoie un type exotique du genre const char * const *.
    http://www.fltk.org/doc-1.1/Fl_Image.html#Fl_Image.data
    Ce type de donnees est tres peu utilisee et apres une recherche sur le net je sais toujours pas ce que cela fait (double cast ?).

    Je vous donne le code correspondant et la tentative malheureuse de simplement lire les donnees dans une fenetre de sortie.

    Merci d'avance pour votre aide.
    Cordialement,
    Damien

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    #include <stdlib.h>
    #include <string>
    #include <sstream>
    #include <iostream>
    #include <fstream>
    #include <float.h>
    #include <stdio.h>
    #include <iostream.h>
     
     
    #include <FL/Fl_Gl_Window.H>
    #include <FL/fl_box.H>
    #include <FL/Fl_color_Chooser.H> // librairy correspondig to color chooser
    #include <FL/gl.h>
    #include <FL/Fl_Button.H>
    #include <FL/Fl_Output.H>
    #include <FL/Fl_Input.H>
    #include <FL/Fl.H>// library for using FLTK
    #include <FL/Fl_Window.H>// on add le prototype de la fenetre
    #include <FL/Fl_Box.H>// aad library for this widget
    #include <FL/fl_draw.H>
    #include <FL/Fl_File_Chooser.H>
    #include <FL/Fl_Bitmap.H>
    #include <FL/Fl_BMP_Image.H>
     
     
    #include "classwindow.h"
     
     
    SoftWindow::SoftWindow(int x, int y,int w, int h, const char* title):Fl_Window(x,y,w,h,title)
     
    {  
     begin();//sets the current group so you can build the widget tree by just constructing the widgets.
     
         quit = new Fl_Button(550,550, 40, 30, "Quit");
         quit->callback(cb_quit, this); 
     
     
         bild = new Fl_Box(80,80,300,300, "Datamatrix");
         bild->box(FL_UP_BOX);
     
         out = new Fl_Output(0, 400, 140, 200, "Outputwidth:");
     
     
         datamatrix= new Fl_BMP_Image("C://Dev-Cpp//progavecacquisitionGUI//Bild//123456.bmp");//image  taille 132*132
     
       bild->image(datamatrix); //Affichage
         const char* const* myarray;
    myarray= datamatrix->data();
     
        for(int i=0;i<132;i++)
          for (int j=0;j<132;j++)
         { 
     
           sprintf(charval,"%s(%d)",charval,(char)myarray[i][j]);
     
        }     
           out->value(charval);
     
     
       end();
       show();
    }
     
     
    SoftWindow::~SoftWindow() //destructor
    {}
     
     
    void SoftWindow::cb_quit(Fl_Widget* , void* v) 
    {
       ( (SoftWindow*)v )-> hide();
    }
     
    int main ()
     
    {
     
       SoftWindow win(100,100,600,600,"SoftWindow"); 
     
     win.hide();
     win.show();
     
       return Fl::run();
    }
     
     
     
     
     
     
     
     
     
     
    #ifndef CLasswindow_H
    #define CLasswindow_H
     
     
    class SoftWindow : public Fl_Window 
    {
     
       public:
     
    	 SoftWindow(int x, int y, int w, int h, const char* title );//constructor
         ~SoftWindow();//destructor 
     
          Fl_Button* quit;// button to quit the prog
     
          //Fl_File_Chooser* look;        
     
          Fl_Output* out;
          Fl_Box *matrix,*bild;
          Fl_BMP_Image *datamatrix;
          Fl_Image *buff; 
     
       private:
     
          static void cb_quit(Fl_Widget*, void*);
     
     
     
    };
     
    #endif

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    const char * const * désigne un pointeur de pointeur de char ; les const signifient que les deux derniers niveaux d'indirection sont constants, donc en gros tu as un accès en lecture seule à ce tableau.

    Pour connaître le sens exact de la variable renvoyée il faudrait lire plus de doc, mais un double-pointeur peut typiquement être une mauvaise implémentation d'un tableau à deux dimensions. Si c'est le cas, ta boucle d'affichage devrait être correcte.

    Après, il faut voir comment interpréter les valeurs. Est-ce que ce sont des pixels à composantes RGB entre 0 et 255 ? Est-ce que c'est une image monochrome ? ...

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 29
    Par défaut type exotique et compagnie
    Merci d'avoir repondu aussi promptement,

    Il est clair que l'idee de tableau a deux dimensions est derriere la classe Fl_Image vu que il ya deux accesseurs pour connaitre la hauteur et la largeur.

    Je ne comprend pas alors (et apres avoir lu ton explication) la differrence entre const char ** data et const char * const *.

    Je n'arrive toujours pas a lire avec la boucle une quelconque donnee probante.

    Entre temps je lis manuellement mon tableau apres avoir creer une classe qui lit des bitmap et je recois un certain resultat,des valeurs evoluant entre 0 et 255. Je m'attendais plutot a pouvoir lire des successions de 0 et 255 apres un header correspondant a l'image monochrome noir et blanc que j'importe.

    Bref j'y travaille mais ca me bouffe plein de temps par rapport a l'utilisation d'une classe complete donnee par FLTK et bien ecrite par des pros de C++.

    Laurent ( ou quelqu'un d'autre) si vous avez le temps, l'envie ou une idee comment utiliser cette classe "FLTKienne" et pouvoir faire la tambouille que j'ai expliquee plus haut ca me rendrait service.
    Je vais essayer de devellopper une solution batarde pour pouvoir presenter mes premiers resultats a mon boss.

    cordialement,

    Damien

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je ne comprend pas alors (et apres avoir lu ton explication) la differrence entre const char ** data et const char * const *
    Avec un const char** on peut modifier le premier niveau, et en l'occurence faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const char** data = ...;
    data[0] = NULL; // et hop on vient de virer une ligne !
    const char * const * garantit un accès en lecture seule sur les deux dimensions du tableau.
    C'est quand même pas terrible comme implémentation...

    A part ça je ne peux pas t'aider, je ne connais pas FLTK.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 29
    Par défaut FLTK le GUI que personne n´utilise
    Ben merci Laurent,

    Tant pis je vais le faire manuellement et utiliser FLTK juste pour faire des gentils Wiggets.
    De toute facon mon boss comprend pas bien dans quelle voie je m'engage.

    Deja que lui il voit beaucoup d'implementation en look up table alors que je suis plutot pour l'algorithmie pure.

    Enfin bref de joyeux programmes en perspective.

    Cordialement,

    Damien

Discussions similaires

  1. const char / const charGL / char / string ?
    Par karistouf dans le forum OpenGL
    Réponses: 2
    Dernier message: 09/01/2015, 09h22
  2. Réponses: 3
    Dernier message: 20/01/2014, 00h04
  3. problème de type int - DWORD - const char *
    Par dams77 dans le forum Débuter
    Réponses: 7
    Dernier message: 13/05/2010, 11h21
  4. Que signifie "const char* const "?
    Par Krishna dans le forum C
    Réponses: 3
    Dernier message: 14/04/2009, 15h37
  5. Réponses: 3
    Dernier message: 25/10/2006, 22h54

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