Grayscale Indexed8 QImage 倾斜

Grayscale Indexed8 QImage tilted

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

但是,在 class 中使用以下简短程序,我总是得到倾斜的图像。

首先,这是我的代码

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 矩阵的结果图像,它有两个块子矩阵(它确实有,数据是正确的..)

为什么图像倾斜?列数量似乎不正确,但我看不出有任何错误。

期待得到帮助,

非常感谢, G.

P.S.: 图片放大后共有三个不同的灰度块。然而,他们很难看到。仅看最亮的颜色就可以看到倾斜。

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

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