pixel_drawing_mode mode d'actualisation des couleurs RVB des pixels lors des tracés graphiques

## Description

Les couleurs des pixels sont encodées selon les 3 canaux RVB (Rouge Vert Bleu). Pour chaque pixel, chaque canal a une valeur entière sur [0, 255] (uint8).

`.pixel_drawing_mode` est une des propriétés des fenêtres graphiques. Elle indique l'opération binaire à effectuer pour chaque canal RVB de chaque pixel entre la couleur préexistante du pixel de la fenêtre avant le tracé, et la couleur du même pixel de l'objet à tracer. Scilab n'actualise pas nécessairement la couleur du pixel en imposant la couleur de l'objet à tracer comme nouvelle couleur "opaque". La couleur du fond peut par exemple être prise en compte, autorisant certains effets de transparence.

- `src` est la couleur du pixel considéré dans l'objet à tracer / dessiner.
- `cur` est la couleur courante préxistante du même pixel, avant le tracé.

Les valeurs possibles (de type texte) de l'attribut `pixel_drawing_mode` sont listées ci-après, suivies de l'opération binaire correspondante. Dans ces expressions logiques,

- `NOT v` signifie `255 - v`
- `a AND b` signifie `a & b`
- `a OR b` signifie `a | b`
- `a XOR b` signifie `(a OR b) AND NOT (a AND b)`

Valeur | opération effectuée / résultat
--- | ---
"copy" (par défaut) | src
"copyInverted" | NOT src
"noop" | cur
"invert" | NOT cur
"set" | White
"clear" | Black
"equiv" | cur XOR (NOT src)
"xor" | cur XOR src
"or" | cur OR src
"orInverted" | cur OR (NOT src)
"orReverse" | (NOT cur) OR src
"nor" | NOT (cur OR src)
"and" | cur AND src
"andInverted" | cur AND (NOT src)
"andReverse" | (NOT cur) AND src
"nand" | NOT (cur AND src)

## Exemples

    pxmodes = ["copy", "copyInverted", "equiv", "xor", ..
               "and",  "nand", "andReverse", "andInverted", ..
               "or",   "nor",  "orReverse",  "orInverted", ..
               "noop", "set",  "clear",      "invert" ..
               ];
    // Dimensions et recouvrement marginal des fenêtres en damier
    s = 300;
    hm = 8;
    vm = 52;
    //
    for k = 16:-1:1
        m = pxmodes(k);

        // Position de la fenêtre
        i = fix((k-1)/4);
        j = modulo(k-1,4);

        // Création et paramétrage de la fenêtre
        f = figure("toolbar_visible","off", ..
                   "menubar_visible","off", ..
                   "infobar_visible","off", ..
                   "figure_position", [j*(s-hm), i*(s-vm)], ..
                   "figure_size", [s s], ..
                   "background", color("grey85"), ..
                   "pixel_drawing_mode", m ..
                   );
        drawlater

        // Configuration du tracé
        b = 0.82;
        plot2d([],[],0,"051"," ",[-1 -1 1 1]*b)
        plot2d([-1 1]*b,[0 0])
        a = gca();
        a.isoview = "on";
        a.tight_limits = "on";
        title(m,"fontsize",4)

        // Affichage de 3 disques rouge, vert et bleu se recouvrant partiellement
        xfarc(-0.7, 0.8, 1, 1, 0, 360*64)
        e = gce();
        e.background = color("red");
        e.fill_mode = "on";

        xfarc(-0.2, 0.5, 1, 1, 0, 360*64)
        e = gce();
        e.background = color("blue");
        e.fill_mode = "on";

        xfarc(-0.7,  0.2, 1, 1, 0, 360*64)
        e = gce();
        e.background = color("green");
        e.fill_mode = "on";

        drawnow
    end
    // Ménage : on supprime les 16 fenêtres
    b = messagebox(_("Presser OK pour fermer les fenêtres"),"Clore la démonstration", "question", "modal");
    w = winsid();
    close(w($-15:$));

## Voir ausi

- figure_properties
- anti_aliasing
- colordef
- lighting
- Matplot