arrays - Qimage 到 2D 二进制数组
问题描述
我正在研究一种机制,该机制允许我从使用标志 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
可能在每条扫描线末尾添加的填充。
附注:_
在标识符的开头使用下划线是一个坏主意(例如,它可能会导致全局标识符或大写名称出现技术问题)。它也该死的丑陋。你为什么这样做?
推荐阅读
- sql - CTE 查询中的错误“无法从存储过程中选择 RDB$DB_KEY”
- kubernetes - kubernetes:错误列出节点
- javascript - 如何为邮件发送-js做setTime intervel
- android - 检测 Android APK
- pycharm - 如何在 Pycharm 中的引号内键入双括号和括号
- javascript - 无法代理调用后端 api 以获取角度
- java - HTTP 状态 500 - javax.mail.MessagingException:无法连接到 SMTP 主机:localhost,端口:25,响应:421
- r - 具有多个窗口的 R 滚动总和,按组
- java - 方案没有文件系统:hdfs
- android - 组背景在约束布局中没有改变