找回密码
 立即注册
收起左侧

关于QImage的bits()的问题

3
回复
9503
查看
[复制链接]
累计签到:21 天
连续签到:1 天
来源: 2018-4-17 18:52:31 显示全部楼层 |阅读模式
1Qter豆
我现在是用的一张色深为1的图片,10*10,具体的十六进制如图
然后我使用下面的代码,为什么出来的数据不太对的上?
uchar* data = image.bits();    for(int i = 0;i != 102;i++)    {        if((data + i) != NULL)            qDebug()<<*(data + i);        else            break;    }
我的理解是,bits()这个api直接就忽略了bmp头部和颜色表那些,直接读取这个单色bmp的像素,一个字节存储8个像素的值

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

bits() 结果的结构布局跟它的 format() 是相关的,但是跟图片文件的格式基本是无关的,所以和bmp文件的数据不一样是正常的。也就是说 QImage 在从图片文件加载后,会根据它的 format 转换成特定的内部格式。如果你关心的是像素值的话,就不应该直接使用 bits(),或者转换成 Format_RGB32 再利用 qRed(), qGreen(), qBlue(), qRgb() 之类的来访问像素。如果你不关心像素的具体值(比如我以前做的一个图像加密算法,只是打乱数据的顺 ...
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-4-17 18:52:32 显示全部楼层
bits() 结果的结构布局跟它的 format() 是相关的,但是跟图片文件的格式基本是无关的,所以和bmp文件的数据不一样是正常的。也就是说 QImage 在从图片文件加载后,会根据它的 format 转换成特定的内部格式。如果你关心的是像素值的话,就不应该直接使用 bits(),或者转换成 Format_RGB32 再利用 qRed(), qGreen(), qBlue(), qRgb() 之类的来访问像素。如果你不关心像素的具体值(比如我以前做的一个图像加密算法,只是打乱数据的顺序),直接用 bits()倒也无所谓。
回复

使用道具 举报

累计签到:21 天
连续签到:1 天
2018-4-17 18:54:14 显示全部楼层
C:\Users\chenyuanhong\Desktop\image.png
这个是输出的结果,向各位qt爱好者请教!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:21 天
连续签到:1 天
2018-4-19 08:28:03 显示全部楼层
miroox 发表于 2018-4-17 20:07
bits() 结果的结构布局跟它的 format() 是相关的,但是跟图片文件的格式基本是无关的,所以和bmp文件的数据 ...

好的,因为要用到,所以还是用了其他方法。因为是色深为1的,所以也没用pixel和setpixel了,只能直接硬着头皮读bmp数据了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了