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

Linux Discussion :

X-Window : comment inverser les couleur d'un pixmap


Sujet :

Linux

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut X-Window : comment inverser les couleur d'un pixmap
    Bonjour,

    J'essaye de faire changer le pixmal mais je n'y arrive pas.

    En fait 'ai des pixmap et des que je clic sur un d'eux, je doit inverser leur couleur (fond noir et contour blanc par exemple).

    exemple :
    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
     
    GC      gc, gc_invert;
    Display *display;
    int     screen;
    int i, j;
     
    Drawable draw;
     
    Window  root, bidon;
    Window  fem;
    Window  item[nbFen];
     
    unsigned long white_pixel, black_pixel;
     
    int Ox=0;
    XEvent ev;
     
    XFontStruct * fd;
    XGCValues gcv;
    XSetWindowAttributes *gch;
     
    int premier=1;
     
    Pixmap mon_pix, tabPic[10];
    int main() {
        if ((display = XOpenDisplay ("")) == NULL) {
            fprintf (stderr, "Can't open Display %s\n",XDisplayName(NULL));
            exit (1);
        }
     
        gc = DefaultGC (display, screen);
        screen = DefaultScreen (display);
        root = RootWindow (display, screen);
        white_pixel = WhitePixel (display, screen);
        black_pixel = BlackPixel (display, screen);
     
        fem = XCreateSimpleWindow (display, root, 20, 30, L, H, 2, black_pixel, white_pixel);
     
        for(i=0; i < 4; i++)
            item[i] = XCreateSimpleWindow (display, fem, 0, i*(hI+1), hI, hI, 1, black_pixel, white_pixel);
     
        for(j=0; j < 4; i++,j++)
            item[i] = XCreateSimpleWindow (display, fem, 51, j*(hI+1), hI, hI, 1, black_pixel, white_pixel);
     
     
     
        // Ligne ZIG ZAG
        mon_pix = XCreatePixmapFromBitmapData(display, item[0], lignebrisee_bits, lignebrisee_width, lignebrisee_height, black_pixel, white_pixel, DefaultDepth(display, screen));
        XSetWindowBackgroundPixmap(display, item[0], mon_pix);
     
        // Cercle sans centre
        mon_pix = XCreatePixmapFromBitmapData(display, item[1], cercle_bits, cercle_width, cercle_height, black_pixel, white_pixel, DefaultDepth(display, screen));
        XSetWindowBackgroundPixmap(display, item[1], mon_pix);
     
        // D
        mon_pix = XCreatePixmapFromBitmapData(display, item[2], d_bits, d_width, d_height, black_pixel, white_pixel, DefaultDepth(display, screen));
        XSetWindowBackgroundPixmap(display, item[2], mon_pix);
        ........
        XSelectInput (display, fem, ExposureMask);
     
        for(i=0; i < nbFen; i++)
            XSelectInput (display, item[i], ExposureMask|EnterWindowMask|LeaveWindowMask);
     
        XStoreName (display, fem, "Dessin");
     
        for(i=0; i < nbFen; i++)
            XMapWindow (display, item[i]);
     
        XMapWindow (display, fem);
     
        while(1) {
            XNextEvent(display, &ev);
            bidon = ev.xany.window;
            printf("%d \n", ev.type);
            switch (ev.type) {
                case Expose :
                    break;
                case EnterNotify :
                {
                    change(black_pixel, white_pixel, bidon);
                    break;
                }
                case LeaveNotify :
                {
                    change(white_pixel, black_pixel, bidon);
                    break;
                }
                case ButtonPress :
                {
                    // inversion
                    printf("ICI\n");
                    invertCouleur(black_pixel, white_pixel, bidon);
                    gcv.foreground = white_pixel;
                    gcv.function = GXinvert;
                    gc_invert = XCreateGC(display, bidon, GCFunction, &gcv);
                    //XChangeWindowAttributes(display, bidon, CWBackPixel, &gch);
                    XChangeGC(display, gc_invert, GCFunction, &gcv);
                    break;
                }
                case MotionNotify :
                    break;
                default:
                    break;
            }
        }
        XCloseDisplay(display);
    }
    Pouvez-vous me dire ce comment faire pour faire l'invertion ? car je pensait que je peux changer le contexte graphique mais je ne vois pas comment l'appliquer...

    Merci

  2. #2
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Si tu dessines en noir et blanc avec une palettes de couleur, pour inverser noir/blanc, utilises un masque des plans WhitePixel ^ BlackPixel et la fonction GXinvert.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Merci mais le problème que que je ne vois pas quel commande utiliser pour inveser ?

  4. #4
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Je ne comprends pas bien ton problème...
    La fonction GXInvert ne marche pas ?

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    juste une question par rapport à ce que je lis du code ici :

    Pour utiliser GTK vous codez en X direct ???????

    Pas avec la XToolkit ?? XtVaCreateWidget etc etc ??

    C'est aussi bas niveau que ça ?

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    On fait comme cela . C'est pas moi qui veux. C'est pour mes études. Mais :


    C'est pas comme cela qu'on l'utilise ?

    XSetBackground (display, gc, black_pixel);
    XSetForeground (display, gc, white_pixel);
    XSetFunction (display, gc, GXinvert);

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    je ne posais pas la question à toi mais aux spécialistes de GTK.

    Sinon oui c'est comme ça qu'on utilise les fonctions que tu cites..

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    ben alors je ne comprends pas pour quel raison cela n'inverse pas le fond...

    Tu aurais une idée ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    euh...

    GXInvert inverse le foreground et le background, pas le tracé des pixels d'une Pixmap, qui elle passe par Colormap...

    Un moyen simple serait dans le tableau de bytes de l'image de remplacer image(i*nx+j) en 255-image(i*nx+j)

    Sinon de fabriquer une colormap inverse...

    A moins que ton image ne soit que sur 1 bit (VRAIE bitmap)

  10. #10
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Citation Envoyé par souviron34
    Pour utiliser GTK vous codez en X direct ???????

    Pas avec la XToolkit ?? XtVaCreateWidget etc etc ??

    C'est aussi bas niveau que ça ?
    Non pas du tout.
    C'est un cas exceptionel, en général on fait jamais auqun appel ne serait-ce qu'à la XToolkit, GTK+ est isolés de ces parties bas niveaux par une autre couche qui appel la XLib, c'est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    GTK+ - Nous
       |
    GDK - couche logiciel
       |
    XLib
       |
      X
    Je n'ai jamais eu besoin d'appeler des fonctions XLib, en général on se contente des fonctions GTK+ qui lui même appel les fonctions GDK qui sont réécrites pour s'adapter a chaque système .

    C'est vraiment un cas exceptionel, un exercice ou un truc du genre, sinon on a jamais besoin de coder en X.

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    excuse moi j'ai aps très bien compris...

    Je cré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mon_pix = XCreatePixmapFromBitmapData(display, item[0], lignebrisee_bits, lignebrisee_width, lignebrisee_height, black_pixel, white_pixel, DefaultDepth(display, screen));
        XSetWindowBackgroundPixmap(display, item[0], mon_pix);
    (plusieurs)

    Donc cela veux dire que je doit créer des pixmap avec le sens oppose des couleurs ?

    Parce que j'ai : dans un fichier .bmù : exemple :

    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
     
    #define cercle_width 50
    #define cercle_height 50
    static unsigned char cercle_bits[] = {
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
       0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
       0x03, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x40,
       0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00,
       0x00, 0x10, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80,
       0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00,
       0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
       0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04,
       0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00,
       0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00,
       0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
       0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
       0x10, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00,
       0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80,
       0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08,
       0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00,
       0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02,
       0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
       0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80,
       0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20, 0x00,
       0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
       0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00,
       0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00 };
    idem pour les autres bitmap

    Merci

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    ok c'est une vraie image (bitmap est le format)

    alors il faut que tu te fasses une colormap en noir et blanc...

    regardes les fonctions XAllocColormap, XAllocColorCell, etc..

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    J'ai trouvé une méthode plus simple je pense : quand je veux changer la couleur (inverser) il me suffit d'effacer le window et de le remettre le pixma mais cette fois en inversant le black et white.... (dans les paramettres).

    Ca fonctionne mais je ne comprend pas pourquoi cette fois il el fait mais au deuxieme click de la souris et non au premier. A votre avis ?

  14. #14
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    L'affichage n'est peut être pas actualisé tout de suite après le premier click.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    image= XCreatePixmap
    (affichage, fenetre, LARGEUR, HAUTEUR, DefaultDepthOfScreen(ecran));
    XFillRectangle
    (affichage, image, contexte_graphique_efface, 0, 0, LARGEUR, HAUTEUR);

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Ok mais :

    Au démarage je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Cercle sans centre
        mon_pix = XCreatePixmapFromBitmapData(display, item[1], cercle_bits, cercle_width, cercle_height, black_pixel, white_pixel, DefaultDepth(display, screen));
        XSetWindowBackgroundPixmap(display, item[1], mon_pix);
    par exemple....

    et lors de l'evenement click je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mon_pix = XCreatePixmapFromBitmapData(display, bidon, cercle_bits, cercle_width, cercle_height, white_pixel, black_pixel, DefaultDepth(display, screen));
            XSetWindowBackgroundPixmap(display, bidon, mon_pix);
    XFillRectangle(display, mon_pix, gc, 0, 0, hI, hI);
    XFillrectangle c'est pour le remplissage donc même en utilisant ton code ca l'affiche que la deuxième fois.

    Donc je ne comprends pas comment l'utiliser correctement... pourtant j'essage l'écran avant tout

    Merci

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    n'oublie pas qu'un drawable doit avoir une routine pour gérer l'évènement Expose ABSOLUMENT...

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonsoir,

    J'ai changé ma méthode :

    Voici ce que je fait :

    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
     
    pixmap[0] = XCreateBitmapFromData(dpy, root, lignebrisee_bits, lignebrisee_width, lignebrisee_height);
        pixmap[1] = XCreateBitmapFromData(dpy, root, cerclecentre_bits, cerclecentre_width, cerclecentre_height);
        pixmap[2] = XCreateBitmapFromData(dpy, root, cercle_bits, cercle_width, cercle_height);
        pixmap[3] = XCreateBitmapFromData(dpy, root, carre_bits, carre_width, carre_height);
        pixmap[4] = XCreateBitmapFromData(dpy, root, d_bits, d_width, d_height);
        pixmap[5] = XCreateBitmapFromData(dpy, root, blanc_bits, blanc_width, blanc_height);
        pixmap[6] = XCreateBitmapFromData(dpy, root, flechegauche_bits, flechegauche_width, flechegauche_height);
        pixmap[7] = XCreateBitmapFromData(dpy, root, flechedroite_bits, flechedroite_width, flechedroite_height);
     
        XSetWindowAttributes xsw;
     
        xsw.event_mask = EnterWindowMask | LeaveWindowMask;
     
        for (i = 0; i < 2; i++) {
            for (j=0;j<4;j++) {
                xsw.background_pixmap = pixmap[i + 2*j];
                w = XCreateWindow(dpy, fem, i*l/2,j*h/4, l/2, h/4, 1, CopyFromParent, InputOutput, CopyFromParent, CWEventMask | CWBackPixmap, &xsw);
                XSetWindowBackgroundPixmap(dpy, w, pixmap[i + 2*j]);
                //XSelectInput(dpy, w, EnterWindowMask | LeaveWindowMask | Button1MotionMask);
                //XMapWindow (dpy, w);
            }
        }
    Voici ce qu'il me donne en executant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    X Error of failed request:  BadMatch (invalid parameter attributes)
      Major opcode of failed request:  1 (X_CreateWindow)
      Serial number of failed request:  44
      Current serial number in output stream:  60
    Je ne comprends pas pourquoi j'ai un BadMatch...


    Pouvez-vous m'aider sur ce point ?

    Merci

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    d'abord je ne suis pas certain que X est compatible C++.ou C99. La déclaration d'une variable (xsw) au milieu du code, même si elle passe à la compilation, ne donne peut-être pas le résultat escompté à l'exécution...

    Donc d'une part je le mettrais AVANT toute instruction (CreateBitmap...)..

    D'autre part a vue de nez comme ça, je ne sais pas. Reprend la doc de la fonction et vérifie la nature des paramètres 1 par 1..

    Enfin pour débugger efficacement avec X dans ce style de problème, quand tu ne sais pas trop quelle instruction te donne le diagnostic , tu peux mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* Partie à tester */
     
    XSynchronize(dpy,True);
     
    ......
    ......
     
    XSync(dpy, False);
    XSynchronize(dpy, False);
     
    /* fin de la partie concernée.. */
    et mettre un print à chaque instruction, ou dans un debugger faire ligne par ligne... (cela synchronise l'exécution de X..)

    si maintenant tu sais quelle instruction crée le problème, alors il faut vérifier : les fenêtres ou drawables sont-elles bien créées ? avec les mêmes colormap ?
    les contextes graphiques sont-ils les mêmes ? etc etc ... qu'est-ce que le paramètre fem ? ont-ils les mêmes root ? etc etc

  19. #19
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonsoir,

    J'ai modifié mon script : ici

    Mon problème actuel est que je ne comprends pas pour quelle raison j'ai au click sur l'item[3] qui sert a revenir en arrière je n'arrive pas à réafficher l'image sauvegarder dans le Pixmap saveFem.

    Es-ce que vous pouvez me dire ou j'ai une erreur ? soit c'est lors de l'insertion dans le pixmap soit au moment de XSetBackgroundPixmap... Mais le je ne sais pas.

    Merci

  20. #20
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonsoir,

    Pour ce qui est de la création des copies des pixmap, j'ai réglé par la création d'images avec XImage à la place des Pixmap.

    Profitez du tuyau.

    Merci à tous

    A+

Discussions similaires

  1. Inverser les couleurs Windows 7
    Par fangio dans le forum Windows 7
    Réponses: 8
    Dernier message: 29/08/2013, 11h23
  2. Comment modifier les couleurs de Windows ?
    Par Harry dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 29/09/2005, 09h55
  3. Comment modifier les couleurs système ?
    Par yousserr dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 24/07/2005, 10h57
  4. [phpBB] Comment changer les couleurs
    Par ludolecho dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/05/2005, 08h20
  5. [Graphique] Comment compter les couleurs d'une image ?
    Par yoghisan dans le forum API, COM et SDKs
    Réponses: 27
    Dernier message: 16/02/2005, 18h17

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