我正在开发一个快速DICOM viewer
使用方法DCMTK library
,我正在遵循此链接中提供的示例。
对于任何标签 ID,来自 的缓冲区API
总是返回 null,例如:DCM_PatientName
。但是findAndGetOFString() API
工作正常,但只返回标签的第一个字符,ASCII
这是这个 API 应该如何工作的吗?
有人可以让我知道为什么缓冲区之前的 API 是空的吗?
同样DicomImage API
也是同样的问题。
片段1:
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile(test_data_file_path.toStdString().c_str());
if (status.good())
{
OFString patientName;
char* name;
if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good())
{
name = new char[patientName.length()];
strcpy(name, patientName.c_str());
}
else
{
qDebug() << "Error: cannot access Patient's Name!";
}
}
else
{
qDebug() << "Error: cannot read DICOM file (" << status.text() << ")";
}
在上面的代码片段name
中,ASCII 值为“50”,实际名称为“PATIENT”。
片段 2:
DcmFileFormat file_format;
OFCondition status = file_format.loadFile(test_data_file_path.toStdString().c_str());
std::shared_ptr<DcmDataset> dataset(file_format.getDataset());
qDebug() << "\nInformation extracted from DICOM file: \n";
const char* buffer = nullptr;
DcmTagKey key = DCM_PatientName;
dataset->findAndGetString(key,buffer);
std::string tag_value = buffer;
qDebug() << "Patient name: " << tag_value.c_str();
在上面的代码片段中,缓冲区为空。它不读名字。
笔记:
这只是一个样本。我只是为了学习目的而玩弄 API。