Qimage 到 2D 二进制数组

Qimage to 2D binary array

我正在研究一种机制,该机制允许我从使用标志 QImage::FormatMono 创建的 QImage 中获取基于 constBits() 的二进制数据填充的二维数组。

我希望正方形应该是这样的:

1111
1001
1001
1111

但我得到的是这个:

0001
0010
0100
1000

我不太清楚如何一点一点地使用内存或如何使用 MSB 压缩字符串。

这是我用来获取 1 个像素的值并将其表示为二进制的代码:

uint ConnectedChecker::pixel(const QImage& img, const int x, const int y) const
{
    const uchar mask = 0x80 >> (x % 8);
    return img.constBits()[x*y / 8] & mask ? 1 : 0;
}

循环,我用来填充数组:

int* _in;

for(uint i = 0; i < _rowCount; ++i) {
   for(uint j = 0; j < _columnCount; ++j) {
       *((_in + i*_columnCount) + j) = pixel(image, i, j);
   }
}

公式不正确,您需要类似

的公式
int a = y*img.bytesPerLine();
return (img.constBits()[a + x/8] >> (x & 7)) & 1;

需要 bytesPerLine() 成员函数来考虑可能在每个扫描行末尾添加的 QImage 填充。

旁注:在标识符的开头使用下划线 _ 是个坏主意(例如,它可能导致全局标识符或大写名称出现技术问题)。也太丑了吧你为什么要这样做?