Raw data to QImage

17,712

Solution 1

Overall it's correct. QImage is a class that allows to manipulate its own data directly, but you should use correct pixel format.

A bit more efficient example:

QImage* img = new QImage(640, 480, QImage::Format_RGB16);
for (int y = 0; y < img->height(); y++)
{
    memcpy(img->scanLine(y), rawData[y], img->bytesPerLine());
}

Where rawData is a two-dimension array.

Solution 2

This is how I saved a raw BGRA frame to the disk:

QImage image((const unsigned char*)pixels, width, height, QImage::Format_RGB32);
image.save("out.jpg");
Share:
17,712
Nika
Author by

Nika

Updated on August 08, 2022

Comments

  • Nika
    Nika 10 months

    I'm new to graphics programming (pixels, images, etc..) I'm trying to convert Raw data to QImage and display it on QLabel. The problem is that, the raw data can be any data (it's not actually image raw data, it's binary file.) The reason if this is that, to understand deeply how pixels and things like that work, I know I'll get random image with weird results, but it will work. I'm doing something like this, but I think I'm doing it wrong!

    QImage *img = new QImage(640, 480, QImage::Format_RGB16); //640,480 size picture.
    //here I'm trying to fill newly created QImage with random pixels and display it.
    for(int i = 0; i < 640; i++)
    {
        for(int u = 0; u < 480; u++)
        {
            img->setPixel(i, u, rawData[i]);
        }
    }
    ui->label->setPixmap(QPixmap::fromImage(*img));
    

    am I doing it correctly? By the way, can you point me where should I learn these things? Thank you!

  • Nika
    Nika over 10 years
    Hi, when I tried your example, all the raw data shows same result. rawData is QByteArray and I'm using it like &rawData[y], I'm wrong right?
  • york.beta
    york.beta over 10 years
    No, &rawData[y] isn't correct, because you will copy the same pixels many times. You should use: rawData.constData() + y * img->bytesPerLine(). In this case on the each iteration new peace of data will be copied.
  • Nika
    Nika over 10 years
    I faced another problem here. I don't know how long picture should be, I mean width and height and sometimes it crashes when I pass less than 2kb data.. What is the best way to calculate it?
  • york.beta
    york.beta over 10 years
    How about creating new question? Where from are you reading data? Why don't you know the size of picture? Could you describe in detail what you are doing?
  • Nika
    Nika over 10 years
    Okay, will write new question :)