在 C# 中读取 DICOM 文件 | C# 中的 DCM 文件查看器

在我们的 last post 中,我们向您展示了如何使用 Aspose.Medical for .NET 在 C# 中创建和保存 DICOM 文件。下一步是在 C# 中以编程方式读取保存的 DICOM 文件。在这篇博客文章中,您将学习如何使用 C# 加载、打开和读取 DICOM 文件。您可以将此指南作为创建自己 DCM 文件查看器应用程序的起点。

本文涵盖以下主题:

Aspose.Medical—DCM 文件查看器

对于加载、读取和查看 DICOM 文件,我们将使用 Aspose.Medical for .NET。它提供了一个开发者友好的 API,可以轻松读取、分析和提取 DICOM 数据。API 中 DicomFile 类内的 Dataset 对象使得处理医疗元数据变得简单。

在我们开始之前,请确保以下事项:

  • releases 下载 SDK 或通过 NuGet 包管理器使用以下命令安装包:
Install-Package Aspose.Medical
  • 您已经从之前的教程中保存了一个 DICOM 文件(例如,sample.dcm)。

如何读取 DICOM 文件:分步指南

加载 DICOM 文件

您可以将 .dcm 文件加载到 DicomFile 对象中并访问其数据集,如下所示:

// Load an existing DICOM file
DicomFile dicomFile = new DicomFile("sample.dcm");
Aspose.Medical.Dicom.Dataset dataset = dicomFile.Dataset;

从 DICOM 文件读取值

一旦文件被加载,您可以使用 DICOM 标签访问关键元数据:

string patientName = dataset.GetSingleValue<string>(Tag.PatientName);
Console.WriteLine($"Patient Name: {patientName}");

您可以根据需要以这种方式读取数百个 DICOM 标签。

访问像素数据

如果您想从 DICOM 文件中提取图像数据,请使用:

byte[] pixelData = dataset.GetValues<byte>(Tag.PixelData).ToArray(); // Use ToArray() for display
Console.WriteLine($"Pixel Data Length: {pixelData.Length} bytes");

您可以使用此字节数组来渲染图像或将其输入到进一步的处理算法中。

如果标签丢失,则检索默认值

当标签是可选的时,您可能想提供后备值。使用 GetSingleValueOrDefault 来检索数据,或者在标签缺失时返回默认值。

string institutionName = dataset.GetSingleValueOrDefault<string>(Tag.InstitutionName, "Unknown");

Console.WriteLine("Institution Name: " + institutionName);

这在标签存在不可预测的情况下是理想的。

从多值标签中检索特定值

如果一个标签包含多个值,但你只需要一个,使用 GetValue 并结合索引或范围表达式。

double imagePositionX = dataset.GetValue<double>(Tag.ImagePositionPatient, ^1);

Console.WriteLine("First Image Position X: " + imagePositionX);

注意:如果缺少标签,此方法将抛出异常。

DCM 文件查看器:完整代码

这里是一个完整的工作代码,展示了如何加载 DICOM 文件并读取可用标签的信息:

// 加载保存的 DICOM 文件
Aspose.Medical.Dicom.DicomFile dicomFile = DicomFile.Open("sample.dcm");
Aspose.Medical.Dicom.Dataset dataset = dicomFile.Dataset;

// 阅读与患者相关的信息
string patientID = dataset.GetSingleValue<string>(Tag.PatientID);
string patientName = dataset.GetSingleValue<string>(Tag.PatientName);
string birthDateStr = dataset.GetSingleValue<string>(Tag.PatientBirthDate);
DateTime birthDate = DateTime.ParseExact(birthDateStr, "yyyyMMdd", null);

// 阅读研究信息
string studyDateStr = dataset.GetSingleValue<string>(Tag.StudyDate);
DateTime studyDate = DateTime.ParseExact(studyDateStr, "yyyyMMdd", null);
string studyID = dataset.GetSingleValue<string>(Tag.StudyID);

// 读取图像元数据
int rows = dataset.GetSingleValue<int>(Tag.Rows);
int columns = dataset.GetSingleValue<int>(Tag.Columns);
int bitsAllocated = dataset.GetSingleValue<int>(Tag.BitsAllocated);
string modality = dataset.GetSingleValue<string>(Tag.Modality);
byte[] pixelData = dataset.GetValues<byte>(Tag.PixelData).ToArray(); // Use ToArray() for display

// 显示信息
Console.WriteLine($"Patient ID: {patientID}");
Console.WriteLine($"Patient Name: {patientName}");
Console.WriteLine($"Birth Date: {birthDate:yyyy-MM-dd}");
Console.WriteLine($"Study Date: {studyDate:yyyy-MM-dd}");
Console.WriteLine($"Study ID: {studyID}");
Console.WriteLine($"Image Rows: {rows}");
Console.WriteLine($"Image Columns: {columns}");
Console.WriteLine($"Bits Allocated: {bitsAllocated}");
Console.WriteLine($"Modality: {modality}");
Console.WriteLine($"Pixel Data Length: {pixelData.Length} bytes");

Output

Patient ID: JD123456
Patient Name: John Doe
Birth Date: 1985-07-20
Study Date: 2025-07-07
Study ID: Study001
Image Rows: 256
Image Columns: 256
Bits Allocated: 8
Modality: OT
Pixel Data Length: 65536 bytes

试试看

您可以使用任何 .dcm 文件,不论是使用 Aspose 生成的还是从成像设备接收的。只需加载文件并读取标签,您就准备好了。

获取免费许可证

您可以 获取免费临时许可证 来探索 Aspose.Medical for .NET 的全部功能,毫无限制。这很快速、简单,只需一分钟。

DICOM 文件查看器: 免费资源

您可以通过这些宝贵资源增强您的开发体验:

结论

在这篇文章中,我们已经看到了如何在 C# 中读取和提取 DICOM 文件中的数据。作为开发人员,您可以使用 Aspose.Medical for .NET 来处理 DICOM (.dcm) 文件,并构建您自己的 DCM 文件查看器应用程序。

如果您在处理 DICOM 文件时有任何问题或遇到问题,请随时 ask on the Aspose Forums。支持团队始终准备提供帮助。

查看也可以