如何使用MergeCom库修改DICOM文件的前导? 我需要用C++修改DICOM文件的前导码。我知道我可以使用MergeCom库来实现这一点。不过,我对这个库很陌生,以前从未使用过。我打开了,但它太广泛了,需要花时间才能得到我需要的东西

如何使用MergeCom库修改DICOM文件的前导? 我需要用C++修改DICOM文件的前导码。我知道我可以使用MergeCom库来实现这一点。不过,我对这个库很陌生,以前从未使用过。我打开了,但它太广泛了,需要花时间才能得到我需要的东西,c++,dicom,C++,Dicom,有人能给我一个简单的代码片段来做这件事吗?我建议不要使用像Merge这样的DICOM工具包来做这件事 DICOM PS 3.10,第7.1章 文件元信息包括关于封装数据集的标识信息。此标头由一个128字节的文件组成 序言,后跟4字节DICOM前缀,后跟表7.1-1所示的文件元元素。应提供该标题 在每个DICOM文件中 所以前导码总是132字节长,并且总是从文件的第一个字节开始。使用原始文件访问方法(如fopen、fwrite)将二进制数据块放入文件比说服DICOM工具包为文件写入错误的前导要容易

有人能给我一个简单的代码片段来做这件事吗?

我建议不要使用像Merge这样的DICOM工具包来做这件事

DICOM PS 3.10,第7.1章

文件元信息包括关于封装数据集的标识信息。此标头由一个128字节的文件组成 序言,后跟4字节DICOM前缀,后跟表7.1-1所示的文件元元素。应提供该标题 在每个DICOM文件中

所以前导码总是132字节长,并且总是从文件的第一个字节开始。使用原始文件访问方法(如fopen、fwrite)将二进制数据块放入文件比说服DICOM工具包为文件写入错误的前导要容易得多

无论如何,使用mergecom工具包是可能的:

MC_STATUS MC_Set_File_Preamble(
int FileID,
char* Preamble
)
其中FileId是MC_Open_文件返回的合并句柄


注:我很少使用MergeCom用户手册。我使用参考手册,搜索序言很快就得到了结果。

我建议不要使用像Merge这样的DICOM工具包

DICOM PS 3.10,第7.1章

文件元信息包括关于封装数据集的标识信息。此标头由一个128字节的文件组成 序言,后跟4字节DICOM前缀,后跟表7.1-1所示的文件元元素。应提供该标题 在每个DICOM文件中

所以前导码总是132字节长,并且总是从文件的第一个字节开始。使用原始文件访问方法(如fopen、fwrite)将二进制数据块放入文件比说服DICOM工具包为文件写入错误的前导要容易得多

无论如何,使用mergecom工具包是可能的:

MC_STATUS MC_Set_File_Preamble(
int FileID,
char* Preamble
)
其中FileId是MC_Open_文件返回的合并句柄


注:我很少使用MergeCom用户手册。我使用参考手册,搜索序言很快就得到了结果。

我同意@kritzel_sw在其他答案中的第一条建议。若它仅限于编写序言,并且不涉及任何其他功能,如加载数据集或读取元素等,那个么使用工具箱就太过分了

以下是对序言的看法:

文件元信息包括关于封装数据集的标识信息。该标头由128字节的文件前导码、4字节的DICOM前缀和表7.1-1所示的文件元元素组成。该标题应出现在每个DICOM文件中

如果应用程序配置文件或特定实现未使用文件前导,则所有128字节应设置为00H。这是为了便于识别在未按照上述规定设置所有128字节时使用前导码

文件前导可以例如包含使得多媒体应用能够随机访问存储在DICOM数据集中的图像的信息。同一文件可以通过两种方式访问:使用前导码的多媒体应用程序和忽略前导码的DICOM应用程序

此外,以下是有助于更好理解该概念的示例:

第一部分,文件头,由128字节的文件前导和4字节的前缀组成。这种方法在许多其他图像标准中非常常见,例如您可能已经看到/使用过的TIFF。4字节前缀由大写字符“DICM”组成。注意,它不是“DICOM”,而是“DICM”

如您所见,序言是DICOM文件头的起始部分。您可以使用编程语言轻松地添加它,而无需使用任何工具箱


看一看与C讨论阅读序言的问题。希望这会对您有所帮助。

我同意@kritzel_sw在其他答案中的第一条建议。若它仅限于编写序言,并且不涉及任何其他功能,如加载数据集或读取元素等,那个么使用工具箱就太过分了

以下是对序言的看法:

文件元信息包括关于封装数据集的标识信息。该标头由128字节的文件前导码、4字节的DICOM前缀和表7.1-1所示的文件元元素组成。该标题应出现在每个DICOM文件中

如果应用程序配置文件或特定实现未使用文件前导,则所有128字节应设置为00H。这是为了便于识别在未按照上述规定设置所有128字节时使用前导码

文件前导可以例如包含信息 使多媒体应用程序能够随机访问存储在DICOM数据集中的图像。同一文件可以通过两种方式访问:使用前导码的多媒体应用程序和忽略前导码的DICOM应用程序

此外,以下是有助于更好理解该概念的示例:

第一部分,文件头,由128字节的文件前导和4字节的前缀组成。这种方法在许多其他图像标准中非常常见,例如您可能已经看到/使用过的TIFF。4字节前缀由大写字符“DICM”组成。注意,它不是“DICOM”,而是“DICM”

如您所见,序言是DICOM文件头的起始部分。您可以使用编程语言轻松地添加它,而无需使用任何工具箱


请看一看与C讨论阅读序言的问题。希望这会对您有所帮助。

@dorKKnight此线程也仅指向用户手册。您是否可以更具体地说明您想更改序言的内容以及原因?我这样问是因为整个序言是由DICOM第10部分定义的——它的每个字节。因此,任何修改都会使文件不符合DICOM。或者您的问题是否涉及第10部分元标题?检查此链接:根据上述链接,前导可能会损坏,从而产生新的可执行漏洞。我试图证明this@dorKKnight这个帖子也只是指向用户手册,你能不能更具体一点,你想改变序言的内容,为什么?我这样问是因为整个序言是由DICOM第10部分定义的——它的每个字节。因此,任何修改都会使文件不符合DICOM。或者您的问题是否涉及第10部分元标题?检查此链接:根据上述链接,前导可能会损坏,从而产生新的可执行漏洞。我试图证明这一点,如果只是在现有文件中添加序言,而没有加载数据集或其他功能,那么我也建议绕过工具箱+但我担心,在生活环境中,事情不会就此结束。但是,由于用例是为了演示在序言中注入恶意软件,我认为任何有效的解决方案都可以解决问题,这是一个更好的想法。还有一个问题。前导码只有128字节。用c编写的最小可执行文件至少为10k。我怎么能复制这个?它将覆盖整个dicom文件的其他部分。您可能必须使用汇编程序在序言中加入真正恶意的内容。请注意,序言中关于脆弱性的文章只是概述了发生类似情况的理论可能性。我强烈怀疑序言损坏是否真的是一个现实的威胁。如果只是将序言添加到现有文件中,而没有加载数据集或其他功能,我也建议绕过工具包+但我担心,在生活环境中,事情不会就此结束。但是,由于用例是为了演示在序言中注入恶意软件,我认为任何有效的解决方案都可以解决问题,这是一个更好的想法。还有一个问题。前导码只有128字节。用c编写的最小可执行文件至少为10k。我怎么能复制这个?它将覆盖整个dicom文件的其他部分。您可能必须使用汇编程序在序言中加入真正恶意的内容。请注意,序言中关于脆弱性的文章只是概述了发生类似情况的理论可能性。我强烈怀疑腐败是否真的是一种现实威胁。