QImage Пользовательские индексированные цвета с использованием setColorTable

В моем проекте мне нужно преобразовать многоцветное изображение в одно, которое использует только один из 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 максимальными цветами.

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

Спасибо за ваше время.

0

Решение

Ну, спросите себя: как convertToFormat() позвонить на scaledImage возможно знать о таблице цветов, к которой вы обращались convImage? Он ничего не знает о convImage слева.

К счастью, есть перегрузка convertToFormat это берет colortable и должно сделать работу:

QImage convImage = scaledImage.convertToFormat (QImage::Format_Indexed8,
colorTable,
Qt::ThresholdDither|Qt::AutoColor);
1

Другие решения

Других решений пока нет …