Qt : Sauvegarder et récupérer une image dans une base de données

Posté par seiyar81 le 3 avril 2013 | Laisser un commentaire (0)

Tous les SGBD, qu’il s’agisse de bases SQL ou NoSQL, permettent de stocker des données au format binaire.

Pour les principaux : MySQL, MariaDB possèdent les types BLOB, BINARY ou VARBINARY, SQLite offre aussi un type BLOB, PostgreSQL un type BYTEA.

Il peut être utile ou nécessaire de pouvoir stocker/charger une QImage dans une base de données.

Pour la sauvegarder :


    // On ouvre la connexion à la base de données
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "mybase");
    db.setHostName("localhost");
    db.setDatabaseName("mybase");
    db.setUserName("root");
    db.setPassword("");
    db.setPort(5432);

    db.open();

    QImage image("mon_image.png");
    QByteArray byteArray;
    QBuffer buffer(&byteArray);
    image.save(&buffer, "PNG");

    QSqlQuery query(db);
    query.prepare("INSERT INTO image (data) VALUES (:data)");
    query.bindValue(":data", byteArray, QSql::Binary);
    query.exec();

Pour la charger :


    QSqlQuery query(db);
    query.prepare("SELECT * FROM image WHERE id = :id");
    query.bindValue(":id", 42);

    q.exec();

    QImage image;
    QByteArray byteArray = query.value(1).toByteArray();
    QBuffer buffer(&byteArray);
    image.load(&buffer, "PNG");

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

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)

QtBlogger : QtAmbassador et futur du projet

Posté par seiyar81 le 5 février 2012 | Laisser un commentaire (1)

Qt Ambassador

Logo QtBlogger

Cela fait plusieurs mois que le projet n’a pas avancé, on peut même dire qu’il était en pause.
Il faut dire que beaucoup d’évènements se sont enchaînés et qu’il n’a pas été facile pour moi de poursuivre les développements : déménagement, mémoire de fin d’études, entrée dans la vie active etc…

Toutefois le projet n’est pas mort ! Je compte bien poursuivre les développements et fournir un jour une première version de QtBlogger au téléchargement.

Pour rappel QtBlogger permet de gérer via une seule et même interface tous vos Blogs et CMS en s’interfaçant avec les différentes plates-formes existantes telles WordPress, Joomla, Drupal etc…
Ajoutez à cela une API permettant le développement de plugins, de nombreuses fonctionnalités présentes de base comme l’édition ou la recherche directe d’images sur le Web et vous obtenez un logiciel polyvalent.

De plus QtBlogger a eu l’honneur de rejoindre le programme QtAmbassador offert par Nokia ce qui est d’ores et déjà une première reconnaissance du travail effectué jusqu’à présent.

J’espère être en mesure de pouvoir fournir une première Beta très rapidement cela dépendra toutefois du temps que je pourrai consacrer au projet !

Catégorie: Geek, Qt, Yriase | Laisser un commentaire (1)

QtBlogger : avancement du projet

Posté par seiyar81 le 21 décembre 2010 | Laisser un commentaire (0)

Logo QtBlogger

Quelques petites nouvelles sur l’avancement du développement de QtBlogger, qui me prend beaucoup de temps comme on peut facilement l’imaginer.

J’ai choisi de rendre le programme le plus modulable possible, ainsi on peut très facilement créer des plugins pour :
– le plus intéressant : les plates-formes de blogging ! via une API commune il est très simple d’ajouter une interface vers la plate-forme de son choix, pour l’instant existent des plugins pour WordPress (extensible via une extension qui ajoute des fonctionnalités notamment la gestion des médias, des plugins, des tags et des liens et plus encore à venir 😉 ), les API MetaWeblog et Blogger 1.0, et enfin un plugin pour Blogger en cours de développement.

– des plugins “classiques” qui ajoutent des fonctionnalités à QtBlogger, pour l’instant 2 plugins existent : Clicky (visualiser ses stats) et DbManager (un gestionnaire de base de données)

– des plugins pour l’éditeur d’image intégré, pour ajouter des manipulations d’images par exemple

– des plugins pour la recherche d’image intégrée, un plugin correspond à un moteur de recherche, pour l’instant : Google Images, Bing Images, Picasa, Flickr et d’autres à venir

Le développement du plugin pour Blogger est en cours et j’attaquerai bientôt le développement des plugins pour LiveJournal et TypePad.

Je dois en même temps mettre en place un site pour présenter QtBlogger et ajouter les différents plugins à télécharger, des news etc…

Sachez aussi que je prévois d’intégrer un outil de mise à jour automatique pour les plugins et le logiciel lui-même.

Catégorie: Qt, Wordpress, Yriase | Laisser un commentaire (0)

QtBlogger : quelques nouvelles

Posté par seiyar81 le 15 octobre 2010 | Laisser un commentaire (0)

Logo QtBlogger

Pas de news depuis un moment, essentiellement à cause du temps que prend le développement de QtBlogger et aussi mon activité professionnelle.
La moindre des choses est donc de donner des news de l’avancement du projet !

Plusieurs fonctionnalités sont maintenant pleinement opérationnelles :

  • Gestions des articles et des pages
  • Gestion des commentaires (par articles ou bien tous)
  • Gestion des mots-clefs/catégories
  • Gestion des médias : partie très importante de QtBlogger
    • l’éditeur d’image possède un système de plugin pour lui ajouter des fonctionnalités
    • filtrages des médias par mots-clefs
  • Gestion des paramètres : tous les paramètres du blog peuvent être gérés via QtBlogger

Voilà pour une liste succinte des fonctionnalités présentes, les principales à venir sont :

  • Gestion des plugins du blog : activation/désactivation, mises à jour, et prise en charge des options
  • Suggestion d’image pendant la rédaction des articles/pages
  • Gestion des liens, des templates, des widgets et enfin un éditeur pour modifier les fichiers (coloration syntaxique etc)

Maintenant on retourne travailler avant de revenir donner d’autres nouvelles !

Catégorie: Qt, Wordpress, Yriase | Laisser un commentaire (0)

QtBlogger : Gérer son blog à distance

Posté par seiyar81 le 1 septembre 2010 | Laisser un commentaire (0)

La fin de l’été signifie pour beaucoup de monde la fin des vacances, la reprise du travail (souvent pénible) ou bien des études, le retour à nos bonnes vieilles habitudes et au train-train quotidien.

Pour d’autres (comme moi ^^) cela signifie qu’il reste encore un peu de temps avant la reprise des études pour se consacrer à nos projets personnels.

Ainsi, depuis quelques temps déjà en développement, j’annonce officiellement le logiciel QtBlogger !

Logo QtBlogger

Comme son nom l’indique, le logiciel a pour but de vous aider dans la gestion de votre blog avec plusieurs modules comme la gestion des articles et des pages, des tags et des catégories, mais aussi des médias (avec des possibilités de retouche d’image) des plugins etc.

Le logiciel utilisera l’API XML-RPC de WordPress et possèdera des fonctionnalités avancées. Couplé à un plugin WordPress ajoutant les fonctions permettant de gérer, entre autres, les médias, les possibilités sont immenses.

Côté technique, le logiciel est développé avec la version 4.7 de Qt et la librairie Qxt.

J’espère pouvoir donner d’autres nouvelles sur l’avancement du développement d’ici très bientôt.

PS : cet article a été rédigé avec une première version du logiciel !

EDIT : Plus d’informations seront mises en ligne sur la page du logiciel disponible ici ou sur la page du projet chez Sourceforge.

Catégorie: Qt, Wordpress, Yriase | Laisser un commentaire (0)

Ajouter un splashscreen à son application Qt

Posté par seiyar81 le 3 mai 2010 | Laisser un commentaire (0)

Qu’est-ce qu’un splashscreen ?

Sous ce nom un peu barbare se cache tout simplement cette image (ou écran) qui s’affiche au lancement d’un logiciel. Affichant dans la plupart des cas des informations sur les créateurs du logiciels ou sur le chargement en cours.
C’est là que le splashscreen prend tout son intérêt, car on peut ainsi “cacher” à l’utilisateur un temps de chargement très ou trop long ou bien le tenir au courant de l’avancement du chargement (plugins, modules etc…).

Comment ajouter un splashscreen à son application Qt ?

Qt, ce framework que nous aimons tous, possède une classe pour gérer les splashscreen : QSplashScreen.
Partons du principe que vous possédez déjà une application GUI, et que vous souhaitez rajouter un QSplashScreen. Vous devez donc avoir un code dans votre fichier main.cpp qui ressemble à peu près à ceci :

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    /*
     Une opération longue ...
    */

    w.show();
    return a.exec();
}

C’est ici le code de base généré par QtCreator à la création d’un projet GUI. Voici le code très similaire avec l’ajout du QSplashScreen :

#include <QtGui/QApplication>
#include <QtGui/QSplashScreen>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QSplashScreen screen;
    screen.setPixmap(QPixmap("images/splash.png"));
    screen.show();

    /*
    On simule une opération longue pour l'exemple
    */
    sleep(10);

    screen.hide();

    w.show();
    return a.exec();
}

On a juste inclus le header “#include <QtGui/QSplashScreen>” et ensuite ajouté une image à afficher.
L’opération longue est ici simulée par un sleep de 10 secondes, mais je mettrai un jour cet exemple en application avec un système de plugins.
Car oui on peut aussi créer des plugins pour son application avec Qt, mais ce sera pour une autre fois !

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

Démarrer avec le QML de Qt

Posté par seiyar81 le 9 avril 2010 | Laisser un commentaire (0)
Démarer avec le QML de Qt

J’ai déjà présenté ce qu’est QML dans un article passé, ce langage à base de syntaxe Javascript qui permet la création d’interface très simplement.

Il est assez aisé de suivre la documentation pour comprendre le fonctionnement de QML, d’autant plus que plusieurs exemples sont fournis avec la version 4.7 de Qt.

Cependant un petit exemple commenté peut toujours aider :

import Qt 4.7

Item {
    // Taille de la fenêtre
    width: 320; height: 240;

    Rectangle {
        id: rectangle;
        // Dimensions du rectangle pour prendre toute la fenêtre
        width: 320; height: 240; 
        // Couleur de fond du rectangle
        color: "lightgray";
        // Les ancres permettent de fixer le rectangle aux coins de l'écran
        anchors.bottom: screen.bottom; anchors.top: screen.top;

        Image {
            // Une image dans le dossier du projet
            id: loading; source: "logo.png"; transformOrigin: "Center";
            rotation: rotationA;
        }
        // Une première transformation : translation de 0 à 180 sur l'axe X et lance la rotation C une fois terminée
        rotation: NumberAnimation {
            target: loading; id: rotationA; property: "x";
            from: 0; to: 180; 
            onCompleted: rotationC.start();
        }
        // La même qu'avant mais dans l'autre sens de 180 à 0
        rotation: NumberAnimation {
            target: loading; id: rotationB; property: "x";
            from: 180; to: 0; //running: loading.visible == true;
            onCompleted: rotationD.start();
        }
        // Une rotation avec comme centre, le centre de l'image de 180° à partir de 180
        rotation: RotationAnimation {
            target: loading; id: rotationC; from: 180; to: 360;
            onCompleted: rotationB.start()
        }
        // La même qu'avant mais à partir de 0
        rotation: RotationAnimation {
            target: loading; id: rotationD; from: 0; to: 180;
            onCompleted: rotationA.start()
        }
    }
}

Vous pouvez télécharger l’exemple ci dessous.

  TestQML.zip (4,9 KiB, 911 hits)

Pour l’exécuter, il vous faudra compiler le projet, soit en ligne de commande :

qml chemin_vers_le_fichier_qml

soit avec un IDE comme QtCreator par exemple.

C’est un exemple très basique mais qui peut servir de base pour s’amuser avec QML.

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

Qt 4.7, Qt Creator 2.0, QML, quoi de neuf chez Qt ?

Posté par seiyar81 le 26 mars 2010 | Laisser un commentaire (0)

Je connais et développe avec Qt depuis un moment maintenant, et le moins qu’on puisse dire c’est que le rachat de TrollTech par Nokia n’a en rien altéré la volonté des développeur de faire évoluer leur bébé.

Il faut bien reconnaître que Nokia y trouve son compte en disposant ainsi d’un framework bien complet pour animer ses appareils mobiles.

Mais que nous réservent donc ces deux produits actuellement en “Technology Preview” que sont Qt 4.7 et Qt Creator 2.0 ?

On commence avec Qt 4.7 et les nouveautés que cette version apporte à la 4.6 :

  • De nouvelles classes pour la gestion des medias : gestion des playlists etc…
  • Nouvelles classes pour le réseau, gestion des interfaces entre autres
  • Mais la plus grosse nouveauté dans cette version c’est l’arrivée de Qt Quick

Qt Quick qu’est-ce que c’est ?

Qt Quick c’est un ensemble de trois produits qui vous permet de créer des interfaces dynamiques facilement, rapidement et compatible avec les technologies Qt déjà en place. Qt Quick comprend :

  • QML : un langage déclaratif (sur lequel je reviendrai un jour) semblable au Javascript et qui simplifie la création d’interfaces animées et fluides
  • QtDeclarative : un ensemble de classes C++ qui traduisent le QML en objets QGraphicScene, et permettent la connexion entre l’interface QML et l’application en C++.
  • Enfin Qt Creator 2.0 : l’IDE made in Qt a été revu pour pleinement supporter le QML et ainsi offrir une interface facile à utiliser via le drag and drop, l’auto-complétion et la détection d’erreurs de syntaxe.

Ci-dessous une petite vidéo de Qt Quick en action sur un N900. On notera la fluidité de l’ensemble.

Une autre vidéo disponible sur la page de Qt 4.7, c’est un exemple de développement en QML avec Qt Creator. Encore une fois la simplicité est au rendez-vous.

Vous pouvez en apprendre plus sur ces deux pages et évidemment télécharger le tout pour vous amuser !

Présentation de Qt 4.7

Snapshot Qt 4.7

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

Qt 4.6 est sortie

Posté par seiyar81 le 9 décembre 2009 | Laisser un commentaire (0)


Sortie le 1er Décembre,  cette version 4.6 du framework maintenu maintenant par Nokia, apporte son lot de nouveautés intéressantes.

– Un support de Symbian OS
– Un meilleur support de Windows 7 et Mac OS 10.6
– Le support des interfaces tactiles
– Une meilleure gestion des animations grâce au projet Kinetic
– Manipulation du DOM des pages Web
– …

A télécharger d’urgence ici.

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