В моем проекте мне нужно преобразовать многоцветное изображение в одно, которое использует только один из 144 предопределенных цветов, которые я установил в пользовательской таблице цветов.
Вот мой код:
QImage convImage(128, 128, QImage::Format_Indexed8);
convImage.setColorCount(144);
convImage.setColorTable(colorTable); //colorTable is a const QVector with 144 qRgb values.
//scaledImage is the source image
convImage = scaledImage.convertToFormat(QImage::Format_Indexed8,Qt::ThresholdDither|Qt::AutoColor);
ui->mapView->setPixmap(QPixmap::fromImage(convImage));
Я ожидаю, что convImage будет содержать только те цвета, которые существуют в созданной мной таблице цветов, однако, похоже, она полностью игнорирует таблицу, которую я установил, и вместо этого создает свою собственную уникальную таблицу с 256 максимальными цветами.
Я мог бы индексировать все сам, просматривая каждый пиксель и находя способ точно выбрать цвет из таблицы цветов, но мне интересно, правильно ли я использую таблицу цветов. Я не смог найти в документации ничего, что объясняет, почему создается новая таблица.
Спасибо за ваше время.
Ну, спросите себя: как convertToFormat()
позвонить на scaledImage
возможно знать о таблице цветов, к которой вы обращались convImage
? Он ничего не знает о convImage
слева.
К счастью, есть перегрузка convertToFormat
это берет colortable и должно сделать работу:
QImage convImage = scaledImage.convertToFormat (QImage::Format_Indexed8,
colorTable,
Qt::ThresholdDither|Qt::AutoColor);
Других решений пока нет …