Wtyczka DICOM

Wyświetl obrazy medyczne przy użyciu DicomPlugin

Wtyczka DICOM dodaje przeglądanie obrazów medycznych do Doconut: pliki DICOM wieloklatkowe renderują się jako animowany przegląd, pojedyncze klatki lub oba jednocześnie. DICOM jest formatem wyłącznie wtyczkowym — bez tej wtyczki (i jej możliwości licencyjnej) pliki .dcm nie mogą być otwarte w ogóle.

W .NET Framework 4.7.2 pliki DICOM renderują się w pełni — strony, klatki i animacja — ale techniczne metadane (tagi DICOM) nie są dostępne. Viewer.GetDicomMetadataAsync zawsze zwraca null, a żądanie metadanych widgetu odpowiada 501 Not Implemented. Użyj Doconut.NET8, jeśli Twoja aplikacja potrzebuje tagów.

Zainstaluj pakiet

powershell
Install-Package Doconut.NETFramework.Dicom

Utrzymuj pakiet DICOM w tej samej wersji co Doconut.NETFramework.

Zarejestruj wtyczkę

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

Wtyczka (Name: "Doconut DICOM Viewer") rejestruje przeglądarki dla rozszerzeń .dcm i .ima, zabezpieczone możliwością Dicom. Jeśli licencja jej nie przyznaje, DoconutHost.Initialize rzuca wyjątek z Application_Start, a witryna odpowiada na każde żądanie pustym kodem 500 (przyczyna znajduje się w dzienniku zdarzeń Windows). Ponieważ żaden wbudowany podgląd nie obsługuje tych formatów, otwarcie takiego pliku kończy się niepowodzeniem, jeśli później możliwość stanie się niedostępna:

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

Otwieranie pliku DICOM

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

Tryby wyświetlania

Pliki DICOM wieloklatkowe mogą być prezentowane na trzy sposoby (DicomDisplayMode):

TrybGenerowane stronyZastosowanie
AnimationOnlyStrona 1 = animowany GIF powtarzający wszystkie klatkiSzybki przegląd filmowy
FramesOnlyStrony 1..N = jeden statyczny PNG na klatkęDiagnostyczna nawigacja klatka po klatce
AnimationAndFrames (domyślnie)Strona 1 = animowany GIF, strony 2..N = statyczne klatkiPrzegląd i szczegóły w jednym dokumencie

Czas trwania animacji jest kontrolowany przez AnimationFrameDelayMs (domyślnie 100 ms = 10 FPS; czas GIF używa jednostek 10 ms) oraz LoopCount (0 = nieskończona pętla).

Podgląd ustala, że strona 1 jest animowana, wysyłając żądanie HEAD. Obsługa DocImage.axd musi więc akceptować HEAD w Web.config (verb="GET,HEAD,POST", zobacz Instalacja); bez tego IIS zwraca 404 zanim Doconut uruchomi się i wykrywanie animacji nigdy nie działa.

Rozdzielczość

DicomConfig renderuje z domyślną rozdzielczością 100 DPI na oś. Jeśli nie ustawisz jawnie HorizontalResolution/VerticalResolution, dziedziczą one wartość z BaseConfig.ImageResolution, gdy jest ustawiona, a dopiero potem wracają do 100.

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

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

Metadane 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.

Metoda istnieje w tym pakiecie, aby kod współdzielony z pakietem .NET 8 się kompilował, ale odczyt tagów DICOM wymaga komponentu, który nie ma wersji dla .NET Framework. Zaplanuj interfejs użytkownika bez nich — na przykład ukryj panel metadanych, gdy wynik jest null.

Pełna referencja konfiguracji

Pełna tabela właściwości DicomConfig znajduje się w Konfiguracje formatów. W wyborze per‑rozszerzenie przypadek DICOM wygląda tak:

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

Znak wodny i zachowanie pamięci

Decyzja o znaku wodnym dla zwykłej strony ma również zastosowanie do wyjścia DICOM. Dla wyjścia animowanego każdy klatka GIF jest znakowana, więc znak pozostaje widoczny przez cały odtwarzanie. Niestandardowy DocOptions.Watermark jest używany tylko wtedy, gdy licencja zezwala na własne znaki wodne; nie może zastąpić znaku wodnego wersji ewaluacyjnej.

Badania wieloklatkowe mogą generować zarówno animację, jak i jedną statyczną stronę na klatkę. AnimationAndFrames zapewnia najbogatszą nawigację, ale także najwyższy koszt renderowania i pamięci — a na pojedynczym serwerze pamięć ta należy do procesu roboczego IIS. Dla dużych badań:

  • użyj FramesOnly, gdy inspekcja klatek jest ważniejsza niż odtwarzanie;
  • unikaj zwiększania obu osi rozdzielczości bez pomiaru pamięci;
  • zamknij sesję wyraźnie, gdy badanie nie jest już otwarte;
  • pozostaw CachePages włączone tylko wtedy, gdy powtarzany dostęp jest wart zachowanych obrazów.

Rozwiązywanie problemów

ObjawSprawdź
.dcm jest zgłaszany jako nieobsługiwanyRejestracja DicomPlugin i wdrożenie pakietu
Każde żądanie odpowiada pustym 500 po dodaniu wtyczkiLicencja przyznaje Dicom — dziennik zdarzeń Windows, źródło ASP.NET
Wyświetla się tylko jedna stronaŹródło może być jednowymiarowe, lub DisplayMode jest ustawiony na AnimationOnly
Strona 1 nie animuje sięObsługa w Web.config akceptuje HEAD
Animacja jest zbyt szybka lub zbyt wolnaAnimationFrameDelayMs; czas GIF używa jednostek 10 ms
Pamięć rośnie przy dużych plikach wieloklatkowychTryb wyświetlania, rozdzielczość, pamięć podręczna stron i wyraźne zamknięcie sesji
Metadane są zawsze nullOczekiwane w tym pakiecie — zobacz notatkę na początku

Czy ta strona była pomocna?