תוסף DICOM

צפייה בתמונות רפואיות עם DicomPlugin

התוסף DICOM מוסיף צפייה בתמונות רפואיות ל-Doconut: קבצי DICOM מרובי‑פריימים מוצגים כתצוגה מונפשת, פריימים בודדים, או שניהם. DICOM הוא פורמט של תוסף בלבד — ללא תוסף זה (והיכולת של הרישיון שלו), קבצי .dcm אינם ניתנים לפתיחה כלל.

התקנת החבילה

bash
dotnet add package Doconut.NET6.Dicom

הפקודה ללא גרסה מתקינה את הגרסה היציבה האחרונה. כדי לקבע את התוסף לגרסה הנוכחית 26.7.0, העבר את הגרסה בנפרד:

bash
dotnet add package Doconut.NET6.Dicom --version 26.7.0

שמור על חבילת DICOM באותה גרסה כמו Doconut.NET6. מזהה החבילה הוא Doconut.NET6.Dicom; .26.7.0 מופיע רק בשם הקובץ שהורד .nupkg.

רישום התוסף

csharp
builder.Services.AddDoconut(options =>
{
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

התוסף (Name: "Doconut DICOM Viewer") רושם מציגים עבור ההרחבות .dcm ו‑.ima, המוגנות על‑ידי היכולת Dicom. חוסר או רישיון זמני בלתי מספיק נכשל בדרך כלל במהלך AddDoconut(). מכיוון שאין מציג מובנה שמטפל בפורמטים אלה, שער זמן הריצה גם הוא נכשל בחומר אם היכולת מאוחר יותר אינה זמינה:

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

רזולוציה

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 ב-.NET 6

רינדור דפי DICOM, פריימים בודדים, אנימציה, טרנספורמים, והוספת סימן מים נתמכים. מטא‑נתוני תג טכניים אינם זמינים בחבילת .NET 6 מכיוון שהקורא למטא‑נתונים אין גרסת .NET 6.

Viewer.GetDicomMetadataAsync(token) ולכן מחזיר null עבור סשן DICOM ורושם אזהרה חד‑פעמית. בקשת ה‑middleware המתאימה ?token=…&meta מחזירה HTTP 501 Not Implemented עם קוד השגיאה היציב dicom_metadata_unsupported. השתמש בחבילת .NET 8 כאשר מטא‑נתוני DICOM טכניים הם דרישה.

התייחסות מלאה לקונפיגורציה

טבלת המאפיינים המלאה של DicomConfig נמצאת ב‑הפניות API → תצורות פורמט. דוגמה ייצור מהאפליקציה הרפרנסית למתג לפי הרחבה:

csharp
".DCM" or ".IMA" => new DicomConfig { DisplayMode = DicomDisplayMode.AnimationAndFrames },

סימן מים והתנהגות זיכרון

ההחלטה הרגילה של סימן המים לדף חלה גם על פלט DICOM. עבור פלט מונפש, כל פריים GIF מתויג כך שהסימן נשאר גלוי לאורך כל ההפעלה. DocOptions.Watermark מותאם רק כאשר נתיב הרישיון מאפשר סימני מים מותאמים; הוא אינו יכול להחליף סימן מים של הערכה.

מחקרים מרובי‑פריימים יכולים לייצר גם אנימציה וגם דף סטטי לכל פריים. AnimationAndFrames מספק את הניווט העשיר ביותר אך גם את עלות הרינדור והקאש הגבוהה ביותר. עבור מחקרים גדולים:

  • השתמש ב-FramesOnly כאשר בדיקת פריימים חשובה יותר מנגינת סרטון קולנועי;
  • הימנע מהגדלת שני צירי הרזולוציה ללא מדידת זיכרון;
  • סגור את הסשן במפורש כאשר המחקר אינו פתוח יותר;
  • השאר את CachePages מופעל רק כאשר יתרונות הגישה החוזרת עולים על שמירת התמונות.

פתרון בעיות

תסמיןבדיקה
.dcm מדווח כלא נתמךרישום DicomPlugin והפצת החבילה
האתחול נכשל לאחר הוספת התוסףהרישיון הטעון מעניק Dicom
מתקבל רק דף אחדהמקור עשוי להיות פריים יחיד, או ש-DisplayMode הוא AnimationOnly
האנימציה מהירה מדי או איטית מדיAnimationFrameDelayMs; תזמון GIF יעיל משתמש ביחידות של 10 מ״ש
הזיכרון גדל בקבצים מרובי‑פריימים גדוליםמצב תצוגה, רזולוציה, מטמון דפים, וסגירת סשן במפורש
מטא‑נתונים הם null, או &meta מחזיר 501הגבלה צפויה ב-.NET 6; הרינדור אינו מושפע

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