DCDicom
安装
DCDicom 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'DCDicom'
作者
Lasse Porsch, [email protected]
许可证
DCDicom 计划在 MIT 许可证下提供。详细信息请参阅 LICENSE 文件。
使用
创建DICOM对象
您可以从URL、数据或任何InputStream中创建一个DicomObject实例。
do {
let dicomObjectFromURL = try DicomObject(url: dicomURL)
let dicomObjectFromData = try DicomObject(data: dicomData)
let dicomObjectFromInputStream = try DicomObject(inputStream: dicomInputStream)
} catch {
print("Something went wrong! Error: \(error)")
}
读取数据元素
DICOM是由数据元素组成分层数据结构。一旦创建了一个DicomObject实例,您可以通过遍历dataElements
直接访问其所有根级数据元素。
dicomObject.dataElements.forEach {
print("Found DataElement with \($0.tag)")
}
也可以通过索引访问特定的数据元素
let sopInstanceUidDataElement = dicomObject[0x00080018]!
访问类型值
虽然每个数据元素通常都有一个类型为Data的原始值,并且大多数数据元素都有这个原始值的字符串表示形式,但您还可以“检查”数据元素的“实际”数据类型并获取Swift类型值。数据元素的值表示用于此目的。但是,只有当它在DICOM对象中明确提及时,它才是可用的。如果Dicom对象使用隐式值表示,您必须根据相应的DICOM一致性声明和特定Dicom对象的语义手动将原始数据转换为类型值。
guard let vr = dataElement.vr else {
print("Implicit Value Representation. Cannot determine value type without more context")
}
switch vr {
case .FD: // Double
if let doubleValue = (dataElement as! DicomDataElementFD).value {
print(String(format: "Double value = %f", doubleValue))
} else {
print("Empty value")
}
case .FL: // Float
if let floatValue = (dataElement as! DicomDataElementFL).value {
print(String(format: "Float value = %f", floatValue))
} else {
print("Empty value")
}
case .DA: // Date
if let dateValue = (dataElement as! DicomDataElementDA).value {
let formatter = DateFormatter()
formatter.dateStyle = .full
print(String(format: "Date value = %@", formatter.string(from: dateValue)))
} else {
print("Empty value")
}
default:
break
}