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

    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
                                      • K Kris Revi

                                        @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 Offline
                                        M Offline
                                        mpergand
                                        wrote on last edited by
                                        #35

                                        @Kris-Revi said in Make a palette image from palette data:
                                        painter.fillRect(rect(),QBrush(gradient));

                                        should be I think: QRect(0,0,width,height)

                                        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