ปลั๊กอิน 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 ms = 10 FPS; การกำหนดเวลา GIF ใช้หน่วย 10 ms) และ 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. จึงควรวางแผน UI ของคุณโดยไม่พึ่งพาแท็กเหล่านี้ — ตัวอย่างเช่น ซ่อนพาเนลเมตาดาต้าเมื่อผลลัพธ์เป็น 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 ms
หน่วยความจำเพิ่มขึ้นกับไฟล์หลายเฟรมขนาดใหญ่โหมดการแสดงผล, ความละเอียด, แคชหน้า, และการปิดเซสชันอย่างชัดเจน
เมตาดาต้าเป็น null เสมอคาดหวังในแพ็กเกจนี้ — ดูหมายเหตุด้านบน

หน้านี้เป็นประโยชน์หรือไม่?