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 ?
Forum Updated to NodeBB v4.3 + New Features

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 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?

    JonBJ 1 Reply Last reply
    0
    • R Rockerz

      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?

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #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
      0
      • JonBJ JonB

        @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 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
        0
        • R Rockerz

          @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 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
          0
          • C ChrisW67

            @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 last edited by Rockerz
            #5
            This post is deleted!
            1 Reply Last reply
            0
            • C ChrisW67

              @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 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
              0
              • R Rockerz

                @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 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
                1
                • C ChrisW67

                  @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 last edited by Rockerz
                  #8

                  @ChrisW67 image size is width 512 height 512

                  C 1 Reply Last reply
                  0
                  • R Rockerz

                    @ChrisW67 image size is width 512 height 512

                    C Offline
                    C Offline
                    ChrisW67
                    wrote on 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
                    1
                    • C ChrisW67

                      @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 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
                      0
                      • R Rockerz

                        @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 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

                        • Login

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