Qt : Convertir une QImage en noir & blanc

Posté par seiyar81 le 27 décembre 2012 | Laisser un commentaire (0)

Qt, actuellement en version 4.8 et 5.0 RC2, possède un certain nombre de fonctionnalités propre aux graphismes et au dessin.
Notamment une bonne gestion des différents formats d’images comme vous pouvez le voir dans le tableau suivant :

Format Description Support de Qt
BMP Windows Bitmap Read/write
GIF Graphic Interchange Format (optional) Read
JPG Joint Photographic Experts Group Read/write
JPEG Joint Photographic Experts Group Read/write
PNG Portable Network Graphics Read/write
PBM Portable Bitmap Read
PGM Portable Graymap Read
PPM Portable Pixmap Read/write
TIFF Tagged Image File Format Read/write
XBM X11 Bitmap Read/write
XPM X11 Pixmap Read/write

S’il est possible de base de manipuler les images en changeant le mode RVB, en modifiant les pixels ou les couleurs, il faut passer par une manipulation manuelle pour convertir une image en niveaux de gris.
Pour cela rien de plus simple que la fonction suivante :

void toGrayscale(QImage & image)
{
    Q_ASSERT(!image.isNull());
    Q_ASSERT(image.width() > 0 && image.height() > 0);

    QRgb col;
    int gray;
    int width = image.width();
    int height = image.height();
    QImage alpha = image.alphaChannel(); // On sauvegarde le canal alpha pour la transparence
    for (int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; ++j)
        {
            col = image.pixel(i, j);
            gray = qGray(col);
            image.setPixel(i, j, qRgb(gray, gray, gray));
        }
    }
    image.setAlphaChannel(alpha);
}

L’opération n’est pas des plus légères puisqu’elle modifie un à un tous les pixels de l’image, toutefois elle fait ce qu’on lui demande.

Catégorie: C++, Qt | Laisser un commentaire (0)


Laissez un commentaire