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 位对齐的。
我有点绝望。我需要在 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 位对齐的。