QImage 使用 setColorTable 自定义索引颜色

QImage Custom Indexed Colors Using 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 只包含我创建的 colorTable 中存在的颜色,但是它似乎完全忽略了我设置的 table 而是创建了它自己独特的 table,最大颜色为 256 .

我可以通过循环遍历每个像素并找到一种方法从 colorTable 中准确地 select 一种颜色来索引所有内容,但我想知道我是否只是错误地使用了 colorTable。我在文档中找不到任何解释为什么要创建新 table 的内容。

谢谢你的时间。

好吧,问问你自己:convertToFormat() 调用 scaledImage 应该如何知道你应用到 convImage 的着色表?它对左侧的 convImage 一无所知。

幸运的是,有一个 convertToFormat 的重载需要一个 colortable 并且应该完成这项工作:

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