DicomReader

DicomReader

DICOM简述

https://www.jianshu.com/p/758fa8c22474

读取文件

void DicomReader::readFile(const std::string& t_filePath)
{
    m_filePath = t_filePath;
    // 通过DcmFileFormat读取文件,bad检测是否存在数据集
    m_file = std::make_unique<DcmFileFormat>();
    if (m_file->loadFile(t_filePath.c_str()).bad())
    {
        m_file.release();
        m_dataSet = nullptr;
        throw std::runtime_error("Cannot open file!");
    }
    // ok则获取DcmDataset
    m_dataSet = m_file->getDataset();
}

获取Patient,Study等类

m_dataSet->findAndGetOFStringArray(tagKey, result);

// 获取Patient(其他model类原理相同)
std::unique_ptr<Patient> DicomReader::getReadPatient() const
{
    auto tempPatient = std::make_unique<Patient>();
    // getTagFromDataSet函数获取tag信息
    const auto age = getTagFromDataSet(DCM_PatientAge);
    tempPatient->setAge(age.empty() ? 0 : std::stoi(age));
    tempPatient->setBirthDate(getTagFromDataSet(DCM_PatientBirthDate));
    tempPatient->setID(getTagFromDataSet(DCM_PatientID));
    tempPatient->setName(getTagFromDataSet(DCM_PatientName));
    return tempPatient;
}

// 这里获取tag信息
std::string DicomReader::getTagFromDataSet(const DcmTagKey& tagKey) const
{
    try
    {
        OFString result;
        // 这个是获取tag的函数:findAndGetOFStringArray
        m_dataSet->findAndGetOFStringArray(tagKey, result);
        return result.c_str();
    }
    catch (std::exception& ex)
    {
        //todo log exception
        [[maybe_unused]] const auto* const what = ex.what();
        return {};
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值