Как нарисовать 8-битное изображение в градациях серого на QPainter, читая данные из байтового массива в Qt? - PullRequest
0 голосов
/ 01 марта 2012

У меня есть массив байтов (без знака), который содержит некоторые данные.Я передал этот буфер в QImage, а затем в QPainter.Но как получить изображение в градациях серого?Я пробовал следующий код в paintEvent.Пожалуйста, помогите

 QPainter painter(this);
 unsigned char buf[50 * 100] = {100};
 QImage image(buf, 50, 100, 50, QImage::Format_Indexed8);
 image.setColorCount(256);
 QRect r;
 r.setX(0);
 r.setY(0);
 r.setWidth(50);
 r.setHeight(100);
 painter.drawImage(r,image,image.rect());

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

QImage::Format_Indexed8 означает 8-байтовый ИНДЕКС для таблицы цветов, поэтому заполнение его 100 означает «использовать индекс 100 таблицы цветов».

Если требования к выравниванию соблюдены, необходимо также выполнить

image.setColor(100, qRgb(100, 100, 100)); // set color index 100 to a "100" gray

Если вы на самом деле хотите только заполнить свой QImage серым цветом «100», вы также можете сделать

QImage image(50, 100, QImage::Format_Indexed8);
image.setColorCount(1);
image.setColor(0, qRgb(100, 100, 100)); // set color index 0 to a "100" gray
image.fill(0);
0 голосов
/ 01 марта 2012

Попробуйте использовать функцию преобразования QImage .Какой формат находится внутри буфера?В любом случае серый цвет - это когда каналы r, g и b равны.Вы можете использовать этот факт в качестве альтернативы (быстрее, если вы знаете, что делаете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...