Как установить цвет пикселя QImage для изображения RGB888 в Qt - PullRequest
2 голосов
/ 19 декабря 2011

У меня есть qImage в формате RGB888, определенное следующим образом:

myQrgb = QImage(img_in, width, height, QImage::Format_RGB888);

Я хочу изменить конкретные значения пикселей, поэтому я последовал примеру здесь , вот так:

QRgb value = qRgb(0, 0, 0);
myQrgb.setPixel(i, j, value);

Это, однако, всегда вызывает ошибку сегментации независимо от значений i и j (например, i = j = 2).

Я предполагаю, что это потому, что я неправильно использую QRgbманипулировать пикселями в QImage::Format_RGB888.Что мне делать вместо этого?

Ответы [ 2 ]

6 голосов
/ 19 декабря 2011

Я думаю, что проблема может быть больше связана с данными img_in, с которыми вы инициализируете изображение. Вы уверены, что данные действительны?

Следующий пример успешно рисует белый квадрат с черным квадратом в углу.

#include <QtGui>

int main(int argc, char **argv) {
  QApplication app(argc, argv);

  QImage img(100, 100, QImage::Format_RGB888);
  img.fill(QColor(Qt::white).rgb());

  for (int x = 0; x < 10; ++x) {
    for (int y = 0; y < 10; ++y) {
      img.setPixel(x, y, qRgb(0, 0, 0));
    }
  }

  QLabel l;
  l.setPixmap(QPixmap::fromImage(img));
  l.show();

  return app.exec();
}
5 голосов
/ 19 декабря 2011

Есть несколько вещей, которые необходимо подтвердить:

  1. Согласно используемому вами конструктору QImage убедитесь, что img_in остается действительным в течение всего срока службы QImage объекта. Кстати, деструктор QImage не удалит ваши данные (img_in).

  2. Если позиция пикселя, которую вы устанавливаете, не является действительной координатой, поведение setPixel() не определено.

Я подозреваю, что в первом случае img_in, вероятно, исчезает с QImage. Вы можете попытаться создать QImage, используя другой конструктор, например QImage(10, 10, QImage::Format_RGB888), и поиграть с setPixel().

...