我有点绝望。我需要在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矩阵的结果图像,它有两个块子矩阵(它确实有,数据正确..)
为什么图像会倾斜?看起来列数量不正确,但我无法看到任何错误。
期待获得帮助,
非常感谢, -G。
P.S。:图像放大后,共有三个不同的灰阶块。然而,他们很难看到。可以看到倾斜已经只看到最亮的颜色。
编辑:当从Indexed8切换到RGB32 Imageformat并使用setPixel时,一切正常。但是,为了我的目的,我更喜欢8但是图像......
答案 0 :(得分:1)
这是因为行没有对齐... QImage文档说图像数据必须是32位对齐的,每个单独的行也必须是32位对齐的。