ملحق 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 إطار في الثانية؛ دقة 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 وتُسجل تحذيرًا لمرة واحدة. طلب الوسيط ?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؛ العرض غير متأثر

هل كانت هذه الصفحة مفيدة؟