栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Dicom文件读取

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Dicom文件读取

一. 如下图: Dicom数据集结构

 

 

 

 

 

 示例使用: (1)开发工具: qt5.14.2; 注意代码中的日志打印qDebug,(2)代码本身与QT无关方便移植

 DicomFile *pData = new DicomFile;
 pData->read_diconde("D://10_work//09_nengyu//20_DICONDE//w001.DICONDE");

//1280: dicode文件宽, 1024是行,注意log日志有
 QImage image = QImage(pData->m_p_buf_pixel_data,1280,1024,QImage::Format_Grayscale16);

二.编码:常量部份

#ifndef GLOBAL_CONST_H
#define GLOBAL_CONST_H

///常量↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#define DATA_LENGTH_256                                         256
#define BOOL_FALSE                                              0
#define BOOL_TRUE                                               1
#define INT_0                                                   0
#define INT_1                                                   1
#define INT_16                                                  16
#define INT_30                                                  30
#define INT_100                                                 100
#define INT_255                                                 255
#define INT_256                                                 256
#define INT_700                                                 700
#define INT_1000                                                1000
#define INT_1024                                                1024
#define STRING_EMPTY                                            ""
#define PATH_D                                                  "D:\DIYE\"
///常量↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

///协议文档:<>↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#define DICOM_D_0x44                                            0x44        //D:DICOM文件格式是以DICM打头的
#define DICOM_I_0x49                                            0x49        //I:DICOM文件格式是以DICM打头的
#define DICOM_C_0x43                                            0x43        //C:DICOM文件格式是以DICM打头的
#define DICOM_M_0x4D                                            0x4D        //M:DICOM文件格式是以DICM打头的

#define DICOM_TAG_0200_0000                                     "dicom_tag_0200_0000"
#define DICOM_KEYWORD_0200_0000                                 "file_meta_information_group_length"
#define DICOM_TAG_0200_0001                                     "dicom_tag_0200_0001"
#define DICOM_KEYWORD_0200_0001                                 "private_information_creator_uid"
#define DICOM_TAG_0200_0100                                     "dicom_tag_0200_0100"
#define DICOM_KEYWORD_0200_0100                                 "file_meta_information_version"
#define DICOM_TAG_0200_0200                                     "dicom_tag_0200_0200"
#define DICOM_KEYWORD_0200_0200                                 "media_storage_sop_class_uid"
#define DICOM_TAG_0200_0201                                     "dicom_tag_0200_0201"
#define DICOM_KEYWORD_0200_0201                                 "private_information"
#define DICOM_TAG_0200_0300                                     "dicom_tag_0200_0300"
#define DICOM_KEYWORD_0200_0300                                 "media_storage_sop_instance_uid​"
#define DICOM_TAG_0200_1000                                     "dicom_tag_0200_1000"
#define DICOM_KEYWORD_0200_1000                                 "transfer_syntax_uid"
#define DICOM_TAG_0200_1200                                     "dicom_tag_0200_1200"
#define DICOM_KEYWORD_0200_1200                                 "implementation_class_uid​"
#define DICOM_TAG_0200_1300                                     "dicom_tag_0200_1300"
#define DICOM_KEYWORD_0200_1300                                 "implementation_version_name"
#define DICOM_TAG_0200_1600                                     "dicom_tag_0200_1600"
#define DICOM_KEYWORD_0200_1600                                 "source_application_entity_title"

#define DICOM_TAG_0800_0000                                     "dicom_tag_0800_0000"
#define DICOM_KEYWORD_0800_0000                                 ""                      //空注释
#define DICOM_TAG_0800_0500                                     "dicom_tag_0800_0500"
#define DICOM_KEYWORD_0800_0500                                 "specific_character_set"
#define DICOM_TAG_0800_0800                                     "dicom_tag_0800_0800"
#define DICOM_KEYWORD_0800_0800                                 "image_type"
#define DICOM_TAG_0800_1200                                     "dicom_tag_0800_1200"
#define DICOM_KEYWORD_0800_1200                                 "instance_creation_date​"
#define DICOM_TAG_0800_1300                                     "dicom_tag_0800_1300"
#define DICOM_KEYWORD_0800_1300                                 "instance_creation_time​"
#define DICOM_TAG_0800_1600                                     "dicom_tag_0800_1600"
#define DICOM_KEYWORD_0800_1600                                 "sop_class_uid​"
#define DICOM_TAG_0800_1800                                     "dicom_tag_0800_1800"
#define DICOM_KEYWORD_0800_1800                                 "sop_instance_uid"
#define DICOM_TAG_0800_2000                                     "dicom_tag_0800_2000"
#define DICOM_KEYWORD_0800_2000                                 "study_date"
#define DICOM_TAG_0800_2100                                     "dicom_tag_0800_2100"
#define DICOM_KEYWORD_0800_2100                                 "series_date"
#define DICOM_TAG_0800_2200                                     "dicom_tag_0800_2200"
#define DICOM_KEYWORD_0800_2200                                 "acquisition_date"
#define DICOM_TAG_0800_2300                                     "dicom_tag_0800_2300"
#define DICOM_KEYWORD_0800_2300                                 "content_date"
#define DICOM_TAG_0800_2A00                                     "dicom_tag_0800_2A00"
#define DICOM_KEYWORD_0800_2A00                                 "acquisition_dateTime"
#define DICOM_TAG_0800_3000                                     "dicom_tag_0800_3000"
#define DICOM_KEYWORD_0800_3000                                 "study_time"
#define DICOM_TAG_0800_3100                                     "dicom_tag_0800_3100"
#define DICOM_KEYWORD_0800_3100                                 "series_time"
#define DICOM_TAG_0800_3200                                     "dicom_tag_0800_3200"
#define DICOM_KEYWORD_0800_3200                                 "acquisition_time"
#define DICOM_TAG_0800_3300                                     "dicom_tag_0800_3300"
#define DICOM_KEYWORD_0800_3300                                 "content_time"
#define DICOM_TAG_0800_6000                                     "dicom_tag_0800_6000"
#define DICOM_KEYWORD_0800_6000                                 "modality"
#define DICOM_TAG_0800_6100                                     "dicom_tag_0800_6100"
#define DICOM_KEYWORD_0800_6100                                 "modality_in_study"
#define DICOM_TAG_0800_6400                                     "dicom_tag_0800_6400"
#define DICOM_KEYWORD_0800_6400                                 "conversion_type"
#define DICOM_TAG_0800_0102                                     "dicom_tag_0800_0102"
#define DICOM_KEYWORD_0800_0102                                 "timezone_offset_from_utc"
#define DICOM_TAG_0800_3E10                                     "dicom_tag_0800_3E10"
#define DICOM_KEYWORD_0800_3E10                                 ""                          //空注释

#define DICOM_TAG_1000_1000                                     "dicom_tag_1000_1000"
#define DICOM_KEYWORD_1000_1000                                 "patient_name"
#define DICOM_TAG_1000_2000                                     "dicom_tag_1000_2000"
#define DICOM_KEYWORD_1000_2000                                 "patient_id"

#define DICOM_TAG_1800_1410                                     "dicom_tag_1800_1410"
#define DICOM_KEYWORD_1800_1410                                 "time_of_secondary_capture"
#define DICOM_TAG_1800_5010                                     "dicom_tag_1800_5010"
#define DICOM_KEYWORD_1800_5010                                 "spatial_resolution"
#define DICOM_TAG_1800_0213                                     "dicom_tag_1800_0213"
#define DICOM_KEYWORD_1800_0213                                 "scan_length"

#define DICOM_TAG_2000_0D00                                     "dicom_tag_2000_0D00"
#define DICOM_KEYWORD_2000_0D00                                 "study_instance_uid"
#define DICOM_TAG_2000_0E00                                     "dicom_tag_2000_0E00"
#define DICOM_KEYWORD_2000_0E00                                 "series_instance_uid"
#define DICOM_TAG_2000_1000                                     "dicom_tag_2000_1000"
#define DICOM_KEYWORD_2000_1000                                 "study_id"
#define DICOM_TAG_2000_1100                                     "dicom_tag_2000_1100"
#define DICOM_KEYWORD_2000_1100                                 "series_number"
#define DICOM_TAG_2000_1300                                     "dicom_tag_2000_1300"
#define DICOM_KEYWORD_2000_1300                                 "instance_number"

#define DICOM_TAG_2800_0200                                     "dicom_tag_2800_0200"
#define DICOM_KEYWORD_2800_0200                                 "samples_per_pixel"
#define DICOM_TAG_2800_0400                                     "dicom_tag_2800_0400"
#define DICOM_KEYWORD_2800_0400                                 "photometric_interpretation"
#define DICOM_TAG_2800_0800                                     "dicom_tag_2800_0800"
#define DICOM_KEYWORD_2800_0800                                 "number_of_frames​"
#define DICOM_TAG_2800_0600                                     "dicom_tag_2800_0600"
#define DICOM_KEYWORD_2800_0600                                 "planar_configuration"
#define DICOM_TAG_2800_1000                                     "dicom_tag_2800_1000"
#define DICOM_KEYWORD_2800_1000                                 "rows"
#define DICOM_TAG_2800_1100                                     "dicom_tag_2800_1100"
#define DICOM_KEYWORD_2800_1100                                 "columns"
#define DICOM_TAG_2800_3000                                     "dicom_tag_2800_3000"
#define DICOM_KEYWORD_2800_3000                                 "pixel_spacing"
#define DICOM_TAG_2800_0001                                     "dicom_tag_2800_0001"
#define DICOM_KEYWORD_2800_0001                                 ""                         //空注释
#define DICOM_TAG_2800_0101                                     "dicom_tag_2800_0101"
#define DICOM_KEYWORD_2800_0101                                 ""                         //空注释
#define DICOM_TAG_2800_0201                                     "dicom_tag_2800_0201"
#define DICOM_KEYWORD_2800_0201                                 "high_bit"
#define DICOM_TAG_2800_0301                                     "dicom_tag_2800_0301"
#define DICOM_KEYWORD_2800_0301                                 "pixel_representation​"
#define DICOM_TAG_2800_5010                                     "dicom_tag_2800_5010"
#define DICOM_KEYWORD_2800_5010                                 "window_center"
#define DICOM_TAG_2800_5110                                     "dicom_tag_2800_5110"
#define DICOM_KEYWORD_2800_5110                                 "window_width"
#define DICOM_TAG_2800_1221                                     "dicom_tag_2800_1221"
#define DICOM_KEYWORD_2800_1221                                 "lossy_image_compression_radio"

#define DICOM_TAG_2900_1010                                     "dicom_tag_2900_1010"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_2900_1010                                 ""
#define DICOM_TAG_2900_1110                                     "dicom_tag_2900_1110"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_2900_1110                                 ""
#define DICOM_TAG_2900_1210                                     "dicom_tag_2900_1210"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_2900_1210                                 ""
#define DICOM_TAG_2900_1310                                     "dicom_tag_2900_1310"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_2900_1310                                 ""
#define DICOM_TAG_2900_1410                                     "dicom_tag_2900_1410"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_2900_1410                                 ""
#define DICOM_TAG_2900_2410                                     "dicom_tag_2900_2410"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_2900_2410                                 ""
#define DICOM_TAG_2900_2510                                     "dicom_tag_2900_2510"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_2900_2510                                 ""

#define DICOM_TAG_7000_1A03                                     "dicom_tag_7000_1A03"
#define DICOM_KEYWORD_7000_1A03                                 "Fiducial_uid​"

#define DICOM_TAG_0A30_2B02                                     "dicom_tag_0A30_2B02"
#define DICOM_KEYWORD_0A30_2B02                                 "source_strength"

#define DICOM_TAG_0050_1000                                     "dicom_tag_0050_1000"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_0050_1000                                 ""
#define DICOM_TAG_0050_0030                                     "dicom_tag_0050_0030"       //整个文档没有找到0029组号
#define DICOM_KEYWORD_0050_0030                                 ""

#define DICOM_TAG_E07F_1000                                     "dicom_tag_E07F_1000"
#define DICOM_KEYWORD_E07F_1000                                 "pixel_data"
///协议文档:<>↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
#endif // GLOBAL_CONST_H

三.编码:DicomFile.h

#ifndef DICOMFILE_H
#define DICOMFILE_H

#include 
#include 
#include 
extern "C"{
#include 
#include 
#include 
#include 
}
#include "global_const.h"
#include "global_struct.h"

using namespace std;
typedef bool (*f_group_element)(void*);

class DicomFile : public QObject
{
    Q_OBJECT
public:
    explicit DicomFile(QObject *parent = nullptr);

    static bool dicom_tag_E07F_1000(void*);
    static bool dicom_tag_0050_0030(void*);
    static bool dicom_tag_0050_1000(void*);

    static bool dicom_tag_0A30_2B02(void*);
    static bool dicom_tag_7000_1A03(void*);

    static bool dicom_tag_2900_2510(void*);
    static bool dicom_tag_2900_2410(void*);
    static bool dicom_tag_2900_1410(void*);
    static bool dicom_tag_2900_1310(void*);
    static bool dicom_tag_2900_1210(void*);
    static bool dicom_tag_2900_1110(void*);
    static bool dicom_tag_2900_1010(void*);

    static bool dicom_tag_2800_1221(void*);
    static bool dicom_tag_2800_5110(void*);
    static bool dicom_tag_2800_5010(void*);
    static bool dicom_tag_2800_0301(void*);
    static bool dicom_tag_2800_0201(void*);
    static bool dicom_tag_2800_0101(void*);
    static bool dicom_tag_2800_0001(void*);
    static bool dicom_tag_2800_3000(void*);
    static bool dicom_tag_2800_1100(void*);
    static bool dicom_tag_2800_1000(void*);
    static bool dicom_tag_2800_0800(void*);
    static bool dicom_tag_2800_0600(void*);
    static bool dicom_tag_2800_0400(void*);
    static bool dicom_tag_2800_0200(void*);

    static bool dicom_tag_2000_1300(void*);
    static bool dicom_tag_2000_1100(void*);
    static bool dicom_tag_2000_1000(void*);
    static bool dicom_tag_2000_0E00(void*);
    static bool dicom_tag_2000_0D00(void*);

    static bool dicom_tag_1800_0213(void*);
    static bool dicom_tag_1800_5010(void*);
    static bool dicom_tag_1800_1410(void*);

    static bool dicom_tag_1000_2000(void*);
    static bool dicom_tag_1000_1000(void*);

    static bool dicom_tag_0800_3E10(void*);
    static bool dicom_tag_0800_0102(void*);
    static bool dicom_tag_0800_6400(void*);
    static bool dicom_tag_0800_6100(void*);
    static bool dicom_tag_0800_6000(void*);
    static bool dicom_tag_0800_3300(void*);
    static bool dicom_tag_0800_3200(void*);
    static bool dicom_tag_0800_3100(void*);
    static bool dicom_tag_0800_3000(void*);
    static bool dicom_tag_0800_2A00(void*);
    static bool dicom_tag_0800_2300(void*);
    static bool dicom_tag_0800_2200(void*);
    static bool dicom_tag_0800_2100(void*);
    static bool dicom_tag_0800_2000(void*);
    static bool dicom_tag_0800_1800(void*);
    static bool dicom_tag_0800_1600(void*);
    static bool dicom_tag_0800_1300(void*);
    static bool dicom_tag_0800_1200(void*);
    static bool dicom_tag_0800_0800(void*);
    static bool dicom_tag_0800_0500(void*);
    static bool dicom_tag_0800_0000(void*);

    static bool dicom_tag_0200_1600(void*);
    static bool dicom_tag_0200_1300(void*);
    static bool dicom_tag_0200_1200(void*);
    static bool dicom_tag_0200_1000(void*);
    static bool dicom_tag_0200_0300(void*);
    static bool dicom_tag_0200_0201(void*);
    static bool dicom_tag_0200_0200(void*);
    static bool dicom_tag_0200_0100(void*);
    static bool dicom_tag_0200_0001(void*);
    static bool dicom_tag_0200_0000(void*);

    void read_diconde(QString);
    
    bool get_is_valid_diconde_file(FILE *p_file_diconde);
    inline bool parse_dicom_file_data_vr(const unsigned char*);
    inline bool parse_value_lenght(const unsigned char*,FILE *p_file_diconde);
    inline bool parse_value_byte_lenght(FILE *p_file_diconde);
    inline bool parse_value_field(FILE *p_file_diconde);
    bool get_pixel_data(FILE *p_file_diconde);
    
    inline int hex_to_string(unsigned char *buf, int length, char *out);
    inline int hex_to_int_little_endian(unsigned char* src, int offset);
signals:

private:
    int m_diconde_file_byte_count;                                              //DICOM文件字节总数
    GlobalStruct::DICOM_FILE_meta_ELEMENTS_LIST m_dicm_file_meta_elements_list; //DICOM的单个数据元数
    GlobalStruct::DICOM_FILE_meta_ELEMENTS m_dicom_file_meta_elements;          //DICOM的所有数据元数集
    std::map m_f_map;                                   //DICOM的Dataset的TAG
    bool m_is_tag_e07f_1000;int m_pixel_data_length;                            //图像数据标志位
    bool m_is_tag_rows;     int m_rows;                                         //图像的行像素
    bool m_is_tag_columns;  int m_columns;                                      //图像的列像素
public:
    unsigned char *m_p_buf_pixel_data;
};

#endif // DICOMFILE_H

四.编码DicomFile.cpp

#include "dicomfile.h"

DicomFile::DicomFile(QObject *parent) : QObject(parent),m_diconde_file_byte_count(0)
  ,m_is_tag_e07f_1000(false),m_pixel_data_length(0),m_is_tag_rows(false),m_rows(0)
  ,m_is_tag_columns(false),m_columns(0),m_p_buf_pixel_data(nullptr)
{
    m_f_map.clear();
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_0000,dicom_tag_0200_0000));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_0001,dicom_tag_0200_0001));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_0100,dicom_tag_0200_0100));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_0200,dicom_tag_0200_0200));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_0201,dicom_tag_0200_0201));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_0300,dicom_tag_0200_0300));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_1000,dicom_tag_0200_1000));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_1200,dicom_tag_0200_1200));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_1300,dicom_tag_0200_1300));
    m_f_map.insert(std::make_pair(DICOM_TAG_0200_1600,dicom_tag_0200_1600));

    m_f_map.insert(std::make_pair(DICOM_TAG_0800_0000,dicom_tag_0800_0000));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_0500,dicom_tag_0800_0500));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_0800,dicom_tag_0800_0800));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_1200,dicom_tag_0800_1200));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_1300,dicom_tag_0800_1300));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_1600,dicom_tag_0800_1600));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_1800,dicom_tag_0800_1800));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_2000,dicom_tag_0800_2000));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_2100,dicom_tag_0800_2100));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_2200,dicom_tag_0800_2200));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_2300,dicom_tag_0800_2300));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_2A00,dicom_tag_0800_2A00));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_3000,dicom_tag_0800_3000));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_3100,dicom_tag_0800_3100));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_3200,dicom_tag_0800_3200));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_3300,dicom_tag_0800_3300));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_6000,dicom_tag_0800_6000));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_6100,dicom_tag_0800_6100));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_6400,dicom_tag_0800_6400));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_0102,dicom_tag_0800_0102));
    m_f_map.insert(std::make_pair(DICOM_TAG_0800_3E10,dicom_tag_0800_3E10));

    m_f_map.insert(std::make_pair(DICOM_TAG_1000_1000,dicom_tag_1000_1000));
    m_f_map.insert(std::make_pair(DICOM_TAG_1000_2000,dicom_tag_1000_2000));

    m_f_map.insert(std::make_pair(DICOM_TAG_1800_1410,dicom_tag_1800_1410));
    m_f_map.insert(std::make_pair(DICOM_TAG_1800_5010,dicom_tag_1800_5010));
    m_f_map.insert(std::make_pair(DICOM_TAG_1800_0213,dicom_tag_1800_0213));

    m_f_map.insert(std::make_pair(DICOM_TAG_2000_0D00,dicom_tag_2000_0D00));
    m_f_map.insert(std::make_pair(DICOM_TAG_2000_0E00,dicom_tag_2000_0E00));
    m_f_map.insert(std::make_pair(DICOM_TAG_2000_1000,dicom_tag_2000_1000));
    m_f_map.insert(std::make_pair(DICOM_TAG_2000_1100,dicom_tag_2000_1100));
    m_f_map.insert(std::make_pair(DICOM_TAG_2000_1300,dicom_tag_2000_1300));

    m_f_map.insert(std::make_pair(DICOM_TAG_2800_0200,dicom_tag_2800_0200));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_0400,dicom_tag_2800_0400));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_0600,dicom_tag_2800_0600));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_0800,dicom_tag_2800_0800));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_1000,dicom_tag_2800_1000));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_1100,dicom_tag_2800_1100));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_3000,dicom_tag_2800_3000));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_0001,dicom_tag_2800_0001));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_0101,dicom_tag_2800_0101));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_0201,dicom_tag_2800_0201));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_0301,dicom_tag_2800_0301));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_5010,dicom_tag_2800_5010));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_5110,dicom_tag_2800_5110));
    m_f_map.insert(std::make_pair(DICOM_TAG_2800_1221,dicom_tag_2800_1221));

    m_f_map.insert(std::make_pair(DICOM_TAG_2900_1010,dicom_tag_2900_1010));    //???
    m_f_map.insert(std::make_pair(DICOM_TAG_2900_1110,dicom_tag_2900_1110));
    m_f_map.insert(std::make_pair(DICOM_TAG_2900_1210,dicom_tag_2900_1210));
    m_f_map.insert(std::make_pair(DICOM_TAG_2900_1310,dicom_tag_2900_1310));
    m_f_map.insert(std::make_pair(DICOM_TAG_2900_1410,dicom_tag_2900_1410));
    m_f_map.insert(std::make_pair(DICOM_TAG_2900_2410,dicom_tag_2900_2410));
    m_f_map.insert(std::make_pair(DICOM_TAG_2900_2510,dicom_tag_2900_2510));

    m_f_map.insert(std::make_pair(DICOM_TAG_7000_1A03,dicom_tag_7000_1A03));
    m_f_map.insert(std::make_pair(DICOM_TAG_0A30_2B02,dicom_tag_0A30_2B02));
    m_f_map.insert(std::make_pair(DICOM_TAG_0050_1000,dicom_tag_0050_1000));
    m_f_map.insert(std::make_pair(DICOM_TAG_0050_0030,dicom_tag_0050_0030));

    m_f_map.insert(std::make_pair(DICOM_TAG_E07F_1000,dicom_tag_E07F_1000));    //图像数据TAG
}
bool DicomFile::dicom_tag_E07F_1000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;
    p_dicom_file->m_is_tag_e07f_1000 = true;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_E07F_1000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_E07F_1000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0050_0030(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0050_0030);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0050_0030=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0050_1000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0050_1000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0050_1000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0A30_2B02(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0A30_2B02);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0A30_2B02=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_7000_1A03(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_7000_1A03);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_7000_1A03=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2900_2510(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2900_2510);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2900_2510=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2900_2410(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2900_2410);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2900_2410=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2900_1410(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2900_1410);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2900_1410=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2900_1310(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2900_1310);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2900_1310=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2900_1210(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2900_1210);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2900_1210=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2900_1110(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2900_1110);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2900_1110=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2900_1010(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2900_1010);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2900_1010=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_1221(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_1221);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_1221=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_5110(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_5110);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_5110=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_5010(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_5010);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_5010=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_0301(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_0301);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_0301=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_0201(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_0201);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_0201=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_0101(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_0101);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_0101=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_0001(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_0001);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_0100=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_3000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_3000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_3000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_1100(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;
    p_dicom_file->m_is_tag_columns=true;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_1100);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_1100=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_1000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;
    p_dicom_file->m_is_tag_rows=true;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_1000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_1000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_0800(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_0800);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_0800=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_0600(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_0600);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_0600=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2800_0400(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_0400);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_0400=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}

bool DicomFile::dicom_tag_2800_0200(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2800_0200);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2800_0200=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2000_1300(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2000_1300);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2000_1300=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2000_1100(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2000_1100);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2000_1100=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2000_1000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2000_1000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2000_1000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2000_0E00(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2000_0E00);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2000_0E00=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_2000_0D00(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_2000_0D00);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_2000_0D00=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_1800_0213(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_1800_0213);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_1800_0213=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_1800_5010(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_1800_5010);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_1800_5010=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_1800_1410(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_1800_1410);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_1800_1410=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_1000_2000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_1000_2000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_1000_2000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_1000_1000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_1000_1000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_1000_1000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_3E10(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_3E10);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_3E10=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_0102(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_0102);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_0102=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_6400(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_6400);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_6400=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_6100(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_6100);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_6100=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_6000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_6000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_6000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_3300(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_3300);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_3300=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_3200(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_3200);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_3200=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_3100(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_3100);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_3100=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_3000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_3000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_3000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_2A00(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_2A00);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_2A00=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_2300(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_2300);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_2300=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_2200(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_2200);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_2200=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_2100(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_2100);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_2100=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_2000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_2000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_2000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_1800(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_1800);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_1800=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_1600(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_1600);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_1600=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_1300(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_1300);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_1300=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_1200(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_1200);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_1200=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_0800(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_0800);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_0800=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_0000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_0000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_0000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0800_0500(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0800_0500);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0800_0500=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}

bool DicomFile::dicom_tag_0200_1600(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_1600);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_1600=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0200_1300(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_1300);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_1300=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0200_1200(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_1200);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_1200=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0200_1000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_1000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_1000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0200_0300(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_0300);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_0300=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0200_0201(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_0201);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_0201=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0200_0200(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_0200);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_0200=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0200_0100(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;

    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_0100);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_0100=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}
bool DicomFile::dicom_tag_0200_0001(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;
    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_0001);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_0001=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}

bool DicomFile::dicom_tag_0200_0000(void* arg)
{
    char c_keyword[128]; memset(c_keyword,0x00,sizeof(c_keyword));
    DicomFile* p_dicom_file = (DicomFile*)arg;
    snprintf(c_keyword,sizeof(c_keyword),"%s",DICOM_KEYWORD_0200_0000);
    memcpy(p_dicom_file->m_dicom_file_meta_elements.keyword,c_keyword,sizeof(c_keyword));
    qDebug("step 2:DICOM_KEYWORD_0200_0000=%s",p_dicom_file->m_dicom_file_meta_elements.keyword);
    return true;
}

void DicomFile::read_diconde(QString e)
{
    m_diconde_file_byte_count = 0;
    m_is_tag_e07f_1000 =false;  m_pixel_data_length=0;
    m_is_tag_rows=false;        m_rows=0;
    m_is_tag_columns=false;     m_columns=0;
    m_p_buf_pixel_data=nullptr;
    FILE *p_file_diconde = fopen(e.toLatin1().data(), "rb");
    if (nullptr == p_file_diconde)
    {
        qDebug("read_diconde nullptr == p_file_diconde error file=%s.",e.toLatin1().data());return;
    }
    if(false == get_is_valid_diconde_file(p_file_diconde))
    {
        qDebug("step 1 : dicom file error!"); return;
    }

    memset(&m_dicm_file_meta_elements_list,0x00,sizeof(m_dicm_file_meta_elements_list));

    size_t count = 0;           int circulation = -1;
    int fixed_length = 4;       unsigned char buf[fixed_length];
    char tag[32];               string key;
    do{
        qDebug("---------------------------------------------------------------------------------------circulation=%d",++circulation);
        memset(&m_dicom_file_meta_elements,0x00,sizeof(m_dicom_file_meta_elements));

        fixed_length = 4; buf[fixed_length]; memset(buf,0x00,sizeof(buf));
        if(fixed_length == (int)(count = fread(buf, 1, fixed_length, p_file_diconde)))      //tag: Registry of DICOM File meta Elements
        {
            m_diconde_file_byte_count = m_diconde_file_byte_count + count;
            memset(tag,0x00,sizeof(tag));
            hex_to_string(buf,fixed_length,tag);
            key = (string)tag;
            if(m_f_map.find(key) == m_f_map.end()){ goto END_CIRCULATION;}
            if(!m_f_map[key](this)){ goto END_CIRCULATION;}
            m_dicom_file_meta_elements.group[0]=buf[0];
            m_dicom_file_meta_elements.group[1]=buf[1];
            m_dicom_file_meta_elements.element[0]=buf[2];
            m_dicom_file_meta_elements.element[1]=buf[3];
        }

        fixed_length = 2; buf[fixed_length]; memset(buf,0x00,sizeof(buf));
        if(fixed_length == (int)(count = fread(buf, 1, fixed_length, p_file_diconde)))      //vr: Value Representation
        {
            m_diconde_file_byte_count = m_diconde_file_byte_count + count;
            if(!parse_dicom_file_data_vr(buf)){ goto END_CIRCULATION;}
        }

        if(!parse_value_lenght(buf,p_file_diconde)){goto END_CIRCULATION;}                  //value_lenght

        if(!parse_value_byte_lenght(p_file_diconde)){goto END_CIRCULATION;};                //value_byte_lenght:实际值的长度:小端模式

        if(!parse_value_field(p_file_diconde)){goto END_CIRCULATION;}

        m_dicm_file_meta_elements_list.elements_length = m_dicm_file_meta_elements_list.elements_length+1;
        m_dicm_file_meta_elements_list.elements[circulation]=m_dicom_file_meta_elements;

        if(m_is_tag_e07f_1000)
        {
            get_pixel_data(p_file_diconde);
            goto END_CIRCULATION;
        }
    }while(0 < (int)count);

END_CIRCULATION:
    qDebug("-------------------------------------------------------------------------------------end circulation");
    for(int i= 0 ; i >Page53
        //表中字段VR保留
        int fixed_length = 2;     size_t count = 0;
        unsigned char buf[fixed_length]; memset(buf,0x00,sizeof(buf));
        count = fread(buf, 1, fixed_length, p_file_diconde);
        m_diconde_file_byte_count = m_diconde_file_byte_count + count;
    }
    else    //0x55 == p_vr[0] && 0x4C == p_vr[1]        //UL
    {       //
        m_dicom_file_meta_elements.value_lenght = 2;
    }
    return true;
}

bool DicomFile::parse_value_byte_lenght(FILE *p_file_diconde)
{
    bool ret_val = false;
    size_t count = 0;
    int fixed_length = m_dicom_file_meta_elements.value_lenght;
    unsigned char buf[fixed_length]; memset(buf,0x00,sizeof(buf));
    if(fixed_length == (int)(count = fread(buf, 1, fixed_length, p_file_diconde)))      //vr: value_byte_lenght
    {
        ret_val = true;
        m_diconde_file_byte_count = m_diconde_file_byte_count + count;
        for(int i = 0 ; i= m_diconde_file_byte_count)
    {
        m_diconde_file_byte_count = m_diconde_file_byte_count + count;
        if(buf[0] == DICOM_D_0x44  &&  buf[1] == DICOM_I_0x49
                && buf[2] == DICOM_C_0x43 && buf[3] == DICOM_M_0x4D)
        {
            qDebug("step 1:dicom file OK!");
            ret_val = true; break;
        }
        memset(buf,0x00,sizeof(buf));
    }
    return  ret_val;
}


int DicomFile::hex_to_string(unsigned char *buf, int length, char *out)
{
    strcat(out,"dicom_tag_");
    char tmp[8];
    for(int i= 0 ;i < length; i++)
    {
        memset(tmp,0x00,sizeof(tmp));
        if(2==i){ sprintf(tmp, "_%02X", buf[i]);}
        else{sprintf(tmp, "%02X", buf[i]);}
        strcat(out, tmp);
    }
    qDebug("%s",out);
    return length * 2;
}

int DicomFile::hex_to_int_little_endian(unsigned char* src, int offset)
{
    int value;
    value = (int) ((src[offset] & 0xFF)
            | ((src[offset + 1] & 0xFF) << 8));
    return value;
}
 

IT交流

 

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号