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.
  • K Offline
    K Offline
    Kris Revi
    wrote on last edited by
    #11

    so im doing something wrong :S obvs

    M 1 Reply Last reply
    0
    • K Kris Revi

      so im doing something wrong :S obvs

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

      @Kris-Revi

      classic rainbow like the above image:

              float p=0,s=1.0/6;
              QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
              gradient.setColorAt(p, QColor(255,0,0));        // red
              gradient.setColorAt(p+=s, QColor(255,255,0));   // yellow
              gradient.setColorAt(p+=s, QColor(0,255,0));     // green
              gradient.setColorAt(p+=s, QColor(0,255,255));   // cyan
              gradient.setColorAt(p+=s, QColor(0,0,255));     // blue
              gradient.setColorAt(p+=s, QColor(255,0,255));   // magenta
              gradient.setColorAt(p+=s, QColor(255,0,0));     // red
              painter.fillRect(rect(),QBrush(gradient));
      

      from your data:

              float p=0,s=1.0/8;
              QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
              gradient.setColorAt(p, QColor(255,0,0));
              gradient.setColorAt(p+=s, QColor(171,85,0));
              gradient.setColorAt(p+=s, QColor(171,171,0));
              gradient.setColorAt(p+=s, QColor(0,255,0));
              gradient.setColorAt(p+=s, QColor(0,171,85));
              gradient.setColorAt(p+=s, QColor(0,0,255));
              gradient.setColorAt(p+=s, QColor(85,0,171));
              gradient.setColorAt(p+=s, QColor(171,0,85));
              gradient.setColorAt(p+=s, QColor(255,0,0));
              painter.fillRect(rect(),QBrush(gradient));
      

      alt text

      K 1 Reply Last reply
      0
      • M mpergand

        @Kris-Revi

        classic rainbow like the above image:

                float p=0,s=1.0/6;
                QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
                gradient.setColorAt(p, QColor(255,0,0));        // red
                gradient.setColorAt(p+=s, QColor(255,255,0));   // yellow
                gradient.setColorAt(p+=s, QColor(0,255,0));     // green
                gradient.setColorAt(p+=s, QColor(0,255,255));   // cyan
                gradient.setColorAt(p+=s, QColor(0,0,255));     // blue
                gradient.setColorAt(p+=s, QColor(255,0,255));   // magenta
                gradient.setColorAt(p+=s, QColor(255,0,0));     // red
                painter.fillRect(rect(),QBrush(gradient));
        

        from your data:

                float p=0,s=1.0/8;
                QLinearGradient gradient = QLinearGradient(0,0, rect().width(), 0);
                gradient.setColorAt(p, QColor(255,0,0));
                gradient.setColorAt(p+=s, QColor(171,85,0));
                gradient.setColorAt(p+=s, QColor(171,171,0));
                gradient.setColorAt(p+=s, QColor(0,255,0));
                gradient.setColorAt(p+=s, QColor(0,171,85));
                gradient.setColorAt(p+=s, QColor(0,0,255));
                gradient.setColorAt(p+=s, QColor(85,0,171));
                gradient.setColorAt(p+=s, QColor(171,0,85));
                gradient.setColorAt(p+=s, QColor(255,0,0));
                painter.fillRect(rect(),QBrush(gradient));
        

        alt text

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

        @mpergand yes but how would that work in my code? you setup all the points manualy here

        i need to go through QJsonArray jsonArr and in this case QJsonArray jsonArr contains

        // Position (X), Red, Green, Blue
        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
        

        as this is the default but i plan to add more palettes to the json so it can be bigger (more points) or less but always 0 (start) and 255 (end) point but there could be many points in between

        M 1 Reply Last reply
        0
        • K Kris Revi

          @mpergand yes but how would that work in my code? you setup all the points manualy here

          i need to go through QJsonArray jsonArr and in this case QJsonArray jsonArr contains

          // Position (X), Red, Green, Blue
          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
          

          as this is the default but i plan to add more palettes to the json so it can be bigger (more points) or less but always 0 (start) and 255 (end) point but there could be many points in between

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

          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 1 Reply Last reply
          0
          • 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

                                          • Login

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