Partage
  • Partager sur Facebook
  • Partager sur Twitter

Qt - comment dessiner?

... élégamment pixel par pixel

    1 mars 2008 à 0:57:52

    Bonjour,

    Je dois faire un logiciel de traitement d'image en utilisant le plus de fonctions créées par moi-même (pour prouver que j'ai suivi le cours).
    Il faudrait donc que je dessine par Qt (parce que j'ai commencé avec Qt) pour afficher mon image stockée dans une matrice.

    Je vois qu'il y a moyen mais ce n'est pas aussi simple qu'avec la SDL, ou en tout cas aussi élégamment car le fait de devoir chaque fois modifier la couleur du "pen" et ensuite dessiner, ça prend beaucoup trop de temps... non?

    En gros, je ne vois pas du tout quoi utiliser pour dessiner pixel par pixel ! Pourtant la question est bête... mais je n'ai vraiment rien trouvé répondant à cette question o_O

    Merci beaucoup pour vos réponses ^^
    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2008 à 2:44:54

      le plus simple, tu mets ton tableau de pixels dans une QImage que tu affiches l'image dans un QLabel ;)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        1 mars 2008 à 7:47:24

        Tu peux aussi utiliser le QPaintDevice qui permet de dessiner des formes basiques, avec rotations, etc...
        Le tuto de la doc l'utilise, et tu as plein d'explications sur le Paint System de Qt.
        • Partager sur Facebook
        • Partager sur Twitter
          3 mars 2008 à 12:01:01

          Me revoilà avec de nouvelles questions :

          J'ai utilisé d'abord QImage, transformé ensuite en QPixmap pour être affiché par QLabel. Sauf que... ça ne m'affiche rien!
          Par contre, si j'essaye avec le même code mais en "peignant" avec un QPainter (ce qui est entre /* */ dans la fonction draw), ça m'affiche un rectangle de la bonne largeur! Serait-ce un problème dans mon utilisation de QImage?

          image.cpp :
          1. Image::Image(std::string name, QWidget *parent) : QWidget(parent)
          2. {
          3.         //
          4.         // Rien d'intéressant : je met des valeurs dans m_col_r, m_col_g, m_col_b
          5.         // les m_... sont déclarées un peu plus haut et sont des int
          6.         m_image = new QImage(m_dim_x, m_dim_y, QImage::Format_RGB32);
          7.         for (int i = 0; i < m_dim_x; ++i)
          8.         {
          9.                 for (int j = 0; j < m_dim_y; ++j)
          10.                 {
          11.                         m_image->setPixel(i, j, qRgb(m_col_r[i][j], m_col_g[i][j], m_col_b[i][j]));
          12.                 }
          13.         }
          14.         m_pixmap = new QPixmap(m_dim_x, m_dim_y);
          15.         m_label = new QLabel()
          16.         draw();
          17.         m_layout = new QVBoxLayout();
          18.         m_layout->addWidget(m_label);
          19.         setLayout(m_layout);
          20. }
          21. void Image::draw()
          22. {
          23.         /*QPainter p(m_pixmap);
          24.         QRect dim = p.window();
          25.         p.setPen(QPen(Qt::blue, 4));
          26.         p.setBrush(QBrush(Qt::white));
          27.         p.drawRect(dim);*/
          28.         //
          29.         // Ce qui est plus haut est le code qui marche
          30.         // et en bas c'est le code qui devrait marcher
          31.         //
          32.         m_pixmap->fromImage(*m_image);
          33.         m_label->setPixmap(*m_pixmap);
          34.         m_label->show();
          35. }


          image.h
          1. #ifndef IMAGE_H
          2. #define IMAGE_H
          3. #include <QApplication>
          4. #include <QWidget>
          5. #include <QImage>
          6. #include <QLabel>
          7. #include <QVBoxLayout>
          8. #include <string>
          9. class Image : public QWidget
          10.         {
          11.                 Q_OBJECT
          12.     public:
          13.                 enum filtre {rien, flou, vertical, horizontal, contour};
          14.                 Image(std::string, QWidget * = 0);
          15.                 ~Image();
          16.         protected:
          17.                 void draw();
          18.     private:
          19.                 QImage *m_image;
          20.                 QLabel *m_label;
          21.                 QPixmap *m_pixmap;
          22.                 QVBoxLayout *m_layout;
          23.         };
          24. #endif


          Merci d'avance
          • Partager sur Facebook
          • Partager sur Twitter

          Qt - comment dessiner?

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown