Plugin DICOM

Xem hình ảnh y tế với DicomPlugin

Plugin DICOM thêm khả năng xem hình ảnh y tế vào Doconut: các tệp DICOM đa khung được hiển thị dưới dạng tổng quan hoạt ảnh, các khung riêng lẻ, hoặc cả hai. DICOM là một định dạng chỉ có plugin — nếu không có plugin này (và khả năng cấp phép của nó), các tệp .dcm không thể mở được.

Trên .NET Framework 4.7.2, các tệp DICOM được hiển thị đầy đủ — trang, khung và hoạt ảnh — nhưng siêu dữ liệu kỹ thuật (các thẻ DICOM) không khả dụng. Viewer.GetDicomMetadataAsync luôn trả về null, và yêu cầu siêu dữ liệu của widget trả lời 501 Not Implemented. Sử dụng Doconut.NET8 nếu ứng dụng của bạn cần các thẻ.

Cài đặt gói

powershell
Install-Package Doconut.NETFramework.Dicom

Giữ phiên bản gói DICOM giống với Doconut.NETFramework.

Đăng ký plugin

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

Plugin (Name: "Doconut DICOM Viewer") đăng ký các trình xem cho các phần mở rộng .dcm và .ima, được kiểm soát bởi khả năng Dicom. Nếu giấy phép không cấp quyền, DoconutHost.Initialize sẽ ném lỗi từ Application_Start và trang sẽ trả lời mọi yêu cầu bằng một 500 trống (lý do nằm trong nhật ký sự kiện Windows). Vì không có trình xem tích hợp nào xử lý các định dạng này, việc mở một tệp sẽ thất bại ngay nếu khả năng đó sau này không còn khả dụng:

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

Mở tệp DICOM

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

Các chế độ hiển thị

Các tệp DICOM đa khung có thể được trình bày theo ba cách (DicomDisplayMode):

Chế độTrang tạo raDùng cho
AnimationOnlyTrang 1 = GIF hoạt ảnh lặp lại tất cả các khungXem nhanh kiểu điện ảnh
FramesOnlyTrang 1..N = một PNG tĩnh cho mỗi khungĐiều hướng chẩn đoán khung‑khung
AnimationAndFrames (default)Trang 1 = GIF hoạt ảnh, các trang 2..N = các khung tĩnhTổng quan và chi tiết trong một tài liệu

Thời gian hoạt ảnh được điều khiển bởi AnimationFrameDelayMs (mặc định 100 ms = 10 FPS; thời gian GIF sử dụng đơn vị 10 ms) và LoopCount (0 = vòng lặp vô hạn).

Trình xem phát hiện rằng trang 1 là hoạt ảnh bằng cách gửi một yêu cầu HEAD cho nó. Trình xử lý DocImage.axd do đó phải chấp nhận HEAD trong Web.config (verb="GET,HEAD,POST", xem Cài đặt); nếu không, IIS sẽ trả lời 404 trước khi Doconut chạy và việc phát hiện hoạt ảnh sẽ không bao giờ hoạt động.

Độ phân giải

DicomConfig hiển thị ở 100 DPI mỗi trục theo mặc định. Nếu bạn không đặt HorizontalResolution/VerticalResolution một cách rõ ràng, chúng sẽ theo BaseConfig.ImageResolution khi giá trị đó được đặt, và chỉ sau đó mới quay lại 100.

csharp
// Tăng đồng đều qua thuộc tính cơ sở…
new DicomConfig { ImageResolution = 150 };

// …hoặc kiểm soát theo từng trục
new DicomConfig { HorizontalResolution = 200, VerticalResolution = 150 };

Siêu dữ liệu DICOM

csharp
var metadata = await viewer.GetDicomMetadataAsync(token);
// Trên .NET Framework, giá trị này luôn là null: trình đọc siêu dữ liệu DICOM không khả dụng cho trường hợp này
// đích. Các trang, khung và hoạt ảnh được hiển thị bình thường.

Phương thức này tồn tại trong gói này để mã chia sẻ với gói .NET 8 có thể biên dịch, nhưng việc đọc các thẻ DICOM cần một thành phần không có bản dựng cho .NET Framework. Hãy lên kế hoạch giao diện người dùng của bạn mà không có chúng — ví dụ, ẩn bảng siêu dữ liệu khi kết quả là null.

Tham chiếu cấu hình đầy đủ

Bảng thuộc tính DicomConfig đầy đủ nằm trong Cấu hình Định dạng. Trong một lựa chọn theo phần mở rộng, trường hợp DICOM trông như sau:

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

Đánh dấu và hành vi bộ nhớ

Quyết định đánh dấu trang bình thường cũng áp dụng cho đầu ra DICOM. Đối với đầu ra hoạt ảnh, mỗi khung GIF đều được dán dấu, vì vậy dấu vẫn hiển thị trong suốt quá trình phát. Một DocOptions.Watermark tùy chỉnh chỉ được sử dụng khi giấy phép cho phép các dấu nước tùy chỉnh; nó không thể thay thế dấu nước đánh giá.

Các nghiên cứu đa khung có thể tạo cả một hoạt ảnh và một trang tĩnh cho mỗi khung. AnimationAndFrames cung cấp khả năng điều hướng phong phú nhất nhưng cũng có chi phí render và bộ nhớ cao nhất — và trên một máy chủ duy nhất bộ nhớ đó thuộc về tiến trình worker của IIS. Đối với các nghiên cứu lớn:

  • sử dụng FramesOnly khi việc kiểm tra khung quan trọng hơn phát lại;
  • tránh tăng cả hai trục độ phân giải mà không đo lượng bộ nhớ;
  • đóng phiên một cách rõ ràng khi nghiên cứu không còn mở;
  • giữ CachePages bật chỉ khi việc truy cập lặp lại đáng giá các hình ảnh đã lưu.

Khắc phục sự cố

Triệu chứngKiểm tra
.dcm được báo cáo là không được hỗ trợDicomPlugin đăng ký và triển khai gói
Mọi yêu cầu trả lời một 500 trống sau khi thêm pluginGiấy phép cấp Dicom — nhật ký sự kiện Windows, nguồn ASP.NET
Chỉ một trang hiển thịNguồn có thể là khung đơn, hoặc DisplayMode là AnimationOnly
Trang 1 không hoạt ảnhTrình xử lý trong Web.config chấp nhận HEAD
Hoạt ảnh quá nhanh hoặc quá chậmAnimationFrameDelayMs; thời gian GIF sử dụng đơn vị 10 ms
Bộ nhớ tăng lên trên các tệp đa khung lớnChế độ hiển thị, độ phân giải, bộ nhớ đệm trang, và đóng phiên một cách rõ ràng
Siêu dữ liệu luôn là nullDự kiến trên gói này — xem ghi chú ở trên cùng

Trang này có hữu ích không?