Плагин DICOM

Просмотр медицинских изображений с DicomPlugin

Плагин DICOM добавляет просмотр медицинских изображений в Doconut: многокадровые файлы DICOM отображаются как анимированный обзор, отдельные кадры или и то, и другое. DICOM — это формат только для плагинов — без этого плагина (и его лицензии) файлы .dcm нельзя открыть вовсе.

Установка пакета

bash
dotnet add package Doconut.NETStandard.Dicom

Команда без указания версии устанавливает последнюю стабильную версию. Чтобы зафиксировать плагин на текущем выпуске 26.8.0, укажите версию отдельно:

bash
dotnet add package Doconut.NETStandard.Dicom --version 26.8.0

Сохраняйте пакет DICOM той же версии, что и Doconut.NETStandard. Идентификатор пакета — Doconut.NETStandard.Dicom; .26.8.0 появляется только в имени загруженного файла .nupkg.

Регистрация плагина

csharp
builder.Services.AddDoconut(options =>
{
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

Плагин (Name: "Doconut DICOM Viewer") регистрирует просмотрщики для расширений .dcm и .ima, ограниченные возможностью Dicom. Отсутствие или недостаточное непостоянное право обычно приводит к ошибке во время AddDoconut(). Поскольку ни один встроенный просмотрщик не обрабатывает эти форматы, ограничение времени выполнения также жёстко блокирует работу, если возможность позже становится недоступной:

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 (default)Страница 1 = анимированный GIF, страницы 2..N = статические кадрыОбзор + детали в одном документе

Время анимации контролируется параметром AnimationFrameDelayMs (по умолчанию 100 мс = 10 FPS; гранулярность GIF — единицы по 10 мс) и LoopCount (0 = бесконечный цикл).

Разрешение

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 в .NET Standard

Отображение страниц DICOM, отдельные кадры, анимация, трансформации и водяные знаки поддерживаются. Технические метаданные тегов недоступны в пакете .NET Standard, поскольку считыватель метаданных поставляется только в сборке .NET 8.

Поэтому Viewer.GetDicomMetadataAsync(token) возвращает null для сеанса DICOM и записывает одноразовое предупреждение. Соответствующий запрос middleware ?token=…&meta возвращает HTTP 501 Not Implemented с постоянным кодом ошибки dicom_metadata_unsupported. Используйте пакет .NET 8, когда требуются технические метаданные DICOM.

Полный справочник конфигурации

Полная таблица свойств DicomConfig находится в API Reference → Format Configs. Пример из производственного приложения, показывающий переключение по расширениям:

csharp
".DCM" or ".IMA" => new DicomConfig { DisplayMode = DicomDisplayMode.AnimationAndFrames },

Водяной знак и поведение памяти

Обычное решение о водяном знаке на странице также применяется к выводу DICOM. Для анимированного вывода каждый кадр GIF помечается, чтобы знак оставался видимым на протяжении воспроизведения. Пользовательский DocOptions.Watermark используется только когда лицензия позволяет кастомные водяные знаки; он не может заменить оценочный водяной знак.

Многокадровые исследования могут генерировать как анимацию, так и одну статическую страницу на каждый кадр. AnimationAndFrames обеспечивает наиболее богатую навигацию, но также имеет наибольшие затраты на рендеринг и кэш. Для больших исследований:

  • используйте FramesOnly, когда важнее проверка отдельных кадров, чем кинематографическое воспроизведение;
  • избегайте увеличения обеих осей разрешения без измерения потребления памяти;
  • закрывайте сеанс явно, когда исследование больше не открыто;
  • оставляйте CachePages включённым только тогда, когда выгода от повторного доступа превышает затраты на хранение изображений.

Устранение неполадок

СимптомПроверка
.dcm отмечен как неподдерживаемыйРегистрация DicomPlugin и развертывание пакета
Сбой при запуске после добавления плагинаЗагруженная лицензия предоставляет Dicom
Отображается только одна страницаИсточник может быть однокадровым, или DisplayMode установлен в AnimationOnly
Анимация слишком быстрая или медленнаяAnimationFrameDelayMs; эффективное время GIF использует единицы по 10 мс
Память растёт при работе с большими многокадровыми файламиРежим отображения, разрешение, кэш страниц и явное закрытие сеанса
Метаданные null, или &meta возвращает 501Ожидаемое ограничение этого пакета; рендеринг не затронут

Была ли эта страница полезной?