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. How convert the raw data(hexadecimal) to image ?

How convert the raw data(hexadecimal) to image ?

Scheduled Pinned Locked Moved Solved General and Desktop
11 Posts 3 Posters 1.1k Views
  • 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.
  • R Offline
    R Offline
    Rockerz
    wrote on 12 Apr 2024, 11:06 last edited by
    #1

    Human interface device (hid board) connected through hidapi library in visual studio I can't get the image?
    how to get the image as per received data I'm receiving 1024 * 1024 hexadecimal value?

    J 1 Reply Last reply 12 Apr 2024, 11:44
    0
    • R Rockerz
      12 Apr 2024, 11:06

      Human interface device (hid board) connected through hidapi library in visual studio I can't get the image?
      how to get the image as per received data I'm receiving 1024 * 1024 hexadecimal value?

      J Offline
      J Offline
      JonB
      wrote on 12 Apr 2024, 11:44 last edited by JonB 4 Dec 2024, 11:44
      #2

      @Rockerz
      Not sure what this means. If you receive a string of, say, hexadecimal characters then you need to convert those to binary/bytes, e.g. QByteArray QByteArray::fromHex(const QByteArray &hexEncoded).

      R 1 Reply Last reply 13 Apr 2024, 06:01
      0
      • J JonB
        12 Apr 2024, 11:44

        @Rockerz
        Not sure what this means. If you receive a string of, say, hexadecimal characters then you need to convert those to binary/bytes, e.g. QByteArray QByteArray::fromHex(const QByteArray &hexEncoded).

        R Offline
        R Offline
        Rockerz
        wrote on 13 Apr 2024, 06:01 last edited by
        #3

        @JonB
        continuously receiving data from the hid device raw data that raw converted to be image
        33439910-4548-4c74-aa40-2464ebc6842a-Screenshot 2024-04-13 112806.png
        I converted to image but display in 3232 , 64 * 64 only not 512 512 & 1024 * 1024 pixels ?how to solve this issue?

        C 1 Reply Last reply 13 Apr 2024, 06:32
        0
        • R Rockerz
          13 Apr 2024, 06:01

          @JonB
          continuously receiving data from the hid device raw data that raw converted to be image
          33439910-4548-4c74-aa40-2464ebc6842a-Screenshot 2024-04-13 112806.png
          I converted to image but display in 3232 , 64 * 64 only not 512 512 & 1024 * 1024 pixels ?how to solve this issue?

          C Offline
          C Offline
          ChrisW67
          wrote on 13 Apr 2024, 06:32 last edited by
          #4

          @Rockerz Is it fair to assume that screenshot is the result of using QDebug to dump the received QByteArray?

          If so, then you do NOT have hexadecimal anything in the byte array.

          continuously receiving data from the hid device raw data that raw converted to be image

          First, accumulate that data in a single block until you have a complete image. How you determine "complete" we cannot say.

          Then you need to know precisely what arrangement that "raw data" has in terms of pixel dimensions, pixel packing, bit-depth, colour mapping etc. What that might be we cannot say.

          Then you will be equipped to see if there is a way to turn that data as-is into a QImage or QPixmap. If not then you may need to process it before using Qt functions (your own processing or some 3rd-party library).

          R 2 Replies Last reply 13 Apr 2024, 06:45
          0
          • C ChrisW67
            13 Apr 2024, 06:32

            @Rockerz Is it fair to assume that screenshot is the result of using QDebug to dump the received QByteArray?

            If so, then you do NOT have hexadecimal anything in the byte array.

            continuously receiving data from the hid device raw data that raw converted to be image

            First, accumulate that data in a single block until you have a complete image. How you determine "complete" we cannot say.

            Then you need to know precisely what arrangement that "raw data" has in terms of pixel dimensions, pixel packing, bit-depth, colour mapping etc. What that might be we cannot say.

            Then you will be equipped to see if there is a way to turn that data as-is into a QImage or QPixmap. If not then you may need to process it before using Qt functions (your own processing or some 3rd-party library).

            R Offline
            R Offline
            Rockerz
            wrote on 13 Apr 2024, 06:45 last edited by Rockerz
            #5
            This post is deleted!
            1 Reply Last reply
            0
            • C ChrisW67
              13 Apr 2024, 06:32

              @Rockerz Is it fair to assume that screenshot is the result of using QDebug to dump the received QByteArray?

              If so, then you do NOT have hexadecimal anything in the byte array.

              continuously receiving data from the hid device raw data that raw converted to be image

              First, accumulate that data in a single block until you have a complete image. How you determine "complete" we cannot say.

              Then you need to know precisely what arrangement that "raw data" has in terms of pixel dimensions, pixel packing, bit-depth, colour mapping etc. What that might be we cannot say.

              Then you will be equipped to see if there is a way to turn that data as-is into a QImage or QPixmap. If not then you may need to process it before using Qt functions (your own processing or some 3rd-party library).

              R Offline
              R Offline
              Rockerz
              wrote on 13 Apr 2024, 08:30 last edited by
              #6

              @ChrisW67
              I changed the color as black so it displays Received data as 00 00 00 00 currently receiving 512 data continuously

              C 1 Reply Last reply 13 Apr 2024, 09:00
              0
              • R Rockerz
                13 Apr 2024, 08:30

                @ChrisW67
                I changed the color as black so it displays Received data as 00 00 00 00 currently receiving 512 data continuously

                C Offline
                C Offline
                ChrisW67
                wrote on 13 Apr 2024, 09:00 last edited by
                #7

                @Rockerz What is "512 data continuously" supposed to mean? An image has a finite size, it is not "continuous."

                Do you have any idea of the answers to my earlier questions?

                R 1 Reply Last reply 13 Apr 2024, 09:59
                1
                • C ChrisW67
                  13 Apr 2024, 09:00

                  @Rockerz What is "512 data continuously" supposed to mean? An image has a finite size, it is not "continuous."

                  Do you have any idea of the answers to my earlier questions?

                  R Offline
                  R Offline
                  Rockerz
                  wrote on 13 Apr 2024, 09:59 last edited by Rockerz
                  #8

                  @ChrisW67 image size is width 512 height 512

                  C 1 Reply Last reply 13 Apr 2024, 10:59
                  0
                  • R Rockerz
                    13 Apr 2024, 09:59

                    @ChrisW67 image size is width 512 height 512

                    C Offline
                    C Offline
                    ChrisW67
                    wrote on 13 Apr 2024, 10:59 last edited by
                    #9

                    @ChrisW67 said in How convert the raw data(hexadecimal) to image ?:

                    pixel packing, bit-depth, colour mapping etc.

                    R 1 Reply Last reply 18 Apr 2024, 06:32
                    1
                    • C ChrisW67
                      13 Apr 2024, 10:59

                      @ChrisW67 said in How convert the raw data(hexadecimal) to image ?:

                      pixel packing, bit-depth, colour mapping etc.

                      R Offline
                      R Offline
                      Rockerz
                      wrote on 18 Apr 2024, 06:32 last edited by
                      #10

                      @ChrisW67 I didnt get the color of the image? what is the issue and how to display 8 bit color in this code?

                      QImage image(512, totalBytesRead / 512, QImage::Format_Indexed8);
                              QVector<QRgb> colorTable;
                           for (int i = 0; i < 255; ++i)
                              {
                                  colorTable.append(qRgb(i, i, i));
                              }
                              image.setColorTable(colorTable);
                      
                              for (int i = 0; i < totalBytesRead; ++i)
                              {
                                  imageBuffer.append(data[i]);
                              }
                      
                              if (imageBuffer.size() >= 512 * (totalBytesRead / 512))
                              {
                                  for (int y = 0; y < totalBytesRead / 512; ++y)
                                  {
                                      for (int x = 0; x < 512; ++x)
                                      {
                                          int index = y * 512 + x;
                                          if (index < imageBuffer.size())
                                          {
                                              image.setPixel(x, y, imageBuffer[index]);
                                          }
                                      }
                                  }
                      
                                  ui.label->setPixmap(QPixmap::fromImage(image));
                                  imageBuffer.clear();
                              }
                      
                      C 1 Reply Last reply 18 Apr 2024, 21:14
                      0
                      • R Rockerz
                        18 Apr 2024, 06:32

                        @ChrisW67 I didnt get the color of the image? what is the issue and how to display 8 bit color in this code?

                        QImage image(512, totalBytesRead / 512, QImage::Format_Indexed8);
                                QVector<QRgb> colorTable;
                             for (int i = 0; i < 255; ++i)
                                {
                                    colorTable.append(qRgb(i, i, i));
                                }
                                image.setColorTable(colorTable);
                        
                                for (int i = 0; i < totalBytesRead; ++i)
                                {
                                    imageBuffer.append(data[i]);
                                }
                        
                                if (imageBuffer.size() >= 512 * (totalBytesRead / 512))
                                {
                                    for (int y = 0; y < totalBytesRead / 512; ++y)
                                    {
                                        for (int x = 0; x < 512; ++x)
                                        {
                                            int index = y * 512 + x;
                                            if (index < imageBuffer.size())
                                            {
                                                image.setPixel(x, y, imageBuffer[index]);
                                            }
                                        }
                                    }
                        
                                    ui.label->setPixmap(QPixmap::fromImage(image));
                                    imageBuffer.clear();
                                }
                        
                        C Offline
                        C Offline
                        ChrisW67
                        wrote on 18 Apr 2024, 21:14 last edited by ChrisW67
                        #11

                        Each byte in your buffer represents a pixel in whatever colour is in that index of the colour table. You are setting up a 256-level grayscale colour map, so you will not see colour. If these pixels are not supposed to be grey then the colour table needs to contain non-grey values. What is supposed to be in the colour table is entirely application-dependent.

                        If that is not the problem you are seeing then you need to better explain what you are expecting and receiving.

                        See this example for a faster way to handle the specific raw 256 colour indexed image format and the effect of not knowing the colour table:

                        #include <QCoreApplication>
                        #include <QByteArray>
                        #include <QImage>
                        
                        int main(int argc, char **argv) {
                                QCoreApplication app(argc, argv);
                        
                                // Create some fake data that should be a gradient in greyscale
                                QByteArray fakeData(256 * 256, '\0');
                                for (int r = 0; r < 256; ++r) {
                                        for (int c = 0; c < 256; ++c) {
                                                fakeData[r * 256 + c] = (r + c) / 2;
                                        }
                                }
                        
                                QImage image(reinterpret_cast<uchar*>(fakeData.data()), 256, 256, 256, QImage::Format_Indexed8);
                                image.setColorCount(256);
                                for (int i = 0; i < 255; ++i) 
                                        image.setColor(i, qRgb(i, i, i));
                                image.save("grey.png");
                        
                                // same data different colour map
                                for (int i = 0; i < 255; ++i) 
                                        image.setColor(i, qRgb(i, 0, 0));
                                image.save("reds.png");
                        
                                 
                                // ditto with an ancient VGA colour map
                                quint32 vgaColorMap[256] = {
                                        0x000000, 0x0000a8, 0x00a800, 0x00a8a8, 0xa80000, 0xa800a8, 0xa85400, 0xa8a8a8, 
                                        0x545454, 0x5454fc, 0x54fc54, 0x54fcfc, 0xfc5454, 0xfc54fc, 0xfcfc54, 0xfcfcfc, 
                                        0x000000, 0x141414, 0x202020, 0x2c2c2c, 0x383838, 0x444444, 0x505050, 0x606060, 
                                        0x707070, 0x808080, 0x909090, 0xa0a0a0, 0xb4b4b4, 0xc8c8c8, 0xe0e0e0, 0xfcfcfc, 
                                        0x0000fc, 0x4000fc, 0x7c00fc, 0xbc00fc, 0xfc00fc, 0xfc00bc, 0xfc007c, 0xfc0040, 
                                        0xfc0000, 0xfc4000, 0xfc7c00, 0xfcbc00, 0xfcfc00, 0xbcfc00, 0x7cfc00, 0x40fc00, 
                                        0x00fc00, 0x00fc40, 0x00fc7c, 0x00fcbc, 0x00fcfc, 0x00bcfc, 0x007cfc, 0x0040fc, 
                                        0x7c7cfc, 0x9c7cfc, 0xbc7cfc, 0xdc7cfc, 0xfc7cfc, 0xfc7cdc, 0xfc7cbc, 0xfc7c9c, 
                                        0xfc7c7c, 0xfc9c7c, 0xfcbc7c, 0xfcdc7c, 0xfcfc7c, 0xdcfc7c, 0xbcfc7c, 0x9cfc7c, 
                                        0x7cfc7c, 0x7cfc9c, 0x7cfcbc, 0x7cfcdc, 0x7cfcfc, 0x7cdcfc, 0x7cbcfc, 0x7c9cfc, 
                                        0xb4b4fc, 0xc4b4fc, 0xd8b4fc, 0xe8b4fc, 0xfcb4fc, 0xfcb4e8, 0xfcb4d8, 0xfcb4c4, 
                                        0xfcb4b4, 0xfcc4b4, 0xfcd8b4, 0xfce8b4, 0xfcfcb4, 0xe8fcb4, 0xd8fcb4, 0xc4fcb4,
                                        0xb4fcb4, 0xb4fcc4, 0xb4fcd8, 0xb4fce8, 0xb4fcfc, 0xb4e8fc, 0xb4d8fc, 0xb4c4fc, 
                                        0x000070, 0x1c0070, 0x380070, 0x540070, 0x700070, 0x700054, 0x700038, 0x70001c, 
                                        0x700000, 0x701c00, 0x703800, 0x705400, 0x707000, 0x547000, 0x387000, 0x1c7000, 
                                        0x007000, 0x00701c, 0x007038, 0x007054, 0x007070, 0x005470, 0x003870, 0x001c70,
                                        0x383870, 0x443870, 0x543870, 0x603870, 0x703870, 0x703860, 0x703854, 0x703844,
                                        0x703838, 0x704438, 0x705438, 0x706038, 0x707038, 0x607038, 0x547038, 0x447038,
                                        0x387038, 0x387044, 0x387054, 0x387060, 0x387070, 0x386070, 0x385470, 0x384470,
                                        0x505070, 0x585070, 0x605070, 0x685070, 0x705070, 0x705068, 0x705060, 0x705058,
                                        0x705050, 0x705850, 0x706050, 0x706850, 0x707050, 0x687050, 0x607050, 0x587050,
                                        0x507050, 0x507058, 0x507060, 0x507068, 0x507070, 0x506870, 0x506070, 0x505870,
                                        0x000040, 0x100040, 0x200040, 0x300040, 0x400040, 0x400030, 0x400020, 0x400010,
                                        0x400000, 0x401000, 0x402000, 0x403000, 0x404000, 0x304000, 0x204000, 0x104000,
                                        0x004000, 0x004010, 0x004020, 0x004030, 0x004040, 0x003040, 0x002040, 0x001040,
                                        0x202040, 0x282040, 0x302040, 0x382040, 0x402040, 0x402038, 0x402030, 0x402028,
                                        0x402020, 0x402820, 0x403020, 0x403820, 0x404020, 0x384020, 0x304020, 0x284020,
                                        0x204020, 0x204028, 0x204030, 0x204038, 0x204040, 0x203840, 0x203040, 0x202840,
                                        0x2c2c40, 0x302c40, 0x342c40, 0x3c2c40, 0x402c40, 0x402c3c, 0x402c34, 0x402c30,
                                        0x402c2c, 0x40302c, 0x40342c, 0x403c2c, 0x40402c, 0x3c402c, 0x34402c, 0x30402c,
                                        0x2c402c, 0x2c4030, 0x2c4034, 0x2c403c, 0x2c4040, 0x2c3c40, 0x2c3440, 0x2c3040,
                                        0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000
                                };
                                for (int i = 0; i < 255; ++i) 
                                        image.setColor(i, 0xff000000 + vgaColorMap[i]);
                                image.save("vga.png");
                        
                                return 0;
                        }
                        
                        1 Reply Last reply
                        1
                        • R Rockerz has marked this topic as solved on 9 May 2024, 06:58

                        9/11

                        13 Apr 2024, 10:59

                        • Login

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