תוסף 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 ריק (הסיבה נמצאת ביומן האירועים של Windows). מכיוון שאין מציג מובנה שמטפל בפורמטים אלה, פתיחה של קובץ כזה נכשלת לחלוטין אם היכולת מאוחר יותר אינה זמינה:

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 = לולאה אינסופית).

המציג מגלה שהדף 1 מונפש על‑ידי שליחת בקשת HEAD עבורו. ולכן המטפל DocImage.axd חייב לקבל HEAD ב‑Web.config (verb="GET,HEAD,POST", ראה התקנה); ללא זאת, IIS מחזיר 404 לפני שה‑Doconut פועל וזיהוי האנימציה לעולם לא פועל.

רזולוציה

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

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 — יומן אירועי Windows, מקור ASP.NET
מתקבל רק דף אחדהמקור עשוי להיות פריים יחיד, או ש‑DisplayMode הוא AnimationOnly
דף 1 אינו מונפשהמתאם ב‑Web.config מקבל HEAD
האנימציה מהירה מדי או איטיתAnimationFrameDelayMs; זמן ה‑GIF משתמש ביחידות של 10 מ״ש
הזיכרון גדל בקבצים מרובי‑פריימים גדוליםמצב תצוגה, רזולוציה, מטמון דפים, וסגירת סשן מפורשת
מטא‑נתונים תמיד nullצפוי בחבילה זו — ראה את ההערה בראש

האם דף זה היה מועיל?