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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    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
    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 éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    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
    Par défaut
    Je ne comprends pas bien ton problème...
    La fonction GXInvert ne marche pas ?

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    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 éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    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);

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