Raw data to QImage
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");
Nika
Updated on August 08, 2022Comments
-
Nika 10 monthsI'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 over 10 yearsHi, 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 over 10 yearsNo,&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 over 10 yearsI 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 over 10 yearsHow 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 over 10 yearsOkay, will write new question :)