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()/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 Online
                    Christian EhrlicherC Online
                    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