首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Indexed8格式进行QImage假着色

使用Indexed8格式进行QImage假着色
EN

Stack Overflow用户
提问于 2020-03-29 16:30:57
回答 1查看 479关注 0票数 1

我目前在用我生成的色彩映射表对QImage进行假着色时遇到了一些问题。我已经将代码简化为一些基本步骤(通常分布在多个类中)。

我可以用下面的代码重现这个问题:

代码语言:javascript
复制
    //fill color table
    QVector< QRgb > colors;
    for (unsigned int i = 0; i < 256; ++i) {
        double fac = (double(i) / 255.) * 0.8;
        QColor color = QColor::fromHslF(fac, 0.95, 0.5);
        colors.push_front(color.rgba());
    }

    //load original
    QImage origImg;
    origImg.load("lena.jpg");
    QImage::Format f = origImg.format(); //outputs Format_Grayscale8 (24)
    origImg.save("out1.jpg");

    //convert to pixmap
    QPixmap pixmap;
    pixmap.convertFromImage(origImg);

    //convert back to Image
    QImage tmp = pixmap.toImage();
    tmp.save("out2.jpg");

    //make false color version
    QImage fc = QImage(tmp.bits(), tmp.width(), tmp.height(), QImage::Format_Indexed8);
    fc.setColorTable(colors);

    //save false color version
    fc.save("fc.jpg");

我的临时结果out1.jpg和out2.jpg看起来不错(原始结果的副本),但最终结果是错误的。谁能告诉我哪里出了问题?

原图:

fc.jpg的输出

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-30 01:03:59

变化

代码语言:javascript
复制
QImage tmp = pixmap.toImage();

代码语言:javascript
复制
QImage tmp = pixmap.toImage().convertToFormat(QImage::Format_Grayscale8);

QPixmap将图像存储为RGB,因此当您从QPixmap转换为QImage时,格式将为32 bpp (Format_RGB32)。转换回Format_Grayscale8,将为您提供预期的8bpp灰度格式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60911782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档