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

    @mrjj hi

    yea im not sure about the position thing how to move forward with that!

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

    @Kris-Revi
    These images that defines a gradiant.
    Are those user defined or will you make them ?

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

                                          • Login

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