【问题标题】:How to set dicomfile encoding如何设置dicomfile编码
【发布时间】:2021-11-26 16:10:00
【问题描述】:

fo-dicom 4.0.6.

netcore5

我根据现有文件创建 dicom 文件。仅在西里尔文中添加少量标签 据我了解,当我打开 dicomfile 时,标签 SpecificCharacterSet 用于定义标签的值编码。 据我了解,我可以使用自定义 IOManager 更改此行为。

F.ex.如果我想强制编码 1251,我可以定义类

public class AnsiIOManager : IOManager
{
    /// <inheritdoc />
    protected override Encoding BaseEncodingImpl => Encoding.GetEncoding("windows-1251");

    ...
}

并通过IOManager.SetImplementation(new AnsiIOManager());分配这个

我说的对吗?

有时我需要在多线程中同时创建不同编码的文件。我可以动态更改此 IOManager 编码而不是更改静态类型值吗?

【问题讨论】:

    标签: .net-core encoding fo-dicom


    【解决方案1】:

    在 IOManager 中更改默认编码不是正确的方法。因为您向 DicomDataset 添加了一些值,因此还需要更新该文件中的 SpecicificCharacterSet。 IOManager 仅影响解析值时使用的默认编码。 在 5.0.0 版本中,所有这些编码都得到了显着改进。所以我建议使用 fo-dicom 5.0.0。然后您可以执行以下操作:

    • 加载 DicomDataset
    • 调用dataset.AddOrUpdate(DicomTag.SpeicificCharacterSet, DicomEncoding.GetCharset( Encoding.GetEncoding("windows-1251") )),告诉数据集,现在使用你想要的编码
    • 使用字符串值添加标签

    【讨论】:

    • 你写的 >>"IOManager 只影响解析 values.Dataset 时使用的默认编码"。您的意思是在获取 GetSingleValueOrDefault(DicomTag.PatientName) 之类的值时进行解析?
    • 我只看不到 IOManager 什么时候计费的。
    • 直到版本 4 才有这个 IOManager。这是必需的,因为各种平台(桌面、android、ios、uwp、pcl、..)都有各种构建,并且每个平台都有不同的 IO 方法。是的,这种编码只是在某处找不到显式编码时的后备编码。
    • 在第 5 版中,netstandard2.0 中只有一个 build。这个新版本使用统一的 .net api,因此不再需要 IOManager。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多