如何从图像构建QCustom3DVolume?

时间:2018-03-14 08:49:40

标签: c++ qt visualization

我试图在Qt中将一堆图像渲染为一个卷。

作为一个起点,我修改了"体积对象示例"并使用这段代码使用运行时生成的数据集(高斯球):

...

VData = new QVector<uchar>(VSize.x()*VSize.y()*VSize.z());

for (int z=0; z<VSize.z(); z++) {
    for (int y=0; y<VSize.y(); y++) {
        for (int x=0; x<VSize.x(); x++) {
            unsigned char v = 255*exp(-((x-VSize.x()/2)*(x-VSize.x()/2) + (y-VSize.y()/2)*(y-VSize.y()/2) + (z-VSize.z()/2)*(z-VSize.z()/2))/200);
            (*VData)[x + y*VSize.x() + z*VSize.x()*VSize.y()] = v;
        }
    }
}

Volume = new QCustom3DVolume;
Volume->setTextureData(new QVector<uchar>(*VData));

...

,结果很好:

enter image description here

现在我想做同样的事情,但是有一堆2D图像。我目前被阻止在需要将图像转换为QVector的位置,以便为方法setTextureData(QVector<uchar> *data)提供信息。

documentation of the QCustom3DVolume课程中写道:

  

3D纹理由一堆2D子纹理定义。每个子纹理   必须具有相同的大小(textureDataWidth * textureHeight)和   堆栈的深度由textureDepth属性定义。数据   在每个2D纹理中,与具有相同格式的QImage数据相同,   所以QImage :: bits()可以用来为每个子纹理提供数据。

没有更多细节,我也不明白如何实施。指向图像的指针只能提供一个图层(子纹理),那么如何在QVector中获取整个卷?我唯一的选择是在图像上循环并复制QVector中的字节吗?

1 个答案:

答案 0 :(得分:0)

好的,我刚刚在文档中发现了setSubTextureData方法,这正是我所寻找的。