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. Make a palette image from palette data
Forum Updated to NodeBB v4.3 + New Features

Make a palette image from palette data

Scheduled Pinned Locked Moved Solved General and Desktop
35 Posts 4 Posters 4.3k 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.
  • M mpergand

    As you can see in my example, you need to define a step variable base of the number of points.
    float step=1.0/(points-1)

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

    @mpergand but how can i count the points in that array? :S

    M 1 Reply Last reply
    0
    • K Kris Revi

      @mpergand but how can i count the points in that array? :S

      M Offline
      M Offline
      mpergand
      wrote on last edited by mpergand
      #16

      jsonArr.count() ?

      As the first param in the json array defines the point position, you need to convert the range 0-255 to 0.0-1.0

      K 1 Reply Last reply
      0
      • M mpergand

        jsonArr.count() ?

        As the first param in the json array defines the point position, you need to convert the range 0-255 to 0.0-1.0

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

        @mpergand but would that not count every int in the array? :S

        {
            "Palettes": [
                {
                    "Name": "Rainbow",
                    "imageURL": "",
                    "palette": [
                        0,
                        255,
                        0,
                        0,
                        32,
                        171,
                        85,
                        0,
                        64,
                        171,
                        171,
                        0,
                        96,
                        0,
                        255,
                        0,
                        128,
                        0,
                        171,
                        85,
                        160,
                        0,
                        0,
                        255,
                        192,
                        85,
                        0,
                        171,
                        224,
                        171,
                        0,
                        85,
                        255,
                        255,
                        0,
                        0
                    ]
                }
            ]
        }
        
        1 Reply Last reply
        0
        • M Offline
          M Offline
          mpergand
          wrote on last edited by mpergand
          #18

          jsonArr.count()/4 ?

          K 1 Reply Last reply
          0
          • M mpergand

            jsonArr.count()/4 ?

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

            @mpergand

                int amountPoint;
                amountPoint = jsonArr.count()/4;
            

            gives 9 so now i can do

            float p=0,s=1.0/amountPoint;
            

            ?

            M 1 Reply Last reply
            0
            • K Kris Revi

              @mpergand

                  int amountPoint;
                  amountPoint = jsonArr.count()/4;
              

              gives 9 so now i can do

              float p=0,s=1.0/amountPoint;
              

              ?

              M Offline
              M Offline
              mpergand
              wrote on last edited by
              #20

              float p=0,s=1.0/(amountPoint-1);

              K 1 Reply Last reply
              0
              • M mpergand

                float p=0,s=1.0/(amountPoint-1);

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

                @mpergand

                QImage MainWindow::createPaletteImage(QJsonArray jsonArr)
                {
                    int width = 500;
                    int height = 26;
                    QImage image(width, height, QImage::Format_RGB32);
                    image.fill(Qt::white);
                
                    QPainter painter(&image);
                
                    int amountPoint;
                    amountPoint = jsonArr.count()/4;
                
                    for (int i = 0; i < jsonArr.size(); i++)
                    {
                        float p=0,s=1.0/(amountPoint-1);
                        QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
                    }
                    return image;
                }
                

                so far correct?

                now what?

                M 1 Reply Last reply
                0
                • K Kris Revi

                  @mpergand

                  QImage MainWindow::createPaletteImage(QJsonArray jsonArr)
                  {
                      int width = 500;
                      int height = 26;
                      QImage image(width, height, QImage::Format_RGB32);
                      image.fill(Qt::white);
                  
                      QPainter painter(&image);
                  
                      int amountPoint;
                      amountPoint = jsonArr.count()/4;
                  
                      for (int i = 0; i < jsonArr.size(); i++)
                      {
                          float p=0,s=1.0/(amountPoint-1);
                          QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
                      }
                      return image;
                  }
                  

                  so far correct?

                  now what?

                  M Offline
                  M Offline
                  mpergand
                  wrote on last edited by mpergand
                  #22
                  for each point
                        get pos, r, v, b
                        set color gradiant from the vars above
                  
                  K 1 Reply Last reply
                  0
                  • M mpergand
                    for each point
                          get pos, r, v, b
                          set color gradiant from the vars above
                    
                    K Offline
                    K Offline
                    Kris Revi
                    wrote on last edited by Kris Revi
                    #23

                    @mpergand sooo

                        int amountPoint;
                        amountPoint = jsonArr.count()/4;
                        float p=0,s=1.0/(amountPoint-1);
                        QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
                    
                        for (int i = 0; i < amountPoint; i++)
                        {
                            // but how to get the pos, r, g, b since its just a long array of ints
                           // gradient.setColorAt(p, QColor(r,g,b));
                        }
                    
                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      mpergand
                      wrote on last edited by
                      #24

                      qjsonarray.at

                      K 1 Reply Last reply
                      0
                      • M mpergand

                        qjsonarray.at

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

                        @mpergand

                        int pos = jsonArr.at(i).toInt();
                        

                        but what about R, G, B?

                        int r = jsonArr.at(i).toInt();
                        int g = jsonArr.at(i).toInt();
                        int b = jsonArr.at(i).toInt();
                        
                        1 Reply Last reply
                        0
                        • K Offline
                          K Offline
                          Kris Revi
                          wrote on last edited by
                          #26

                          am i doing something wrong here?

                          QImage MainWindow::createPaletteImage(QJsonArray jsonArr)
                          {
                              int width = 500;
                              int height = 26;
                              QImage image(width, height, QImage::Format_RGB32);
                              image.fill(Qt::white);
                          
                              QPainter painter(&image);
                          
                              int amountPoint;
                              amountPoint = jsonArr.count()/4;
                              float p=0,s=1.0/(amountPoint-1);
                              QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
                          
                              for (int i = 0; i < amountPoint; i++)
                              {
                                  int pos = jsonArr.at(i).toInt();
                                  int r = jsonArr.at(i+1).toInt();
                                  int g = jsonArr.at(i+2).toInt();
                                  int b = jsonArr.at(i+3).toInt();
                          
                                  gradient.setColorAt(p, QColor(r,g,b));
                              }
                              return image;
                          }
                          
                          1 Reply Last reply
                          0
                          • Christian EhrlicherC Offline
                            Christian EhrlicherC Offline
                            Christian Ehrlicher
                            Lifetime Qt Champion
                            wrote on last edited by
                            #27

                            @Kris-Revi said in Make a palette image from palette data:

                            int pos = jsonArr.at(i).toInt();
                            gradient.setColorAt(p, QColor(r,g,b));

                            Apart from the really strange idea to store a image in such an extensive way you want 'pos' in the second call.

                            Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                            Visit the Qt Academy at https://academy.qt.io/catalog

                            K 1 Reply Last reply
                            1
                            • Christian EhrlicherC Christian Ehrlicher

                              @Kris-Revi said in Make a palette image from palette data:

                              int pos = jsonArr.at(i).toInt();
                              gradient.setColorAt(p, QColor(r,g,b));

                              Apart from the really strange idea to store a image in such an extensive way you want 'pos' in the second call.

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

                              @Christian-Ehrlicher said in Make a palette image from palette data:

                              you want 'pos' in the second call.

                                      int pos = jsonArr.at(i).toInt();
                                      int r = jsonArr.at(i+1).toInt();
                                      int g = jsonArr.at(i+2).toInt();
                                      int b = jsonArr.at(i+3).toInt();
                              
                                      gradient.setColorAt(pos, QColor(r,g,b));
                              

                              huh like so? :S

                              1 Reply Last reply
                              0
                              • M Offline
                                M Offline
                                mpergand
                                wrote on last edited by mpergand
                                #29
                                for(int p=0; p<amountPoint; p++)
                                        {
                                            int pos=jsonArr[p*4];
                                            int r=jsonArr[p*4+1];
                                            int g=jsonArr[p*4+2];
                                            int b=jsonArr[p*4+3];
                                            
                                            gradient.setColorAt(pos/255.0, QColor(r,g,b));
                                        }
                                       
                                
                                K 1 Reply Last reply
                                0
                                • M mpergand
                                  for(int p=0; p<amountPoint; p++)
                                          {
                                              int pos=jsonArr[p*4];
                                              int r=jsonArr[p*4+1];
                                              int g=jsonArr[p*4+2];
                                              int b=jsonArr[p*4+3];
                                              
                                              gradient.setColorAt(pos/255.0, QColor(r,g,b));
                                          }
                                         
                                  
                                  K Offline
                                  K Offline
                                  Kris Revi
                                  wrote on last edited by
                                  #30

                                  @mpergand

                                  QImage MainWindow::createPaletteImage(QJsonArray jsonArr)
                                  {
                                      int width = 500;
                                      int height = 26;
                                      QImage image(width, height, QImage::Format_RGB32);
                                      image.fill(Qt::white);
                                  
                                      QPainter painter(&image);
                                  
                                      int amountPoint;
                                      amountPoint = jsonArr.count()/4;
                                      float p=0,s=1.0/(amountPoint-1);
                                      QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
                                  
                                      for (int p = 0; p < amountPoint; p++)
                                      {
                                          int pos=jsonArr[p*4].toInt();
                                          int r=jsonArr[p*4+1].toInt();
                                          int g=jsonArr[p*4+2].toInt();
                                          int b=jsonArr[p*4+3].toInt();
                                  
                                          gradient.setColorAt(pos/255.0, QColor(r,g,b));
                                      }
                                      painter.fillRect(rect(),QBrush(gradient));
                                      return image;
                                  }
                                  

                                  produces
                                  b31f83ea-6644-4c2d-af87-1ff271f7a8f2-image.png

                                  1 Reply Last reply
                                  0
                                  • M Offline
                                    M Offline
                                    mpergand
                                    wrote on last edited by
                                    #31

                                    Check the values in the debugger.

                                    K 1 Reply Last reply
                                    0
                                    • M mpergand

                                      Check the values in the debugger.

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

                                      @mpergand all i got is

                                      POS :  0
                                      RGB :  255 0 0
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      POS :  0.12549
                                      RGB :  171 85 0
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      POS :  0.25098
                                      RGB :  171 171 0
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      POS :  0.376471
                                      RGB :  0 255 0
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      POS :  0.501961
                                      RGB :  0 171 85
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      POS :  0.627451
                                      RGB :  0 0 255
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      POS :  0.752941
                                      RGB :  85 0 171
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      POS :  0.878431
                                      RGB :  171 0 85
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      POS :  1
                                      RGB :  255 0 0
                                      GRAD :  QBrush(QColor(Invalid),LinearGradientPattern)
                                      
                                      1 Reply Last reply
                                      0
                                      • M Offline
                                        M Offline
                                        mpergand
                                        wrote on last edited by
                                        #33

                                        Don't paste my code as this !
                                        QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);

                                        should be the image width no ?

                                        K 1 Reply Last reply
                                        0
                                        • M mpergand

                                          Don't paste my code as this !
                                          QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);

                                          should be the image width no ?

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

                                          @mpergand oh yea! now it worked :) thank you all

                                          here is the working code and the solution

                                          QImage MainWindow::createPaletteImage(QJsonArray jsonArr)
                                          {
                                              int width = 500;
                                              int height = 26;
                                              QImage image(width, height, QImage::Format_RGB32);
                                              image.fill(Qt::white);
                                          
                                              QPainter painter(&image);
                                          
                                              int amountPoint;
                                              amountPoint = jsonArr.count()/4;
                                              float p=0,s=1.0/(amountPoint-1);
                                              QLinearGradient gradient = QLinearGradient(0,0, width, 0);
                                          
                                              for (int p = 0; p < amountPoint; p++)
                                              {
                                                  int pos=jsonArr[p*4].toInt();
                                                  int r=jsonArr[p*4+1].toInt();
                                                  int g=jsonArr[p*4+2].toInt();
                                                  int b=jsonArr[p*4+3].toInt();
                                          
                                                  gradient.setColorAt(pos/255.0, QColor(r,g,b));
                                              }
                                              painter.fillRect(rect(),QBrush(gradient));
                                              return image;
                                          }
                                          
                                          M 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