簡體   English   中英

QImage 偽着色,格式為 Indexed8

[英]QImage false coloring with Format Indexed8

我目前在使用我生成的顏色圖對 QImage 進行偽着色時遇到了一些麻煩。 我已將代碼精簡為一些基本步驟(通常分布在多個類中)。

我可以用這段代碼重現這個問題:

    //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 的輸出

fc.jpg 的輸出

改變

QImage tmp = pixmap.toImage();

QImage tmp = pixmap.toImage().convertToFormat(QImage::Format_Grayscale8);

QPixmap 將圖像存儲為 RGB,因此當您從 QPixmap 轉換為 QImage 時,格式將為 32 bpp ( Format_RGB32 )。 轉換回Format_Grayscale8 ,將為您提供預期的 8 bpp 灰度格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM