Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to display a picture
Forum Updated to NodeBB v4.3 + New Features

How to display a picture

Scheduled Pinned Locked Moved Solved General and Desktop
43 Posts 8 Posters 87.5k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Payx

    Its okay it works ! Thanks a lot for your time

    To works now with the Qlabel and for example i would like to calculate the numbers of pixels (number of x pixels and y pixels) do you have any tutorial for this ?

    ? Offline
    ? Offline
    A Former User
    wrote on last edited by A Former User
    #14

    @Payx Add another QLabel (here its name is label_3) to the MainWindow. We can use that label to display the size of the Pixmap. When adding the label in Qt Creator's Designer, make the label wide enough so that all the text fits in.

    In the MainWindow constructor in mainwindow.cpp:

    const QSize s = pm.size(); // <- get size of the Pixmap
    ui->label_3->setText( QString("Size: %1, %2").arg(s.width()).arg(s.height()) );
    

    Edit: Pixmap has a lot of built-in stuff, see QPixmap Class for more. QPixmap is there to display images, to actually put them on the screen. If you want to manipulate an image, you don't use a pixmap for that. Use a QImage then, see: QImage Class.

    So, this is the workflow:

    1. Create a QImage from a file: QImage img("C:/path/filename.jpg");
    2. Do something with that image, like change the color of some pixels.
    3. Create a QPixmap from that QImage: QPixmap pm = QPixmap::fromImage(img);
    4. Show the Pixmap in a QLabel: ui->label->setPixmap(pm);
    1 Reply Last reply
    3
    • P Offline
      P Offline
      Payx
      wrote on last edited by
      #15

      So if i understand, i use QImage for doing whatever i want with this image.
      And i use Qpixmax just for display in a label ?

      (sorry for my english im not bilingual)

      1 Reply Last reply
      0
      • P Offline
        P Offline
        Payx
        wrote on last edited by
        #16

        So if i want to calculate the size of my picture i use :

        QSize QImage::size() const

        The question is : how to use it ? there is no example

        mrjjM 1 Reply Last reply
        0
        • P Payx

          So if i want to calculate the size of my picture i use :

          QSize QImage::size() const

          The question is : how to use it ? there is no example

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by mrjj
          #17

          @Payx said in How to display a picture:

          QImage::size()

          It returns a
          http://doc.qt.io/qt-5/qsize.html
          and you can ask it height / width etc
          http://doc.qt.io/qt-5/qsize.html#height

          const QSize MySize = theImage->size();

          int h=MySize.height();

          etc.
          Update:
          @wieland already showed ;)

          1 Reply Last reply
          1
          • P Offline
            P Offline
            Payx
            wrote on last edited by
            #18

            Thanks but how to return it ?

            ""ui->label_3->setText( QString("Size: %1, %2").arg(s.width()).arg(s.height()) );""

            there is not more simple ?

            mrjjM 1 Reply Last reply
            0
            • P Payx

              Thanks but how to return it ?

              ""ui->label_3->setText( QString("Size: %1, %2").arg(s.width()).arg(s.height()) );""

              there is not more simple ?

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #19

              @Payx
              Well You need to convert to text anyway so it will become

              ui->label_3->setText( "Size: " + QString::number(s.width()) +" "+ QString::number(s.width()) );

              Not sure its better.

              • Thanks but how to return it ?
                What we do there is to convert to text and set that text in some label.
                That is not really returning it.

              returning it would be something like

              QSize SomeFunc() {
              return pm.size();
              }

              1 Reply Last reply
              1
              • P Offline
                P Offline
                Payx
                wrote on last edited by
                #20

                Thanks it works. I prefer : ui->label_3->setText( "Size: " + QString::number(s.width()) +" "+ QString::number(s.height()) );
                because i understand all.

                Then if i want to use height and width for other calcul i can use :
                s.width() * 5 ?

                If i want to cut my picture in many square or rectangle i have to do :

                int h = s.width() and work with h thats right ?

                mrjjM 1 Reply Last reply
                0
                • P Payx

                  Thanks it works. I prefer : ui->label_3->setText( "Size: " + QString::number(s.width()) +" "+ QString::number(s.height()) );
                  because i understand all.

                  Then if i want to use height and width for other calcul i can use :
                  s.width() * 5 ?

                  If i want to cut my picture in many square or rectangle i have to do :

                  int h = s.width() and work with h thats right ?

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #21

                  @Payx

                  • int h = s.width() and work with h thats right ?
                    Yes that's a copy of the current width. ( so w is better name ;)
                    but its makes the calculation easier to read than using s.width() directly.

                  Note to actually cut the image, you can use
                  http://doc.qt.io/qt-5/qimage.html#copy

                  1 Reply Last reply
                  1
                  • P Offline
                    P Offline
                    Payx
                    wrote on last edited by
                    #22

                    Okay !

                    but : QImage QImage::copy(const QRect &rectangle = QRect()) const
                    with this code we can work only in one rectangle no ?

                    for example i thought cut my picture in pixels 4*4 and have a new image with resolution / 4 :

                    i have to use a code like this :

                    for (i=0,i<s.width()+1,i=i+4)
                    for (j=0,j<s.height()+1,j=j+4)

                     end 
                    

                    end

                    mrjjM 1 Reply Last reply
                    0
                    • P Payx

                      Okay !

                      but : QImage QImage::copy(const QRect &rectangle = QRect()) const
                      with this code we can work only in one rectangle no ?

                      for example i thought cut my picture in pixels 4*4 and have a new image with resolution / 4 :

                      i have to use a code like this :

                      for (i=0,i<s.width()+1,i=i+4)
                      for (j=0,j<s.height()+1,j=j+4)

                       end 
                      

                      end

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #23

                      @Payx

                      int step=4;
                      for (i=0,i<s.width()+1,i=i+step)
                        for (j=0,j<s.height()+1,j=j+step)
                        just use  QImage QImage::copy(int x, int y, int width, int height) const
                      

                      This will generate small images of each 4x4

                      P 1 Reply Last reply
                      1
                      • P Payx

                        I put this "file:///C:/Users/David/Documents/addddd/r.jpg"

                        Yes i added a Qlabel with the .ui and named label (dont worry i changed the name in my code)

                        Pradeep KumarP Offline
                        Pradeep KumarP Offline
                        Pradeep Kumar
                        wrote on last edited by
                        #24

                        @Payx said in How to display a picture:

                        I put this "file:///C:/Users/David/Documents/addddd/r.jpg"

                        Yes i added a Qlabel with the .ui and named label (dont worry i changed the name in my code)

                        A small info, u can also place image in resource file of the project , so no need to worry about absolute path.

                        Pradeep Kumar
                        Qt,QML Developer

                        1 Reply Last reply
                        2
                        • mrjjM mrjj

                          @Payx

                          int step=4;
                          for (i=0,i<s.width()+1,i=i+step)
                            for (j=0,j<s.height()+1,j=j+step)
                            just use  QImage QImage::copy(int x, int y, int width, int height) const
                          

                          This will generate small images of each 4x4

                          P Offline
                          P Offline
                          Payx
                          wrote on last edited by
                          #25

                          @mrjj said in How to display a picture:

                          @Payx

                          int step=4;
                          for (i=0,i<s.width()+1,i=i+step)
                            for (j=0,j<s.height()+1,j=j+step)
                            just use  QImage QImage::copy(int x, int y, int width, int height) const
                          

                          This will generate small images of each 4x4

                          Okay i will test that.

                          I got an other question, with that code : "QImage img("C:/path/filename.jpg");" i have to put the destination of the file (sorry for my english)

                          but if i want to create a file explorer (for example in facebook we can change a picture with a file explorer and choose what picture i want)
                          what can i do ?

                          1 Reply Last reply
                          0
                          • mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by mrjj
                            #26
                            • but if i want to create a file explorer (for example in facebook we can change a picture with a file explorer and choose what picture i want)

                            Im not 100% sure what you ask, but I give a guess:

                            Instead of using a fixed path in the program you can use
                            http://doc.qt.io/qt-5/qfiledialog.html
                            to let user browser and select an image.

                            Like in this example
                            http://doc.qt.io/qt-5/qtwidgets-widgets-imageviewer-example.html

                            so
                            QImage img("C:/path/filename.jpg"
                            becomes

                            QString imagefile = QFileDialog::getOpenFileNames(this, tr("Files"), QDir::currentPath(), tr("*.jpg *.png"));
                            QImage img(imagefile);

                            Hope that is what you asked about.

                            1 Reply Last reply
                            0
                            • P Offline
                              P Offline
                              Payx
                              wrote on last edited by
                              #27

                              I found what i sought :

                              QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open Image"),"/path",tr("Image Files (*.jpg)"));

                              But i got all files, and i just want .jpg for now """"""tr("Image Files (*.jpg)"));"""""""""" dont work ?

                              then i want to put my picture file in a label, but i can't find how to convert a QStringList to a Qimage or Qpixmap

                              mrjjM 1 Reply Last reply
                              0
                              • P Payx

                                I found what i sought :

                                QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open Image"),"/path",tr("Image Files (*.jpg)"));

                                But i got all files, and i just want .jpg for now """"""tr("Image Files (*.jpg)"));"""""""""" dont work ?

                                then i want to put my picture file in a label, but i can't find how to convert a QStringList to a Qimage or Qpixmap

                                mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by mrjj
                                #28

                                @Payx
                                it should work with *.jpg.

                                • but i can't find how to convert a QStringList to a Qimage or Qpixmap

                                Oh just use
                                fileName = QFileDialog::getOpenFileName(this,
                                tr("Open Image"), "/", tr("Image Files (*.png *.jpg *.bmp)"));

                                It only returns the 1 filename. ( NOTE THE MISSING s)

                                ui->mylabel->setPixmap( new QPixmap(fileName ));

                                1 Reply Last reply
                                0
                                • P Offline
                                  P Offline
                                  Payx
                                  wrote on last edited by
                                  #29

                                  I got one error : Expected one specifier before pixmap

                                  mrjjM 1 Reply Last reply
                                  0
                                  • P Payx

                                    I got one error : Expected one specifier before pixmap

                                    mrjjM Offline
                                    mrjjM Offline
                                    mrjj
                                    Lifetime Qt Champion
                                    wrote on last edited by mrjj
                                    #30

                                    @Payx
                                    the class is QPixmap
                                    so its "new QPixmap"

                                    setPixmap( new QPixmap(fileName ));

                                    Sorry, was just fast code.

                                    1 Reply Last reply
                                    1
                                    • P Offline
                                      P Offline
                                      Payx
                                      wrote on last edited by
                                      #31

                                      Yes i tried too before post but i had one error too, so i post the first error.

                                      The second is :
                                      No matching function for call to 'Qlabel::setPixmap(QPixmap*)"

                                      mrjjM 1 Reply Last reply
                                      2
                                      • P Payx

                                        Yes i tried too before post but i had one error too, so i post the first error.

                                        The second is :
                                        No matching function for call to 'Qlabel::setPixmap(QPixmap*)"

                                        mrjjM Offline
                                        mrjjM Offline
                                        mrjj
                                        Lifetime Qt Champion
                                        wrote on last edited by mrjj
                                        #32

                                        @Payx
                                        Sorry not enough coffee :)

                                        QPixmap pix(fileName );
                                        setPixmap(pix);

                                        1 Reply Last reply
                                        3
                                        • Pradeep KumarP Offline
                                          Pradeep KumarP Offline
                                          Pradeep Kumar
                                          wrote on last edited by Pradeep Kumar
                                          #33

                                          If u are using QImage

                                          m_imageLabel = new QLabel;
                                          QImage imagePixmap;
                                          imagePixmap.load(":/new/prefix1/Images/imageName.extension");
                                          m_imageLabel->setPixmap(QPixmap::fromImage(imagePixmap));
                                          

                                          Or

                                          Only QPixmap

                                          m_imageLabel = new QLabel;
                                          QPixmap imagePixmap;
                                          imagePixmap.load(":/new/prefix1/Images/imageName.extension");
                                          m_imageLabel->setPixmap(imagePixmap);
                                          

                                          imageName.extension can be image.png, image.jpeg.

                                          Pradeep Kumar
                                          Qt,QML Developer

                                          P 1 Reply Last reply
                                          2

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved