灰度Indexed8 QImage倾斜

时间:2015-03-12 16:08:43

标签: bytearray grayscale qimage

我有点绝望。我需要在QT应用程序中可视化矩阵(在本例中是使用armadillo库的简单int矩阵,保持0到240之间的值)。

但是,在课堂上使用以下短程序,我总是会得到一个倾斜的图像。

首先,这是我的代码

QImage matImage::matToIMage(const arma::imat &theMatrix)
{
    const auto numRows(theMatrix.n_rows);
    const auto numCols(theMatrix.n_cols);

    uchar *datap = new uchar[numCols*numRows];
    //int *datai = new int[numCols*numRows];

    int idx(0);
    for (auto y = 0; y < numRows; ++y)
    {
        for (auto x=0; x < numCols; ++x)
        {
            datap[idx] = static_cast<char>(theMatrix(y, x));
            //datai[idx] = theMatrix(y, x);
            ++idx;
        }
    }

    QVector<QRgb> grayscale;

    for (size_t i = 0; i < 256; ++i)
    {
        grayscale.append( qRgb(i, i, i) );
    }

    QImage image(datap, numCols, numRows, QImage::Format_Indexed8);
    image.setColorTable(grayscale);

    return image;
}

这里是60x82矩阵的结果图像,它有两个块子矩阵(它确实有,数据正确..)

enter image description here

为什么图像会倾斜?看起来列数量不正确,但我无法看到任何错误。

期待获得帮助,

非常感谢, -G。

P.S。:图像放大后,共有三个不同的灰阶块。然而,他们很难看到。可以看到倾斜已经只看到最亮的颜色。

编辑:当从Indexed8切换到RGB32 Imageformat并使用setPixel时,一切正常。但是,为了我的目的,我更喜欢8但是图像......

1 个答案:

答案 0 :(得分:1)

这是因为行没有对齐... QImage文档说图像数据必须是32位对齐的,每个单独的行也必须是32位对齐的。