Qt/C++, Problems with large QImage
Posted
by
David Günzel
on Stack Overflow
See other posts from Stack Overflow
or by David Günzel
Published on 2012-11-26T23:02:31Z
Indexed on
2012/11/26
23:03 UTC
Read the original article
Hit count: 324
I'm pretty new to C++/Qt and I'm trying to create an application with Visual Studio C++ and Qt (4.8.3). The application displays images using a QGraphicsView, I need to change the images at pixel level.
The basic code is (simplified):
QImage* img = new QImage(img_width,img_height,QImage::Format_RGB32);
while(do_some_stuff) {
img->setPixel(x,y,color);
}
QGraphicsPixmapItem* pm = new QGraphicsPixmapItem(QPixmap::fromImage(*img));
QGraphicsScene* sc = new QGraphicsScene;
sc->setSceneRect(0,0,img->width(),img->height());
sc->addItem(pm);
ui.graphicsView->setScene(sc);
This works well for images up to around 12000x6000 pixel. The weird thing happens beyond this size. When I set img_width=16000
and img_height=8000
, for example, the line img = new QImage(...)
returns a null image. The image data should be around 512,000,000 bytes, so it shouldn't be too large, even on a 32 bit system. Also, my machine (Win 7 64bit, 8 GB RAM) should be capable of holding the data.
I've also tried this version:
uchar* imgbuf = (uchar*) malloc(img_width*img_height*4);
QImage* img = new QImage(imgbuf,img_width,img_height,QImage::Format_RGB32);
At first, this works. The img pointer is valid and calling img->width()
for example returns the correct image width (instead of 0, in case the image pointer is null).
But as soon as I call img->setPixel()
, the pointer becomes null and img->width()
returns 0.
So what am I doing wrong? Or is there a better way of modifying large images on pixel level?
Regards, David
© Stack Overflow or respective owner