我试图在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));
...
,结果很好:
现在我想做同样的事情,但是有一堆2D图像。我目前被阻止在需要将图像转换为QVector的位置,以便为方法setTextureData(QVector<uchar> *data)
提供信息。
在documentation of the QCustom3DVolume课程中写道:
3D纹理由一堆2D子纹理定义。每个子纹理 必须具有相同的大小(textureDataWidth * textureHeight)和 堆栈的深度由textureDepth属性定义。数据 在每个2D纹理中,与具有相同格式的QImage数据相同, 所以QImage :: bits()可以用来为每个子纹理提供数据。
没有更多细节,我也不明白如何实施。指向图像的指针只能提供一个图层(子纹理),那么如何在QVector中获取整个卷?我唯一的选择是在图像上循环并复制QVector中的字节吗?