Qt: What is the most scalable way to iterate over a QImage?

2.8k Views Asked by At

I'm aware of two methods in order to access to all the pixels in a QImage called img.

Method 1

for (int y = 0; y < img.height(); y++) {
    QRgb *line = (QRgb *) img.scanline(y);
    for (int x = 0; x < img.width(); x++) {
        // line[x] has an individual pixel
        line[x] = QColor(255, 128, 0).rgb();
    }
}

Method 2

QRgb *st = (QRgb *) img.bits();
quint64 pixelCount = img.width() * img.height();

for (quint64 p = 0; p < pixelCount; p++) {
    // st[p] has an individual pixel
    st[p] = QColor(255, 128, 0).rgb();
}

I'm keen on using the second method as it only involves one loop, but am also concerned about any possible overflows on pixelCount if processing a "big enough" image.

Question

What is the most scalable way to iterate over all pixels stored in a QImage? By scalable I mean that it will still work no matter what the image dimensions (width and height) are.

NOTE: I'm already aware there are "physical" limits in terms of memory usage. I just want to know whether both methods are capable of reaching such a limit.

0

There are 0 best solutions below