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. A problem i have with palettes i need help with!
Forum Updated to NodeBB v4.3 + New Features

A problem i have with palettes i need help with!

Scheduled Pinned Locked Moved Unsolved General and Desktop
27 Posts 5 Posters 3.1k Views 3 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.
  • E Offline
    E Offline
    Ewan Green
    wrote on last edited by Ewan Green
    #7

    I don't think this is possible without the use of an indexed image (QImage::Format_Indexed8?). Given you're using this format, I think it would be a matter of calling the QImage::color() method for every color in your image (QImage::colorCount()). Then you can process that however you like.

    Ewan Green

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

      maybe i've been looking at this the wrong way!

      is it possible in Qt to make a image from this color data Pos, R, G, B?

      {
          0, 120,  0,  0,
         22, 179, 22,  0,
         51, 255,104,  0,
         85, 167, 22, 18,
        135, 100,  0, 103,
        198,  16,  0, 130,
        255,   0,  0, 160
      };
      
      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #9

        So Pos is the end/start of the next gradient ?

        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
        0
        • SGaistS SGaist

          So Pos is the end/start of the next gradient ?

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

          @SGaist yes

          0 - Start
          255 - end

          mrjjM 1 Reply Last reply
          0
          • K Kris Revi

            @SGaist yes

            0 - Start
            255 - end

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #11

            @Kris-Revi

            Hi
            You should be able to use such table with
            https://doc.qt.io/qt-5/qgradient.html

            and https://doc.qt.io/qt-5/qgradient.html#setColorAt

            K 1 Reply Last reply
            1
            • mrjjM mrjj

              @Kris-Revi

              Hi
              You should be able to use such table with
              https://doc.qt.io/qt-5/qgradient.html

              and https://doc.qt.io/qt-5/qgradient.html#setColorAt

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

              @mrjj never worked with QPainter or QLinearGradient befor! but i'll give it a go i guess

              mrjjM 1 Reply Last reply
              0
              • K Kris Revi

                @mrjj never worked with QPainter or QLinearGradient befor! but i'll give it a go i guess

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by mrjj
                #13

                @Kris-Revi

                Well fast example might help you get started.

                // converts range between 0-255 to range 0 - 1 as gradient uses
                float mapPos(int x, float in_min, float in_max, float out_min, float out_max)
                {
                    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
                }
                
                // data type to hold the info as list of ints is clumsy
                struct gradPosDef {
                    int pos;
                    int r;
                    int g;
                    int b;
                };
                
                // define a test gradient. this you would load from a file.
                QList<gradPosDef> gradValues{
                    {0, 120,  0,  0},
                    {22, 179, 22,  0},
                    {51, 255, 104,  0},
                    {85, 167, 22, 18},
                    {135, 100,  0, 103},
                    {198,  16,  0, 130},
                    {255,   0,  0, 160}
                };
                
                // creates pixmap and returns it
                QPixmap MainWindow::makeGradient()
                {
                    // size of gradient / pixmap
                    const int gw = 255;
                    const int gh = 100;
                    // define it- make it point straight from left to right
                    QLinearGradient gradient(0, 0, gw, 0);
                   // loop over the test gradient values
                    for (int cc = 0; cc < gradValues.size(); cc++) {
                        auto cur = gradValues.at(cc);
                        // convert to new scale. you could directly use 0- 1 instead of  0-255 to avoid
                        float scaledVal =  mapPos(cur.pos, 0, 255, 0, 1);
                        // write it out to see if we get sane values
                        qDebug() << "org: " << cur.pos << " - " << scaledVal;
                        // make color
                        QColor col(cur.r, cur.g, cur.b);
                        // set gradient point
                        gradient.setColorAt(scaledVal, col);
                    };
                // allocate a pix map
                    QPixmap pix(gw, gh);
                //assign painter to it so we can paint the gradiant
                    QPainter p(&pix);
                // assign gradient to a brush. this way we can paint it
                    QBrush grad(gradient);
                // fill pixmap with gradiant
                    p.fillRect(pix.rect(), gradient);
                    return pix;
                }
                

                to use it you can do

                auto pix = makeGradient();
                pix.save("e:/test.png");
                ui->label->setPixmap(pix);
                

                and get
                alt text

                Not perfect but demonstrate one way to do it.

                K 1 Reply Last reply
                2
                • mrjjM mrjj

                  @Kris-Revi

                  Well fast example might help you get started.

                  // converts range between 0-255 to range 0 - 1 as gradient uses
                  float mapPos(int x, float in_min, float in_max, float out_min, float out_max)
                  {
                      return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
                  }
                  
                  // data type to hold the info as list of ints is clumsy
                  struct gradPosDef {
                      int pos;
                      int r;
                      int g;
                      int b;
                  };
                  
                  // define a test gradient. this you would load from a file.
                  QList<gradPosDef> gradValues{
                      {0, 120,  0,  0},
                      {22, 179, 22,  0},
                      {51, 255, 104,  0},
                      {85, 167, 22, 18},
                      {135, 100,  0, 103},
                      {198,  16,  0, 130},
                      {255,   0,  0, 160}
                  };
                  
                  // creates pixmap and returns it
                  QPixmap MainWindow::makeGradient()
                  {
                      // size of gradient / pixmap
                      const int gw = 255;
                      const int gh = 100;
                      // define it- make it point straight from left to right
                      QLinearGradient gradient(0, 0, gw, 0);
                     // loop over the test gradient values
                      for (int cc = 0; cc < gradValues.size(); cc++) {
                          auto cur = gradValues.at(cc);
                          // convert to new scale. you could directly use 0- 1 instead of  0-255 to avoid
                          float scaledVal =  mapPos(cur.pos, 0, 255, 0, 1);
                          // write it out to see if we get sane values
                          qDebug() << "org: " << cur.pos << " - " << scaledVal;
                          // make color
                          QColor col(cur.r, cur.g, cur.b);
                          // set gradient point
                          gradient.setColorAt(scaledVal, col);
                      };
                  // allocate a pix map
                      QPixmap pix(gw, gh);
                  //assign painter to it so we can paint the gradiant
                      QPainter p(&pix);
                  // assign gradient to a brush. this way we can paint it
                      QBrush grad(gradient);
                  // fill pixmap with gradiant
                      p.fillRect(pix.rect(), gradient);
                      return pix;
                  }
                  

                  to use it you can do

                  auto pix = makeGradient();
                  pix.save("e:/test.png");
                  ui->label->setPixmap(pix);
                  

                  and get
                  alt text

                  Not perfect but demonstrate one way to do it.

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

                  @mrjj ty for that bit of code m8! :) <3

                  question! is this the way togo when you want to save the file to the App folder?

                  if ( pix.save(QDir::currentPath() + "/test.png") )
                  
                  jsulmJ 1 Reply Last reply
                  0
                  • K Kris Revi

                    @mrjj ty for that bit of code m8! :) <3

                    question! is this the way togo when you want to save the file to the App folder?

                    if ( pix.save(QDir::currentPath() + "/test.png") )
                    
                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    @Kris-Revi You should not write into app folder as usually normal users have no write access there!
                    There are better options for saving data, see https://doc.qt.io/qt-5/qstandardpaths.html

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    K 1 Reply Last reply
                    2
                    • jsulmJ jsulm

                      @Kris-Revi You should not write into app folder as usually normal users have no write access there!
                      There are better options for saving data, see https://doc.qt.io/qt-5/qstandardpaths.html

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

                      @jsulm realy! well what would be a normal place to put this then? :)

                      jsulmJ 1 Reply Last reply
                      0
                      • K Kris Revi

                        @jsulm realy! well what would be a normal place to put this then? :)

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #17

                        @Kris-Revi Did you actually read the link I gave you?
                        There are several locations depending on type of files:

                        • QStandardPaths::DocumentsLocation - any documents
                        • QStandardPaths::PicturesLocation - for pictures (this is probably what you want)
                        • ...

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        K 1 Reply Last reply
                        2
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #18

                          You can either use QFileDialog so your users can choose where to store them or use one of the suitable proposition of QStandardPaths like QStandardPaths::DocumentsLocation

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

                          1 Reply Last reply
                          1
                          • jsulmJ jsulm

                            @Kris-Revi Did you actually read the link I gave you?
                            There are several locations depending on type of files:

                            • QStandardPaths::DocumentsLocation - any documents
                            • QStandardPaths::PicturesLocation - for pictures (this is probably what you want)
                            • ...
                            K Offline
                            K Offline
                            Kris Revi
                            wrote on last edited by
                            #19

                            @jsulm ofcourse i read it! i was asking where do people usualy put it :) im not THAT lazy! :)

                            jsulmJ 1 Reply Last reply
                            0
                            • K Kris Revi

                              @jsulm ofcourse i read it! i was asking where do people usualy put it :) im not THAT lazy! :)

                              jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by
                              #20

                              @Kris-Revi Sorry if I was rude!
                              Where to put the data depends on data types. It looks like you want to store a picture, so QStandardPaths::PicturesLocation would be the proper location. Or you ask the user where to store as @SGaist suggested.

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              K 1 Reply Last reply
                              1
                              • jsulmJ jsulm

                                @Kris-Revi Sorry if I was rude!
                                Where to put the data depends on data types. It looks like you want to store a picture, so QStandardPaths::PicturesLocation would be the proper location. Or you ask the user where to store as @SGaist suggested.

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

                                @jsulm np! was not rude :)

                                im asking because when installing almost any software it always creates a folder in the "C:/user/username/appdata" folder was wondering if that was a default/standard !

                                suggesting documents seemed weird to me as these "pictures" are generated and used by the APP and not the user and as i write this i think (appdata) would be the place

                                jsulmJ 1 Reply Last reply
                                0
                                • K Kris Revi

                                  @jsulm np! was not rude :)

                                  im asking because when installing almost any software it always creates a folder in the "C:/user/username/appdata" folder was wondering if that was a default/standard !

                                  suggesting documents seemed weird to me as these "pictures" are generated and used by the APP and not the user and as i write this i think (appdata) would be the place

                                  jsulmJ Offline
                                  jsulmJ Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #22

                                  @Kris-Revi said in A problem i have with palettes i need help with!:

                                  C:/user/username/appdata

                                  Yes, this folder can be used by your app to write its data in its subfolder. But "pix.save(QDir::currentPath()" will not return this path. Use QStandardPaths::AppLocalDataLocation to get that path.

                                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  K 2 Replies Last reply
                                  0
                                  • jsulmJ jsulm

                                    @Kris-Revi said in A problem i have with palettes i need help with!:

                                    C:/user/username/appdata

                                    Yes, this folder can be used by your app to write its data in its subfolder. But "pix.save(QDir::currentPath()" will not return this path. Use QStandardPaths::AppLocalDataLocation to get that path.

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

                                    @jsulm said in A problem i have with palettes i need help with!:

                                    Yes, this folder can be used by your app to write its data in its subfolder. But "pix.save(QDir::currentPath()" will not return this path. Use QStandardPaths::AppLocalDataLocation to get that path.

                                    yea i wrote som vars

                                        QString save_path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
                                        QString palette_folder = "/palettes";
                                    
                                    1 Reply Last reply
                                    0
                                    • jsulmJ jsulm

                                      @Kris-Revi said in A problem i have with palettes i need help with!:

                                      C:/user/username/appdata

                                      Yes, this folder can be used by your app to write its data in its subfolder. But "pix.save(QDir::currentPath()" will not return this path. Use QStandardPaths::AppLocalDataLocation to get that path.

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

                                      @jsulm hmm but for android there is no such path as C:/user/username/appdata .... where would i store them there?

                                      jsulmJ 1 Reply Last reply
                                      0
                                      • K Kris Revi

                                        @jsulm hmm but for android there is no such path as C:/user/username/appdata .... where would i store them there?

                                        jsulmJ Offline
                                        jsulmJ Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #25

                                        @Kris-Revi There should be app data folder (of course it is not C:/user/username/appdata on Android). Try QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) on Android and see what it returns.

                                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        1 Reply Last reply
                                        0
                                        • SGaistS Offline
                                          SGaistS Offline
                                          SGaist
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #26

                                          QStandardPaths will return you suitable paths for the platform you are targeting however you should always check that the folder exists and create it if not prior to do anything else. While the path you will get is valid, it does not mean it exists yet as it does not make sense for the system to create them all since not every app will use these folders. Especially on mobile OS where the application storage and the user data it may create are located on different spaces on the device.

                                          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
                                          2

                                          • Login

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