QImage::Format_Mono 为通常所讲的位图模式, QT中本提供了 QBitmap 来作为位图相关的应用, 但其最大弊端在于无法操作图片中 pixel 本身或说相关方法太过繁琐。
Mono 由于 1 bit 存储 1 pixel , 其在内存中即 8 pixel 1 个字节存放(还有 4 字节对齐)。 故存放策略又分 MSB(means the first pixel will be stored in most significant bit of the first byte:高位在前,理解为大端)与LSB(小端)模式。
Format_Mono 默认为大端模式, 可用默认的 pixel() 和 setPixel() 方法直接操作(当然代价庞大)。
1 int getPixel(const QImage img, const int col, const int row) 2 { 3 const uchar uMask = 0x80 >> (col % 8); 4 return img.scanLine(row)[col / 8] & uMask ? 1 : 0; 5 }
上述代码摘自 stackoverflow 上一回复,个人觉得更易于理解 Mono 格式的数据存储方式