DICOM 插件

使用 DicomPlugin 查看医学图像

DICOM 插件为 Doconut 添加了医学图像查看功能:多帧 DICOM 文件可以渲染为动画概览、单独帧或两者兼有。DICOM 是一种 仅插件格式 —— 没有此插件(及其许可证功能),.dcm 文件根本无法打开。

在 .NET Framework 4.7.2 上,DICOM 文件能够完整渲染 —— 页面、帧和动画 —— 但技术元数据(DICOM 标签)不可用。 Viewer.GetDicomMetadataAsync 总是返回 null,且小部件的元数据请求返回 501 Not Implemented。如果您的应用程序需要这些标签,请使用 Doconut.NET8。

安装包

powershell
Install-Package Doconut.NETFramework.Dicom

保持 DICOM 包的版本与 Doconut.NETFramework 相同。

注册插件

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

插件(Name:"Doconut DICOM Viewer")为 .dcm 和 .ima 扩展名注册查看器,并受 Dicom 能力的限制。如果许可证未授予此能力,DoconutHost.Initialize 会在 Application_Start 中抛出异常,站点会对每个请求返回空的 500(原因记录在 Windows 事件日志中)。由于没有内置查看器能够处理这些格式,如果该能力随后不可用,打开文件将直接失败:

text
LicenseException: This document type requires the 'Dicom' plugin license.

打开 DICOM 文件

csharp
var token = await viewer.OpenDocumentAsync(path, new DicomConfig
{
    DisplayMode = DicomDisplayMode.AnimationAndFrames
});

显示模式

多帧 DICOM 文件可以通过三种方式呈现(DicomDisplayMode):

模式生成的页面适用场景
AnimationOnly第 1 页 = 循环所有帧的动画 GIF快速电影式回顾
FramesOnly第 1..N 页 = 每帧一个静态 PNG帧逐帧的诊断导航
AnimationAndFrames (默认)第 1 页 = 动画 GIF, 第 2..N 页 = 静态帧在同一文档中提供概览和细节

动画时长由 AnimationFrameDelayMs(默认 100 ms = 10 FPS;GIF 时长使用 10 ms 单位)和 LoopCount(0 = 永久循环)控制。

查看器通过对第 1 页发送 HEAD 请求来判断其是否为动画。因此 DocImage.axd 处理程序必须在 Web.config 中接受 HEAD(verb="GET,HEAD,POST",参见 安装);如果未配置,IIS 会在 Doconut 运行前返回 404,导致动画检测失效。

分辨率

DicomConfig 默认以每轴 100 DPI 渲染。如果未显式设置 HorizontalResolution/VerticalResolution,它们会遵循已设置的 BaseConfig.ImageResolution,否则回退到 100。

csharp
// Uniform bump via the base property…
new DicomConfig { ImageResolution = 150 };

// …or per-axis control
new DicomConfig { HorizontalResolution = 200, VerticalResolution = 150 };

DICOM 元数据

csharp
var metadata = await viewer.GetDicomMetadataAsync(token);
// On .NET Framework this is always null: the DICOM metadata reader is not available for this
// target. Pages, frames and animation render normally.

此方法存在于该包中,以便与 .NET 8 包共享的代码能够编译,但读取 DICOM 标签需要一个没有 .NET Framework 构建的组件。请在没有标签的情况下规划用户界面,例如在结果为 null 时隐藏元数据面板。

完整配置参考

完整的 DicomConfig 属性表位于 格式配置。在按扩展名选择时,DICOM 情况如下:

csharp
case ".DCM": case ".IMA":
    return new DicomConfig { DisplayMode = DicomDisplayMode.AnimationAndFrames };

水印与内存行为

普通页面水印决策同样适用于 DICOM 输出。对于动画输出,每个 GIF 帧都会加上水印,因此在播放期间水印始终可见。仅当许可证允许自定义水印时,才会使用自定义 DocOptions.Watermark,它不能替代评估水印。

多帧研究可以同时生成动画和每帧的静态页面。AnimationAndFrames 提供最丰富的导航体验,但也带来最高的渲染和内存开销——这些内存属于 IIS 工作进程。在大型研究中:

  • 当帧检查比播放更重要时使用 FramesOnly;
  • 在未测量内存之前避免同时提升两个分辨率轴;
  • 当研究不再打开时显式关闭会话;
  • 仅在重复访问值得保留图像时才开启 CachePages。

故障排查

症状检查
.dcm 被报告为不受支持DicomPlugin 注册和包部署
添加插件后每个请求返回空的 500许可证已授予 Dicom —— Windows 事件日志,源 ASP.NET
仅出现一页源可能是单帧,或 DisplayMode 为 AnimationOnly
第 1 页未动画Web.config 中的处理程序接受 HEAD
动画太快或太慢AnimationFrameDelayMs;GIF 时间使用 10 ms 单位
大型多帧文件导致内存增长显示模式、分辨率、页面缓存以及显式会话关闭
元数据始终为 null此包中预期如此 —— 请参阅顶部说明

此页面对您有帮助吗?