我正在使用DCMTK library
開發一個快速DICOM viewer
,我遵循this link中提供的示例。DCMTK中的findAndGetString()在標記中返回null
從API
緩衝器總是對任何標籤ID返回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」 和實際的名稱是 「患者」。
片段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學習 的目的。
name = new char [patientName.length()];應該是name = new char [patientName.length()+ 1];包括空終止符。很可能調試器只顯示字符串中的第一個字符。試試qDebug()<< name –
沒有運氣。打印50。我也收到了警告「W:DcmMetaInfo:元信息頭的組長度值不正確」,但.dcm文件可以在現有工具中正常打開。 –
@ kaviergeoffrey如果文件是匿名的,你可以分享它嗎? –