zoukankan      html  css  js  c++  java
  • DCMTK读取DICOM文件头信息的三种方法

    Howto: Load File Meta-Header

    Here's an example that shows how to load the File Meta Information Header of a DICOMfile without reading the dataset. This could be useful if you are e.g. only interested in theSOP Class UID and Transfer Syntax UID of the file.

    There are three different approaches:

    1. Use the loadFile() method of the DcmMetaInfo class.

    2. Use the loadFile() method of the DcmFileFormat class with read mode ERM_metaOnly.

    3. Use the read() method of the DcmFileFormat class in order to successively load the meta-header and the dataset.

    The third approach allows for reading the dataset only if certain criteria (based on the data elements in the meta-header) are met. Please note that in this case the same input stream is used and that the meta-header is only read once.

    Source Code

    #include "dcmtk/config/osconfig.h"
    #include "dcmtk/dcmdata/dctk.h"
    #include "dcmtk/dcmdata/dcistrmf.h"   int main(int argc, char *argv[])
    {
        OFCondition status;   /* approach 1 */
        DcmMetaInfo metainfo;
        status = metainfo.loadFile("test.dcm");
        if (status.good())
        {
            OFString sopClassUID, xferUID;
            if (metainfo.findAndGetOFString(DCM_MediaStorageSOPClassUID, sopClassUID).good())
                COUT << "SOP Class UID: " << sopClassUID << OFendl;
            if (metainfo.findAndGetOFString(DCM_TransferSyntaxUID, xferUID).good())
                COUT << "Transfer Syntax UID: " << xferUID << OFendl;
            metainfo.print(COUT);
        }   /* approach 2 */
        DcmFileFormat fileformat;
        status = fileformat.loadFile("test.dcm", EXS_Unknown, EGL_noChange, DCM_MaxReadLength, ERM_metaOnly);
        if (status.good())
        {
            OFString sopClassUID, xferUID;
            if (fileformat.getMetaInfo()->findAndGetOFString(DCM_MediaStorageSOPClassUID, sopClassUID).good())
                COUT << "SOP Class UID: " << sopClassUID << OFendl;
            if (fileformat.getMetaInfo()->findAndGetOFString(DCM_TransferSyntaxUID, xferUID).good())
                COUT << "Transfer Syntax UID: " << xferUID << OFendl;
            fileformat.print(COUT);
        }   /* approach 3 */
        fileformat.clear();
        DcmInputFileStream fileStream("test.dcm");
        status = fileStream.status();
        if (status.good())
        {
            /* first, read meta-header */
            fileformat.setReadMode(ERM_metaOnly);
            fileformat.transferInit();
            status = fileformat.read(fileStream);
            if (status.good())
            {
                OFString sopClassUID, xferUID;
                if (fileformat.getMetaInfo()->findAndGetOFString(DCM_MediaStorageSOPClassUID, sopClassUID).good())
                    COUT << "SOP Class UID: " << sopClassUID << OFendl;
                if (fileformat.getMetaInfo()->findAndGetOFString(DCM_TransferSyntaxUID, xferUID).good())
                    COUT << "Transfer Syntax UID: " << xferUID << OFendl;
                /* then read dataset if certain criteria are met */
                if (sopClassUID == UID_SecondaryCaptureImageStorage)
                {
                    fileformat.setReadMode(ERM_autoDetect);
                    status = fileformat.read(fileStream);
                    if (status.good())
                    {
                        fileformat.print(COUT);
                    }
                }
            }
            fileformat.transferEnd();
        }   return 0;
    }
    Note

    Please note that the above sample code requires DCMTK 3.5.5 (20100608 or newer).

  • 相关阅读:
    【转】微服务架构模式简介
    大话微服务
    Howto: 在ArcGIS10中将地图文档(mxd文档)批量保存到之前版本
    在Google Maps中导出KML文件
    ASP.NET(c#) 日期选择控件的另一种实现方法
    asp.net中的时间日期选择控件
    JAVA实现Excel导入/导出【转】
    将Gridview中的数据出到excel或word中
    asp.net导出excel并弹出保存提示框
    在ASP.NET中将GridView数据导出到Word、Excel
  • 原文地址:https://www.cnblogs.com/bayzhang/p/5484321.html
Copyright © 2011-2022 走看看