Question

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!

Was it helpful?

Solution

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.

OTHER TIPS

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");

Syntactically, your code appears to be correct.

Reading the class signature, you may want to call setPixel in the following manner:

img->setPixel(i, u, QRbg(##FFRRGGBB));

Where ##FFRRGGBB is a color quadruplet, unless, of course, you want monochrome 8 bit support.

Additionally, declaring a naked pointer is dangerous. The following code is equivalent:

QImage image(640, 480, QImage::Format_something);
QPixmap::fromImage(image);

And will deallocate appropriately upon function completion.

Qt Examples directory is a great place to search for functionality. Also, peruse the class documentation because they're littered with examples.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top