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. QImage converting to RGB and saving new image!
Forum Updated to NodeBB v4.3 + New Features

QImage converting to RGB and saving new image!

Scheduled Pinned Locked Moved Solved General and Desktop
14 Posts 5 Posters 2.9k Views 2 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #4

    Hi,

    Use the path you got to construct a QImage and then call your other method with it.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    K 1 Reply Last reply
    1
    • SGaistS SGaist

      Hi,

      Use the path you got to construct a QImage and then call your other method with it.

      K Offline
      K Offline
      Kris Revi
      wrote on last edited by
      #5

      @SGaist

      void MainWindow::on_BUTTON_SELECTIMAGE_MATRIX_clicked()
      {
          QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "c\\", tr("Image Files (*.png *.jpg *.bmp)"));
      
          ui->TEXT_IMG_PATH->setText(fileName);
      
          imageObject = new QImage();
          imageObject->load(fileName);
      
          if(!fileName.isEmpty())
          {
              imageHandler(imageObject);
          }
      }
      
      void MainWindow::imageHandler(QImage *img)
      {
          QImage img2{img->size(), QImage::Format_RGB32};
          img2.save("test.jpg");
      
              qDebug() << "Converting Complete";
      }
      

      Correct? the reason im asking is cause qDebug() << "Converting Complete"; this was fired! but i can't find the file :S

      JonBJ 1 Reply Last reply
      0
      • K Kris Revi

        @SGaist

        void MainWindow::on_BUTTON_SELECTIMAGE_MATRIX_clicked()
        {
            QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "c\\", tr("Image Files (*.png *.jpg *.bmp)"));
        
            ui->TEXT_IMG_PATH->setText(fileName);
        
            imageObject = new QImage();
            imageObject->load(fileName);
        
            if(!fileName.isEmpty())
            {
                imageHandler(imageObject);
            }
        }
        
        void MainWindow::imageHandler(QImage *img)
        {
            QImage img2{img->size(), QImage::Format_RGB32};
            img2.save("test.jpg");
        
                qDebug() << "Converting Complete";
        }
        

        Correct? the reason im asking is cause qDebug() << "Converting Complete"; this was fired! but i can't find the file :S

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #6

        @Kris-Revi

        img2.save("test.jpg");
        but i can't find the file :S

        Then try saving it with an absolute path instead of relative to the current directory?
        Test the return result of the save()?

        1 Reply Last reply
        0
        • K Offline
          K Offline
          Kris Revi
          wrote on last edited by Kris Revi
          #7

          so i found the picture in the build folder! and uhm... it looks weird!

          ORIGINAL:
          Original

          and this is the copy from QImage (img2)
          Copy

          1 Reply Last reply
          0
          • K Offline
            K Offline
            Kris Revi
            wrote on last edited by
            #8

            i got it working! :) but now the question remains can this be done with Qimage (from my python script)

            # Shift the fucker arround to being RGB565
            self.final = [(r >> 3) << 11 | (g >> 2) << 5 | (b >> 3) for (r, g, b) in img.getdata() ]
            

            extracting R,G,B from the image and store them in an array that i can send off to my 32x32 Matrix for display :)

            B 1 Reply Last reply
            0
            • K Kris Revi

              i got it working! :) but now the question remains can this be done with Qimage (from my python script)

              # Shift the fucker arround to being RGB565
              self.final = [(r >> 3) << 11 | (g >> 2) << 5 | (b >> 3) for (r, g, b) in img.getdata() ]
              

              extracting R,G,B from the image and store them in an array that i can send off to my 32x32 Matrix for display :)

              B Offline
              B Offline
              Bonnie
              wrote on last edited by Bonnie
              #9

              @Kris-Revi
              If just for image format conversion, QImage has predefined format for RGB565:

              QImage::Format_RGB16
              The image is stored using a 16-bit RGB format (5-6-5).

              So you can convert the image to RGB565 directly using QImage converting function:

              QImage newImage = img.convertToFormat(QImage::Format_RGB16);
              

              But if you just need those arrays, AFAIK, there's no such convenient function to exact R,G,B arrays like in python.
              You can write your own though.

              K 1 Reply Last reply
              3
              • B Bonnie

                @Kris-Revi
                If just for image format conversion, QImage has predefined format for RGB565:

                QImage::Format_RGB16
                The image is stored using a 16-bit RGB format (5-6-5).

                So you can convert the image to RGB565 directly using QImage converting function:

                QImage newImage = img.convertToFormat(QImage::Format_RGB16);
                

                But if you just need those arrays, AFAIK, there's no such convenient function to exact R,G,B arrays like in python.
                You can write your own though.

                K Offline
                K Offline
                Kris Revi
                wrote on last edited by
                #10

                @Bonnie Ty for that :) still trying to figure out a way to get the RGB colors of each pixel and store them in a List :/

                B 1 Reply Last reply
                0
                • K Kris Revi

                  @Bonnie Ty for that :) still trying to figure out a way to get the RGB colors of each pixel and store them in a List :/

                  B Offline
                  B Offline
                  Bonnie
                  wrote on last edited by
                  #11

                  @Kris-Revi
                  That's not difficult in C++ at all.
                  The simplest and safest but not most efficient way is to get every pixel and save the R,G,B

                  int size = img.width() * img.height();
                  QVector<int> R, G, B;
                  R.reserve(size);
                  G.reserve(size);
                  B.reserve(size);
                  for(int y = 0; y < img.height(); y++)
                      for(int x = 0; x < img.width(); x++) {
                          QRgb rgb = img.pixel(x, y);
                          R.append(qRed(rgb));
                          G.append(qGreen(rgb));
                          B.append(qBlue(rgb));
                      }
                  

                  You can optimize the code to be more efficient by directly iterating from img.constBits() if you want.

                  K 1 Reply Last reply
                  1
                  • B Bonnie

                    @Kris-Revi
                    That's not difficult in C++ at all.
                    The simplest and safest but not most efficient way is to get every pixel and save the R,G,B

                    int size = img.width() * img.height();
                    QVector<int> R, G, B;
                    R.reserve(size);
                    G.reserve(size);
                    B.reserve(size);
                    for(int y = 0; y < img.height(); y++)
                        for(int x = 0; x < img.width(); x++) {
                            QRgb rgb = img.pixel(x, y);
                            R.append(qRed(rgb));
                            G.append(qGreen(rgb));
                            B.append(qBlue(rgb));
                        }
                    

                    You can optimize the code to be more efficient by directly iterating from img.constBits() if you want.

                    K Offline
                    K Offline
                    Kris Revi
                    wrote on last edited by
                    #12

                    @Bonnie this is from my python PyQt5 script (that is tested and works)

                    [6371, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 6371, 2113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 704, 320, 96, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 1536, 8064, 3456, 3584, 3488, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 13349, 26219, 19912, 3456, 14275, 10081, 3360, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2273, 29678, 63359, 52761, 40339, 26218, 5760, 1504, 8800, 18432, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4258, 2113, 48631, 23210, 31663, 65471, 28140, 1376, 11072, 47168, 22528, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147, 6, 42261, 8422, 16938, 65503, 59164, 13574, 832, 34880, 26624, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 256, 704, 928, 3009, 2883, 27917, 4327, 21167, 59196, 56987, 32078, 2784, 26656, 20480, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 32, 608, 3424, 3296, 3552, 3680, 5696, 3456, 992, 29838, 54906, 50680, 34000, 2752, 20512, 10240, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 64, 960, 3584, 3488, 3200, 5760, 5824, 5760, 5664, 3520, 5345, 34063, 44278, 25612, 672, 8512, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 672, 3520, 5728, 7936, 12259, 12195, 7969, 5824, 5728, 5600, 1312, 7233, 19847, 7618, 1280, 1216, 8512, 2048, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 128, 3200, 3552, 5728, 14211, 30700, 24553, 10114, 5824, 5728, 5632, 3456, 1088, 1408, 1760, 5696, 3456, 7040, 12352, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 384, 3296, 3520, 5728, 14180, 24553, 18374, 9985, 5792, 3648, 5600, 3456, 1120, 9379, 38769, 51032, 46710, 23691, 10464, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 480, 3296, 3488, 5664, 7841, 7937, 7905, 5760, 5696, 5632, 5568, 3392, 1088, 17479, 65535, 65535, 61245, 48567, 12645, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 416, 3200, 3424, 5568, 5632, 5632, 5664, 5632, 5600, 5536, 3424, 1248, 992, 19560, 65535, 65503, 59164, 50712, 19049, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 256, 960, 3296, 3392, 5504, 3456, 3456, 5504, 3456, 3392, 1248, 3168, 832, 25707, 65471, 61277, 54970, 46486, 21130, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 64, 672, 3040, 3200, 3296, 3328, 3328, 3328, 3296, 3232, 3168, 3008, 672, 31887, 59100, 52825, 48599, 38066, 14791, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 256, 704, 2944, 3072, 3104, 3168, 3168, 3104, 3072, 2944, 768, 640, 29646, 44405, 44373, 38034, 27501, 6339, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 288, 576, 736, 2848, 2912, 2880, 2880, 768, 704, 640, 8708, 31727, 38034, 31727, 27469, 12710, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 224, 448, 544, 576, 576, 640, 608, 576, 10789, 21130, 29550, 25388, 23243, 14791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 96, 224, 352, 416, 416, 6563, 16936, 23211, 21130, 14886, 8676, 4545, 8547, 10468, 4096, 2048, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 6371, 12646, 19017, 16872, 12678, 14791, 2433, 608, 896, 2753, 14823, 12483, 8192, 4096, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 6371, 4386, 4258, 10565, 14759, 12934, 7809, 14308, 3744, 17351, 48567, 31305, 20480, 2112, 128, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 256, 6339, 8484, 21130, 57050, 26251, 9953, 16357, 16005, 65535, 61147, 33158, 23464, 865, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 352, 2337, 4226, 16936, 54938, 65535, 57147, 9410, 12099, 7968, 36273, 56923, 40147, 29710, 2497, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 480, 224, 10533, 46486, 61277, 63390, 65503, 46646, 7489, 5984, 7426, 19465, 23307, 17064, 192, 0, 0, 0, 2145, 2113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 480, 4417, 31663, 50712, 54970, 59164, 61309, 65407, 23882, 5888, 5856, 1472, 3200, 736, 160, 0, 0, 0, 2113, 6371, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2177, 2401, 2657, 10885, 35889, 44405, 50744, 57019, 57051, 40658, 16165, 20422, 12131, 7617, 7553, 5057, 2241, 2145, 2145, 2145, 6371]
                    

                    and this is the C++ with the code snippet you gave me

                    QVector(24, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 24, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 99, 74, 8, 49, 33, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 115, 247, 206, 156, 99, 16, 0, 33, 74, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 8, 189, 90, 123, 255, 107, 0, 41, 189, 90, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 165, 33, 66, 255, 231, 49, 0, 140, 107, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 107, 16, 82, 231, 222, 123, 8, 107, 82, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 16, 8, 0, 115, 214, 198, 132, 8, 82, 41, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 16, 16, 16, 16, 8, 16, 132, 173, 99, 0, 33, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 16, 24, 41, 41, 24, 16, 16, 16, 0, 24, 74, 24, 0, 0, 33, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 49, 115, 90, 33, 16, 16, 16, 8, 0, 0, 0, 16, 8, 24, 49, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 49, 90, 66, 33, 16, 8, 16, 8, 0, 33, 148, 198, 181, 90, 41, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 24, 24, 24, 16, 16, 16, 16, 8, 0, 66, 255, 255, 239, 189, 49, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 16, 16, 16, 16, 16, 16, 8, 0, 0, 74, 255, 255, 231, 198, 74, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 8, 16, 8, 8, 16, 8, 8, 0, 8, 0, 99, 255, 239, 214, 181, 82, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 123, 231, 206, 189, 148, 57, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 115, 173, 173, 148, 107, 24, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 33, 123, 148, 123, 107, 49, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 82, 115, 99, 90, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 66, 90, 82, 57, 33, 16, 33, 41, 16, 8, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 24, 49, 74, 66, 49, 57, 8, 0, 0, 8, 57, 49, 33, 16, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 24, 16, 16, 41, 57, 49, 24, 49, 8, 66, 189, 123, 82, 8, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 33, 82, 222, 99, 33, 57, 57, 255, 239, 132, 90, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 16, 66, 214, 255, 222, 33, 41, 24, 140, 222, 156, 115, 8, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 181, 239, 247, 255, 181, 24, 16, 24, 74, 90, 66, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 123, 198, 214, 231, 239, 255, 90, 16, 16, 0, 8, 0, 0, 0, 0, 0, 8, 24, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 41, 140, 173, 198, 222, 222, 156, 57, 74, 41, 24, 24, 16, 8, 8, 8, 8, 24)
                    

                    i loaded the same picture! why are they different?

                    B 1 Reply Last reply
                    0
                    • K Kris Revi

                      @Bonnie this is from my python PyQt5 script (that is tested and works)

                      [6371, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 6371, 2113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 704, 320, 96, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 1536, 8064, 3456, 3584, 3488, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 13349, 26219, 19912, 3456, 14275, 10081, 3360, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2273, 29678, 63359, 52761, 40339, 26218, 5760, 1504, 8800, 18432, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4258, 2113, 48631, 23210, 31663, 65471, 28140, 1376, 11072, 47168, 22528, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147, 6, 42261, 8422, 16938, 65503, 59164, 13574, 832, 34880, 26624, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 256, 704, 928, 3009, 2883, 27917, 4327, 21167, 59196, 56987, 32078, 2784, 26656, 20480, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 32, 608, 3424, 3296, 3552, 3680, 5696, 3456, 992, 29838, 54906, 50680, 34000, 2752, 20512, 10240, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 64, 960, 3584, 3488, 3200, 5760, 5824, 5760, 5664, 3520, 5345, 34063, 44278, 25612, 672, 8512, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 672, 3520, 5728, 7936, 12259, 12195, 7969, 5824, 5728, 5600, 1312, 7233, 19847, 7618, 1280, 1216, 8512, 2048, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 128, 3200, 3552, 5728, 14211, 30700, 24553, 10114, 5824, 5728, 5632, 3456, 1088, 1408, 1760, 5696, 3456, 7040, 12352, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 384, 3296, 3520, 5728, 14180, 24553, 18374, 9985, 5792, 3648, 5600, 3456, 1120, 9379, 38769, 51032, 46710, 23691, 10464, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 480, 3296, 3488, 5664, 7841, 7937, 7905, 5760, 5696, 5632, 5568, 3392, 1088, 17479, 65535, 65535, 61245, 48567, 12645, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 416, 3200, 3424, 5568, 5632, 5632, 5664, 5632, 5600, 5536, 3424, 1248, 992, 19560, 65535, 65503, 59164, 50712, 19049, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 256, 960, 3296, 3392, 5504, 3456, 3456, 5504, 3456, 3392, 1248, 3168, 832, 25707, 65471, 61277, 54970, 46486, 21130, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 64, 672, 3040, 3200, 3296, 3328, 3328, 3328, 3296, 3232, 3168, 3008, 672, 31887, 59100, 52825, 48599, 38066, 14791, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 256, 704, 2944, 3072, 3104, 3168, 3168, 3104, 3072, 2944, 768, 640, 29646, 44405, 44373, 38034, 27501, 6339, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 288, 576, 736, 2848, 2912, 2880, 2880, 768, 704, 640, 8708, 31727, 38034, 31727, 27469, 12710, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 224, 448, 544, 576, 576, 640, 608, 576, 10789, 21130, 29550, 25388, 23243, 14791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 96, 224, 352, 416, 416, 6563, 16936, 23211, 21130, 14886, 8676, 4545, 8547, 10468, 4096, 2048, 0, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 6371, 12646, 19017, 16872, 12678, 14791, 2433, 608, 896, 2753, 14823, 12483, 8192, 4096, 0, 0, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 6371, 4386, 4258, 10565, 14759, 12934, 7809, 14308, 3744, 17351, 48567, 31305, 20480, 2112, 128, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 256, 6339, 8484, 21130, 57050, 26251, 9953, 16357, 16005, 65535, 61147, 33158, 23464, 865, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 352, 2337, 4226, 16936, 54938, 65535, 57147, 9410, 12099, 7968, 36273, 56923, 40147, 29710, 2497, 0, 0, 0, 2145, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 480, 224, 10533, 46486, 61277, 63390, 65503, 46646, 7489, 5984, 7426, 19465, 23307, 17064, 192, 0, 0, 0, 2145, 2113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 480, 4417, 31663, 50712, 54970, 59164, 61309, 65407, 23882, 5888, 5856, 1472, 3200, 736, 160, 0, 0, 0, 2113, 6371, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2177, 2401, 2657, 10885, 35889, 44405, 50744, 57019, 57051, 40658, 16165, 20422, 12131, 7617, 7553, 5057, 2241, 2145, 2145, 2145, 6371]
                      

                      and this is the C++ with the code snippet you gave me

                      QVector(24, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 24, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 99, 74, 8, 49, 33, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 115, 247, 206, 156, 99, 16, 0, 33, 74, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 8, 189, 90, 123, 255, 107, 0, 41, 189, 90, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 165, 33, 66, 255, 231, 49, 0, 140, 107, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 107, 16, 82, 231, 222, 123, 8, 107, 82, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 16, 8, 0, 115, 214, 198, 132, 8, 82, 41, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 16, 16, 16, 16, 8, 16, 132, 173, 99, 0, 33, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 16, 24, 41, 41, 24, 16, 16, 16, 0, 24, 74, 24, 0, 0, 33, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 49, 115, 90, 33, 16, 16, 16, 8, 0, 0, 0, 16, 8, 24, 49, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 49, 90, 66, 33, 16, 8, 16, 8, 0, 33, 148, 198, 181, 90, 41, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 24, 24, 24, 16, 16, 16, 16, 8, 0, 66, 255, 255, 239, 189, 49, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 16, 16, 16, 16, 16, 16, 8, 0, 0, 74, 255, 255, 231, 198, 74, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 8, 16, 8, 8, 16, 8, 8, 0, 8, 0, 99, 255, 239, 214, 181, 82, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 123, 231, 206, 189, 148, 57, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 115, 173, 173, 148, 107, 24, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 33, 123, 148, 123, 107, 49, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 82, 115, 99, 90, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 66, 90, 82, 57, 33, 16, 33, 41, 16, 8, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 24, 49, 74, 66, 49, 57, 8, 0, 0, 8, 57, 49, 33, 16, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 24, 16, 16, 41, 57, 49, 24, 49, 8, 66, 189, 123, 82, 8, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 33, 82, 222, 99, 33, 57, 57, 255, 239, 132, 90, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 16, 66, 214, 255, 222, 33, 41, 24, 140, 222, 156, 115, 8, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 181, 239, 247, 255, 181, 24, 16, 24, 74, 90, 66, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 123, 198, 214, 231, 239, 255, 90, 16, 16, 0, 8, 0, 0, 0, 0, 0, 8, 24, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 41, 140, 173, 198, 222, 222, 156, 57, 74, 41, 24, 24, 16, 8, 8, 8, 8, 24)
                      

                      i loaded the same picture! why are they different?

                      B Offline
                      B Offline
                      Bonnie
                      wrote on last edited by
                      #13

                      @Kris-Revi
                      I'm sure that what you have is a RGB value array, not R,G,B arrays. :)
                      So you need the iterating way.
                      But this way you need to know the detailed format and decide the byte size of every pixel first.
                      For example, a RGB565 image need 16bits for every pixel, so we should use quint16 type to read:

                      QVector<quint16> RGB565;
                      RGB565.reserve(img.width() * img.height());
                      for(int y = 0; y < img.height(); y++) {
                          const quint16 *line = reinterpret_cast<const quint16*>(img.constScanLine(y));
                          for(int x = 0; x < img.width(); x++)
                              RGB565 << *(line++);
                      }
                      

                      If the image is a RGB32 format image, then the type should be changed to quint32.
                      If it is RGB24, then it will be more complicated...

                      1 Reply Last reply
                      2
                      • K Offline
                        K Offline
                        Kris Revi
                        wrote on last edited by Kris Revi
                        #14

                        @Bonnie said in QImage converting to RGB and saving new image!:

                        QVector<quint16> RGB565;
                        RGB565.reserve(img.width() * img.height());
                        for(int y = 0; y < img.height(); y++) {
                        const quint16 line = reinterpret_cast<const quint16>(img.constScanLine(y));
                        for(int x = 0; x < img.width(); x++)
                        RGB565 << *(line++);
                        }

                        ty for that one m8 :) so just to clarify

                        every image that comes in gets copied and made into 16bit (5-6-5) so it will ALWAYS be 16bit :)

                        // ================================================= //
                        FINAL AND WORKING CODE FOR EVERYONE WHO IS INTERESSTED
                        // ================================================= //

                        void MainWindow::imageHandler(QImage *img)
                        {
                            QImage img2{img->size(), QImage::Format_RGB16}; // The image is stored using a 16-bit RGB format (5-6-5).
                            img2.fill(QColor(Qt::black).rgb());             // Fill the new image with a black background (needs to be filled to get the correct color data)
                            QPainter painter(&img2);                        // Prepare new image for painting
                            painter.drawImage(0, 0, *img);                  // Paint the original image onto the new image
                            img2.save("./MatrixImages/test.jpg");           // Save that fucker and lets move on
                        
                            // Get the color 16bit (5-6-5) color data and put it in a QVector and prepare for sending to ESP32
                            QVector<quint16> RGB565;
                            RGB565.reserve(img2.width() * img2.height());
                            for(int y = 0; y < img2.height(); y++) {
                                const quint16 *line = reinterpret_cast<const quint16*>(img2.constScanLine(y));
                                for(int x = 0; x < img2.width(); x++)
                                    RGB565 << *(line++);
                            }
                        
                            qDebug() << "[IMAGEHANDLER][INFO] Converting Complete";
                        }
                        
                        1 Reply Last reply
                        0

                        • Login

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