ملحق 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 (افتراضي)الصفحة 1 = GIF متحرك، الصفحات 2..N = إطارات ثابتةنظرة عامة وتفصيل في مستند واحد

يتم التحكم في توقيت الرسوم المتحركة بواسطة AnimationFrameDelayMs (الافتراضي 100 مللي ثانية = 10 إطار في الثانية؛ توقيت 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متوقع في هذه الحزمة — انظر الملاحظة في الأعلى

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