DCMTK library
を使用してDICOM viewer
を素早く開発しており、this linkで提供されている例に従っています。DCMTKのfindAndGetString()は、タグのnullを返します
API
のバッファは、常にタグIDにNULLを返します。たとえば、DCM_PatientName
です。 findAndGetOFString() API
は正常に動作しますが、ASCII
というタグの最初の文字のみを返します。このAPIはどのように動作するのでしょうか?
誰かが、以前のAPIのバッファが空である理由を教えてもらえますか?
また、DicomImage API
も同じ問題です。
スニペット1:上記のスニペット
name
で
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() << ")";
}
は、 "50" のASCII値を有し、実際の名前は、 "患者" です。
スニペット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の周りを遊んでいます。
名前=新しいchar [patientName.length()];名前=新しいchar [patientName.length()+ 1]である必要があります。ヌルターミネータを含める。デバッガが文字列の最初の文字だけを表示している可能性があります。試してくださいqDebug()<< name –
いいえ運がいいです。 50を印刷します。私はまた、この警告 "W:DcmMetaInfo:メタ情報ヘッダーのグループ長が間違った値を持っていますが、.dcmファイルが既存のツールでうまく開きます。 –
@kaviergeoffreyファイルを匿名化すると共有できますか? –