Я работаю над механизмом, который позволит мне получить двумерный массив, заполненный двоичными данными на основе constBits() из QImage, созданного с флагом QImage::FormatMono.
Я ожидаю, что квадрат должен быть примерно таким:
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);
}
}