• 18771阅读
  • 13回复

[提问]如何用QImage显示uchar*数据[已解决] [复制链接]

上一主题 下一主题
离线xlttap
 

只看楼主 倒序阅读 楼主  发表于: 2011-03-16
我有一个数据:uchar* data, data的大小为[n2*n1], 其中 n2=5000, n1=1001
现在要用QImage如何画出这块数据?且如何计算这张image的宽度和高度?
请指教。


重要说明:QImage::Format_ARGB32格式,它的像素是采用BGRA方式存储,
也就是说一个像素点的顺序是:B G R A, 所以构造一个张image时,它的uchar* 应该是4*width*height的大小,
而不是width*height,然后对每个像素的分量赋相应的RGB分量就行。
[ 此帖被xlttap在2011-03-17 16:29重新编辑 ]
我简单我快乐
离线xlttap

只看该作者 1楼 发表于: 2011-03-16
我跪等啊。。。。没有人知道吗?
我简单我快乐
离线dbzhang800

只看该作者 2楼 发表于: 2011-03-16
首先,你必须说明你这堆数据是什么东西,对应多大的图片。

其次,如果它和QImage的某格式的内部数据一致,那么构造相应的QImage即可。

如果你这是 8位Index 索引图像,可以看看(c++的更简单)

http://hi.baidu.com/cyclone/blog/item/af6919d8d097ad3b32fa1c7e.html
[ 此帖被dbzhang800在2011-03-16 16:59重新编辑 ]
离线xlttap

只看该作者 3楼 发表于: 2011-03-16
由于数据很大,要把数据的维数转换成image相应的宽度和高度。我现在就是不知道如何把数据的维数转换成image相应的宽度和高度。 如上面的数据维数是5000*1001,如何对应图片的宽度和高度呢?
我简单我快乐
离线roywillow

只看该作者 4楼 发表于: 2011-03-16
没看懂是什么意思
我用过好像是个叫loadFromData的函数,是用来将一个png文件中的数据直接读取出来,然后用这个函数来初始化图像
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 5楼 发表于: 2011-03-16
引用第3楼xlttap于2011-03-16 17:03发表的  :
由于数据很大,要把数据的维数转换成image相应的宽度和高度。我现在就是不知道如何把数据的维数转换成image相应的宽度和高度。 如上面的数据维数是5000*1001,如何对应图片的宽度和高度呢?

你把因果搞反了吧? 一堆数据过来,你自己都不知道对应的图片大小,那就无解了
离线xlttap

只看该作者 6楼 发表于: 2011-03-16
那我说下我的意思吧:
1. 我有一块数据是float** fdata[n2][n1];  [二维数组],   先转换成uchar* data[n2*n1]; [一维数组]
2. 计算适合的image的宽度和高度  // 这步不知道如何做
3. 利用插值interpBytes(n2,n1, data, width, height), 得到一个新的uchar* data_new
4. 用data_new去构造一张image
5.画出这张image
我简单我快乐
离线xlttap

只看该作者 7楼 发表于: 2011-03-16
引用第5楼dbzhang800于2011-03-16 17:16发表的  :
你把因果搞反了吧? 一堆数据过来,你自己都不知道对应的图片大小,那就无解了


因果没错,所以这是关键的一步,难住我了。
因为在做插值前,要先算出image的宽度和高度。但是我不知道如何做。
其实就是要做一个将数据维数转换成image宽度和高度的算法。
我简单我快乐
离线dbzhang800

只看该作者 8楼 发表于: 2011-03-16
引用第7楼xlttap于2011-03-16 17:26发表的  :
因果没错,所以这是关键的一步,难住我了。
因为在做插值前,要先算出image的宽度和高度。但是我不知道如何做。
其实就是要做一个将数据维数转换成image宽度和高度的算法。

因果没翻的话,就是缺少必要信息了。
谁提供的这些数据,你就去找谁你需要的信息就行了吧 ?
离线xlttap

只看该作者 9楼 发表于: 2011-03-16
我得认真想想,信息没有缺少
我简单我快乐
离线dbzhang800

只看该作者 10楼 发表于: 2011-03-16
引用第6楼xlttap于2011-03-16 17:21发表的  :
那我说下我的意思吧:
1. 我有一块数据是float** fdata[n2][n1];  [二维数组],   先转换成uchar* data[n2*n1]; [一维数组]
2. 计算适合的image的宽度和高度  // 这步不知道如何做
3. 利用插值interpBytes(n2,n1, data, width, height), 得到一个新的uchar* data_new
4. 用data_new去构造一张image
.......

还是看不懂你的意思。

1. 你的二维数组是 n2 X n1, 期待对应图片不是 n2Xn1 么?
离线xlttap

只看该作者 11楼 发表于: 2011-03-16
引用第10楼dbzhang800于2011-03-16 18:09发表的  :
还是看不懂你的意思。
1. 你的二维数组是 n2 X n1, 期待对应图片不是 n2Xn1 么?

不是,如果是n2*n1的话,图片尺寸就太大了。
所以要重新计算图片的大小。
n2*n1是实际数据的大小,把转换成屏幕坐标,和合适的尺寸画出来。
我简单我快乐
离线wxj120bw

只看该作者 12楼 发表于: 2011-03-16
QImage QImage::fromData ( const uchar * data, int size, const char * format = 0 ) 看这个能实现吗
离线roywillow

只看该作者 13楼 发表于: 2011-03-16
最初那个二维数组的数据,是纯粹的图片像素信息还是包括了这个图片的其他的信息?要知道png神马的图片格式不只是像素信息哦
如果是单纯的像素信息,那么就需要你自己了解这些信息是什么结构,像素的信息是怎么个存储进去的,然后只要自己想办法用适当的方法读取出来就好了
如果还包括了其他的信息,是不是里面就包括了图像大小的数据?

所以似乎告诉我们提供给你的数组究竟是什么东西最好……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个