Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Iterating over pixels in QImage (Qt): which method adapts better for any image size?
I asked this in SE years ago.
I'm aware of two methods in order to access 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.
Given this situation, I would like to ask:
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 comment threads