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.
Post History
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 *)...
#2: Post edited
- _I asked this in [SE](https://stackoverflow.com/a/38340293/5397930) years ago._
- <hr />
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.
- 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.
- _I asked this in [SE](https://stackoverflow.com/a/38340293/5397930) years ago._
- <hr />
- 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.
#1: Initial revision
Iterating over pixels in QImage (Qt): which method adapts better for any image size?
_I asked this in [SE](https://stackoverflow.com/a/38340293/5397930) years ago._ <hr /> 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. 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.