新浪微博
腾讯微博
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
帮助
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
首页
论坛
Qt下载
作品展
群组
个人中心
捐赠、管理与开发
邮件订阅
帖子
文章
日志
用户
版块
群组
帖子
搜索
QTCN开发网
>
Qt基础编程
>
Rgb24 、Gray8 转换问题
发帖
回复
返回列表
新帖
5471
阅读
3
回复
Rgb24 、Gray8 转换问题
[复制链接]
上一主题
下一主题
离线
icyrat
UID:93046
注册时间
2010-03-07
最后登录
2019-09-18
在线时间
59小时
发帖
62
搜Ta的帖子
精华
0
金钱
650
威望
72
贡献值
0
好评度
62
访问TA的空间
加好友
用道具
新手上路
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
楼主
发表于: 2011-11-23
关键词:
QByteArray
ba;
我要把
jpeg
图片转换成8位灰度
图片
,然后得到灰度的纯
数据
,然后再将8位灰度的纯数据构造一个
QImage
保存成jpeg图片,其实就是:
jpg->gray 8->得到纯数据(处理这些数据) ->保存成jpg
我的
问题
是,有的图片可以走通,但是有的图片不可以,可能跟图片尺寸、数据位对齐有关系,但是我不明白,那个明白啊。
下面的代码对于有的分辨率可以 但是有的则不行,可以的有:1832 * 1120、1024 * 768、640 * 480 、1600 * 960
不可以的有:1600 * 1200 、1131 * 707 、500 * 500 、1936 * 2592
谁知道为什么????
错误
信息:
图片:未命名.jpg
QVector
<
QRgb
>
colorTable
;
for
(
int
k
=
0
;
k
<
256
;++
k
)
{
colorTable
.
push_back
(
qRgb
(
k
,
k
,
k
)
);
}
QImage
m
(
"r1.jpg"
);
// 要转换的24rgb
m
=
convertToGray
(
m
);
//实现代码在下面 把24位转8位灰度
m
.
setColorTable
(
colorTable
);
//将灰度数据写入
文件
QFile
bb
(
"r1.dat"
);
bb
.
open
(
QIODevice
::
WriteOnly
);
ba
=
(
const
char
*)
m
.
bits
();
//得到灰度数据
bb
.
write
(
ba
);
bb
.
close
();
QFile
hhh
(
"r1.dat"
);
hhh
.
open
(
QIODevice
::
ReadOnly
);
ba
=
hhh
.
readAll
();
//利用灰度数据构造jpg图片
QImage
iii
;
iii
=
QImage
((
uchar
*)
ba
.
data
(),
1832
,
1120
,
1832
,
QImage
::
Format_Indexed8
);
iii
.
setColorTable
(
colorTable
);
iii
.
save
(
"r1con.jpg"
);
//转为灰度图
QImage
Widget
::
convertToGray
(
QImage
rgbImage
)
{
QSize
size
=
rgbImage
.
size
();
QImage
grayImage
(
size
,
QImage
::
Format_Indexed8
);
int
width
=
size
.
width
();
int
height
=
size
.
height
();
uchar
*
rgbImageData
=
rgbImage
.
bits
();
uchar
*
grayImageData
=
grayImage
.
bits
();
/*
if(rgbImage.isGrayscale())
{
qDebug()<<"Image
is
already
gray!Conversion
stopped!";
return
rgbImage;
}
*/
//若width不是4的倍数,会自动添加字节,使之对齐到4的倍数
int
realWidth1
=
rgbImage
.
bytesPerLine
();
int
realWidth2
=
grayImage
.
bytesPerLine
();
uchar
*
backup1
=
rgbImageData
;
uchar
*
backup2
=
grayImageData
;
//直接取用green绿色分量值作为gray索引值
for
(
int
i
=
0
;
i
<
height
;
i
++,
rgbImageData
=
backup1
+
realWidth1
*
i
,
grayImageData
=
backup2
+
realWidth2
*
i
)
{
for
(
int
j
=
0
;
j
<
width
;
j
++)
{
*
grayImageData
=*(
rgbImageData
+
1
);
rgbImageData
+=
4
;
grayImageData
++;
}
}
QVector
<
QRgb
>
grayColorTable
;
uint
rgb
=
0
;
for
(
int
i
=
0
;
i
<
256
;
i
++)
{
grayColorTable
.
append
(
rgb
);
rgb
+=
0x00010101
;
//r,g,b值分别加1,a值不变,见QRgb说明
}
grayImage
.
setColorTable
(
grayColorTable
);
return
grayImage
;
}
r1.jpg r1con.jpg
图片:r1.jpg
图片:r1con.jpg
[attachment=7190][attachment=7190]
共
条评分
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
roywillow
UID:97396
注册时间
2010-05-15
最后登录
2021-09-20
在线时间
5071小时
发帖
2897
搜Ta的帖子
精华
5
金钱
29175
威望
2924
贡献值
2
好评度
2916
访问TA的空间
加好友
用道具
精灵王
加关注
发消息
只看该作者
1楼
发表于: 2011-11-23
不好意思代码好像乱了哦
共
条评分
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
回复
举报
离线
icyrat
UID:93046
注册时间
2010-03-07
最后登录
2019-09-18
在线时间
59小时
发帖
62
搜Ta的帖子
精华
0
金钱
650
威望
72
贡献值
0
好评度
62
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
2楼
发表于: 2011-11-23
还有这种情况(貌似是dat文件数据不全):
图片:未命名.jpg
共
条评分
回复
举报
离线
roywillow
UID:97396
注册时间
2010-05-15
最后登录
2021-09-20
在线时间
5071小时
发帖
2897
搜Ta的帖子
精华
5
金钱
29175
威望
2924
贡献值
2
好评度
2916
访问TA的空间
加好友
用道具
精灵王
加关注
发消息
只看该作者
3楼
发表于: 2011-11-23
Re:Rgb24 、Gray8 转换问题
那个dat文件是留作他用的是吗?
至于获取每一行的数据,我更倾向于用scanLine,之后将返回的值强制转换为QRgb*,就能顺利获得每个像素的值了,并且不用考虑大小端问题,但是好像得考虑一下存储的格式问题。你的代码中似乎还要计算每一行的起始,感觉这里可能会比较容易出问题。
qGray可以直接获取灰度值。
另外如果不是很特别需要效率的话,用pixel()获取每个像素值应该会更方便。
提一个建议,就是传递QImage的时候用const QImage&
共
条评分
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
回复
举报
发帖
回复
返回列表
http://www.qtcn.org/bbs
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限100 字节
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
关闭
补充发布信息
验证码:
发 布
隐藏
快速跳转
站务及资讯
网站公告
新闻资讯
Qt官方发布
网站管理
Qt应用及资源
Qt 作品展
Qt代码秀
Qt应用版
Qt技术讨论区
Qt安装与发布
Qt中文处理
Qt基础编程
Qt QML开发
Qt嵌入式开发
Qt移动平台开发
其它技术开发讨论区
Qt图书专区
《C++ GUI Qt 4编程》(第2版)专栏
《Qt高级编程》专栏
《零基础学Qt4编程》专栏
《Qt设计模式》(第2版) 图书专栏
Python Qt GUI快速编程
Qt项目开发区
天池项目
Qt开放平台开发库
Qt版百度云笔记
机械CAD
Qt文档计划
QTCN网站系统开发
扇贝词典
非活跃项目区
社区中心
帖子回收站(Trash)
招聘、求职、供求、广告等
休闲娱乐
关闭
关闭
选中
1
篇
全选