卷加载器
类似于 图像加载器
,卷加载器接受一个 volumeId
和加载卷所需的其他信息,并返回一个 Promise
,该 Promise
解析为一个 Volume
。
这个 Volume
可以由一组 2D 图像(例如 imageIds
)构建,也可以来自一个 3D 数组对象(如 NIFTI
格 式)。
我们添加了 cornerstoneStreamingImageVolumeLoader
库来支持将 2D 图像(imageIds
)流式传输到 3D 卷,它是流式卷的默认卷加载器。
注册卷加载器
您可以使用 registerVolumeLoader
来定义一个在特定 scheme
上调用的卷加载器。
下面是我们 cornerstoneStreamingImageVolumeLoader
的简化代码,其中:
-
基于一组
imageIds
,我们计算卷的元数据,如:间距、原点、方向等。 -
实例化一个新的
StreamingImageVolume
StreamingImageVolume
实现了加载方法(.load
)- 它通过使用
imageLoadPoolManager
来实现加载 - 每个加载的帧(
imageId
)被放置在 3D 卷的正确切片中
-
返回一个
Volume Load Object
,它具有一个Promise
,解析为Volume
。
function cornerstoneStreamingImageVolumeLoader(
volumeId: string,
options: {
imageIds: Array<string>,
}
) {
// 基于 imageIds 计算卷的元数据
const volumeMetadata = makeVolumeMetadata(imageIds);
const streamingImageVolume = new StreamingImageVolume(
// ImageVolume 属性
{
volumeId,
metadata: volumeMetadata,
dimensions,
spacing,
origin,
direction,
scalarData,
sizeInBytes,
},
// 流式属性
{
imageIds: sortedImageIds,
loadStatus: {
loaded: false,
loading: false,
cachedFrames: [],
callbacks: [],
},
}
);
return {
promise: Promise.resolve(streamingImageVolume),
cancel: () => {
streamingImageVolume.cancelLoading();
},
};
}
registerVolumeLoader(
'cornerstoneStreamingImageVolume',
cornerstoneStreamingImageVolumeLoader
);
// 用于未提供 scheme 的任何卷
registerUnknownVolumeLoader(cornerstoneStreamingImageVolumeLoader);
如上所示,由于 cornerstoneStreamingImageVolumeLoader
已注册为 cornerstoneStreamingImageVolume
scheme,
我们可以通过传递 volumeId
来加载具有 cornerstoneStreamingImageVolume
scheme 的卷,如下所示:
const volumeId = 'cornerstoneStreamingImageVolume:myVolumeId';
const volume = await volumeLoader.createAndCacheVolume(volumeId, {
imageIds: imageIds,
});
默认未知卷加载器
默认情况下,如果找不到与 scheme 对应的 volumeLoader
,则使用 unknownVolumeLoader
。cornerstoneStreamingImageVolumeLoader
是默认的未知卷加载器。
即使您没有提供 scheme,cornerstoneStreamingImageVolumeLoader
也会默认使用。
因此,以下代码也会正常工作:
const volumeId = 'myVolumeId';
const volume = await volumeLoader.createAndCacheVolume(volumeId, {
imageIds: imageIds,
});