自定义图像加载器
在这个操作指南中,我们将向您展示如何创建一个自定义图像加载器。您应该熟悉以下核心概念:
介绍
Cornerstone 不处理图像加载。它将图像加载委托给图像加载器。Cornerstone团队已经开发了常用的图像加载器(如用于从符合wado标准的dicom服务器加载图像的CornerstoneDICOMImageLoader
,通过wado-rs
或wado-uri
加载,加载PNG和JPEG网页图像的CornerstoneWebImageLoader
以及用于加载NIFTI图像的cornerstone-nifti-image-loader
)。然而,您可能会问自己:
如何实现
如何构建一个自定义图像加载器?
实现
让我们实现一个imageLoader
,使用XMLHttpRequest
获取像素数据,并返回一个包含Promise的图像加载对象,该Promise解析为Cornerstone的image
。
步骤1:创建图像加载器
下面,我们创建一个接受imageId
并返回一个imageLoadObject
作为Promise的imageLoader
。
function loadImage(imageId) {
// 解析imageId并返回一个可用的URL(省略逻辑)
const url = parseImageId(imageId);
// 创建一个新的Promise
const promise = new Promise((resolve, reject) => {
// 在Promise构造函数内,发出图像数据请求
const oReq = new XMLHttpRequest();
oReq.open('get', url, true);
oReq.responseType = 'arraybuffer';
oReq.onreadystatechange = function (oEvent) {
if (oReq.readyState === 4) {
if (oReq.status == 200) {
// 请求成功,创建一个图像对象(省略逻辑)
// 这可能需要将图像解码为原始像素数据,确定行/列,像素间距等。
const image = createImageObject(oReq.response);
// 通过解析Promise返回图像对象
resolve(image);
} else {
// 出现错误,通过拒绝Promise返回包含错误的对象
reject(new Error(oReq.statusText));
}
}
};
oReq.send();
});
// 返回一个包含Promise的对象给cornerstone,这样它可以设置回调函数,
// 在成功/解析和失败/拒绝的情况下异步调用。
return {
promise,
};
}