افزونه DICOM
مشاهده تصاویر پزشکی با DicomPlugin
افزونه DICOM امکان مشاهده تصاویر پزشکی را به Doconut اضافه میکند: فایلهای DICOM چند‑قابلی بهصورت یک نمای انیمیشنی، قابهای جداگانه یا هر دو رندر میشوند. DICOM یک فرمت فقط‑افزونه است — بدون این افزونه (و قابلیت مجوز آن)، فایلهای .dcm بههیچوجه قابل باز شدن نیستند.
نصب بسته
dotnet add package Doconut.NETStandard.Dicomدستور بدون نسخهٔ مشخص، آخرین نسخهٔ پایدار را نصب میکند. برای قفل کردن افزونه به نسخهٔ ۲۶.۸.۰ فعلی، نسخه را بهصورت جداگانه پاس دهید:
dotnet add package Doconut.NETStandard.Dicom --version 26.8.0دستهٔ DICOM را با همان نسخهٔ Doconut.NETStandard نگه دارید. شناسهٔ بسته Doconut.NETStandard.Dicom است؛ عدد .26.8.0 فقط در نام فایل .nupkg دانلود شده ظاهر میشود.
ثبت افزونه
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});افزونه (Name: "Doconut DICOM Viewer") برای پسوندهای .dcm و .ima ویورهایی را ثبت میکند که توسط قابلیت Dicom محدود شدهاند. یک مجوز موقت یا ناکافی معمولاً در زمان AddDoconut() شکست میخورد. چون هیچ ویور داخلی این فرمتها را پشتیبانی نمیکند، در صورت عدم دسترس بودن قابلیت، در زمان اجرا نیز بهصورت سختگیرانه شکست میگیرد:
LicenseException: This document type requires the 'Dicom' plugin license.باز کردن یک فایل DICOM
var token = await viewer.OpenDocumentAsync(path, new DicomConfig
{
DisplayMode = DicomDisplayMode.AnimationAndFrames
});حالتهای نمایش
فایلهای DICOM چند‑قابلی میتوانند به سه روش (DicomDisplayMode) ارائه شوند:
| حالت | صفحات تولید شده | موارد استفاده |
|---|---|---|
AnimationOnly | صفحه ۱ = GIF انیمیشنی که تمام قابها را حلقه میزند | مرور سریع سینمایی |
FramesOnly | صفحات ۱..N = یک PNG ثابت برای هر قاب | ناوبری تشخیصی قاب به قاب |
AnimationAndFrames (default) | صفحه ۱ = GIF انیمیشنی، صفحات ۲..N = قابهای ثابت | نمای کلی + جزئیات در یک سند |
زمانبندی انیمیشن توسط AnimationFrameDelayMs (پیشفرض ۱۰۰ ms = ۱۰ FPS؛ گرانولاریته GIF بر پایه واحدهای ۱۰ ms است) و LoopCount (0 = حلقه بینهایت) کنترل میشود.
وضوح
DicomConfig بهصورت پیشفرض با ۱۰۰ DPI برای هر محور رندر میشود. ویژگیهای وضوح یک زنجیرهٔ بازگشتی دارند که باید بدانید: اگر HorizontalResolution/VerticalResolution را بهصورت صریح تنظیم نکنید، این مقادیر از BaseConfig.ImageResolution پیروی میکنند (در صورتی که تنظیم شده باشد) و تنها در صورت عدم وجود، به ۱۰۰ باز میگردند.
// 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) برای یک جلسه DICOM مقدار null برمیگرداند و یک هشدار یکبار ثبت میکند. درخواست میدلور ?token=…&meta مربوطه پاسخ HTTP 501 Not Implemented با کد خطای ثابت dicom_metadata_unsupported میدهد. وقتی متادیتای فنی DICOM یک نیاز است، از بستهٔ .NET 8 استفاده کنید.
مرجع کامل تنظیمات
جدول کامل ویژگیهای DicomConfig در API Reference → Format Configs قرار دارد. یک مثال تولیدی از سوئیچ بر پایهٔ پسوند در برنامهٔ مرجع:
".DCM" or ".IMA" => new DicomConfig { DisplayMode = DicomDisplayMode.AnimationAndFrames },واترمارک و رفتار حافظه
تصمیم واترمارک صفحهٔ معمولی نیز برای خروجی DICOM اعمال میشود. برای خروجی انیمیشنی، هر قاب GIF بهصورت مهر میشود تا علامت در طول پخش قابل مشاهده بماند. DocOptions.Watermark سفارشی فقط زمانی استفاده میشود که مسیر مجوز اجازهٔ واترمارکهای سفارشی را بدهد؛ نمیتواند جایگزین واترمارک ارزیابی شود.
مطالعات چند‑قاب میتوانند هم انیمیشن و هم یک صفحهٔ ثابت برای هر قاب تولید کنند. AnimationAndFrames غنیترین ناوبری را فراهم میکند اما بالاترین هزینهٔ رندر و کش را دارد. برای مطالعات بزرگ:
- از
FramesOnlyاستفاده کنید وقتی بررسی قاب مهمتر از پخش سینمایی است؛ - از افزایش هر دو محور وضوح بدون اندازهگیری حافظه خودداری کنید؛
- جلسه را بهصورت صریح بسته کنید وقتی مطالعه دیگر باز نیست؛
CachePagesرا فقط زمانی فعال نگه دارید که مزایای دسترسی مکرر بیش از هزینهٔ نگهداری تصاویر باشد.
عیبیابی
| علامت | بررسی |
|---|---|
.dcm بهعنوان پشتیبانینشده گزارش میشود | ثبت DicomPlugin و استقرار بسته |
| راهاندازی پس از افزودن افزونه شکست میخورد | مجوز بارگذاریشده Dicom را اعطا میکند |
| فقط یک صفحه ظاهر میشود | منبع ممکن است تک‑قاب باشد، یا DisplayMode برابر AnimationOnly باشد |
| انیمیشن خیلی سریع یا خیلی آهسته است | AnimationFrameDelayMs؛ زمانبندی مؤثر GIF از واحدهای ۱۰ میلیثانیه استفاده میکند |
| حافظه در فایلهای چند‑قاب بزرگ افزایش مییابد | حالت نمایش، وضوح، کش صفحات، و بسته شدن صریح جلسه |
متادیتا null است، یا &meta مقدار 501 برمیگرداند | محدودیت پیشبینیشده این بسته؛ رندرینگ تحتتأثیر نیست |
آیا این صفحه مفید بود؟