在我的应用程序中,我必须从一组图像(MRC图像)中加载volumedata,并将像素数据保存在内存中(图像灰度,因此每像素一个字节).
我的开发环境是QT框架,MinGW for Windows和GCC for Linux.
目前,我使用一个简单的数据结构来存储volumedata:
unsigned char *volumeData;
并做一个巨大的分配如下.
volumeData=new unsigned char[imageXsize * imageYsize * numofImages];
以下是在给定平面中访问图像数据的重要方法,例如
unsigned char* getXYPlaneSlice(int z_value);
unsigned char* getYZPlaneSlice(int x_value);
unsigned char* getZXPlaneSlice(int y_value);
利用我简单的数据结构,很容易实现上述方法.
但是,未来我们可能需要采用2000x2000x1000(〜3.7Gb)的卷大小.目前的数据结构将无法处理这么大的数据.
>如何避免碎片化?现在,即使使用1000x1000x200数据,应用程序崩溃也会给bad_alloc.
为此更改数据结构的最佳方法是什么?我应该使用每个块大小为100mb的链接列表.
>此外,用户应该能够对音量数据执行一些图像处理滤波器,并且还应该能够重置为原始像素值.
这意味着我应该保留两个卷数据.
随着目前的实现它的喜欢.
unsigned char * volumeDataOriginal;
unsigned char * volumeDataCurrent;
所以用2000x2000x1000数据范围,它将使用大约8Gb(4Gb的每个卷).
但是在Win32中,地址空间是4GB.如何解决?我应该用64位应用程序?
编辑:
这是我的应用程序的快照
基本上,我加载音量数据(从图像集,从MRC格式.etc),并显示在不同的平面观察者(XY,YX,YZ.Image显示XY平面观察器).我需要保持以上3个数据访问方法来显示特定平面中的图像.使用滑块条用户可以更改要在所选平面中显示的图像)
提前致谢.