افزونه 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 خالی پاسخ می‌دهد (دلیل آن در لاگ رویداد ویندوز است). چون هیچ ویوئر داخلی‌ای این فرمت‌ها را پشتیبانی نمی‌کند، باز کردن یک فایل در صورت عدم دسترس بودن این قابلیت به‌صورت کامل شکست می‌خورد:

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صفحه ۱ = GIF انیمیشنی که تمام قاب‌ها را حلقه می‌زندمرور سریع سینمایی
FramesOnlyصفحات ۱..N = یک PNG ثابت برای هر قابناوبری تشخیصی قاب به قاب
AnimationAndFrames (default)صفحه ۱ = GIF انیمیشنی، صفحات ۲..N = قاب‌های ثابتنمای کلی و جزئیات در یک سند

زمان‌بندی انیمیشن توسط AnimationFrameDelayMs کنترل می‌شود (به‌صورت پیش‌فرض ۱۰۰ میلی‌ثانیه = ۱۰ فریم بر ثانیه؛ زمان‌بندی GIF از واحدهای ۱۰ میلی‌ثانیه استفاده می‌کند) و LoopCount (0 = حلقه بی‌نهایت).

ویوئر تشخیص می‌دهد که صفحه ۱ انیمیشنی است با ارسال یک درخواست HEAD برای آن. به‌همین دلیل هندلر DocImage.axd باید در Web.config HEAD را بپذیرد (verb="GET,HEAD,POST", به نصب); بدون این تنظیم، IIS قبل از اجرای Doconut پاسخ 404 می‌دهد و تشخیص انیمیشن هرگز کار نمی‌کند.

وضوح

DicomConfig به‌صورت پیش‌فرض با ۱۰۰ DPI برای هر محور رندر می‌شود. اگر HorizontalResolution/VerticalResolution را به‌صورت صریح تنظیم نکنید، این مقادیر از BaseConfig.ImageResolution پیروی می‌کنند (در صورتی که تنظیم شده باشد) و فقط در غیر این صورت به ۱۰۰ باز می‌گردند.

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 را می‌دهد — لاگ رویداد ویندوز، منبع ASP.NET
فقط یک صفحه ظاهر می‌شودمنبع ممکن است تک‑قاب باشد، یا DisplayMode برابر AnimationOnly باشد
صفحه ۱ انیمیشن نمی‌شودهندلر در Web.config HEAD را می‌پذیرد
انیمیشن خیلی سریع یا خیلی کند استAnimationFrameDelayMs؛ زمان‌بندی GIF از واحدهای ۱۰ میلی‌ثانیه استفاده می‌کند
حافظه در فایل‌های بزرگ چند‑قابلی رشد می‌کندحالت نمایش، وضوح، کش صفحات، و بستن صریح جلسه
متادیتا همیشه null استدر این بسته انتظار می‌رود — به یادداشت بالایی مراجعه کنید

آیا این صفحه مفید بود؟