0

我正在使用 fo-Dicom 访问图像流。我有单元测试调用加载测试 DICOM 文件的方法。为了自动化构建管道中的过程,我从使用图像路径切换到加载资源。我现在像这样加载我的测试 DICOM 文件:

    public static DicomFile RequestDicomFile(Resource resource)
    {
        //return DicomFile.Open(Reference.GetPath(resource));

        DicomFile result = null;
        var assembly = Assembly.GetExecutingAssembly();

        using (Stream stream = assembly.GetManifestResourceStream($"CommonTesting.Resources.{resource.ToString()}.dcm"))
        {
            result = DicomFile.Open(stream);
        }

        return result;
    }

这将返回一个 DicomFile,我可以访问相关的标签。但是,当我使用下面的(缩写)代码加载图像时,在 RenderImage 行上出现“无法从流中读取 - 可能已关闭”的异常。

        DicomImage images; = new DicomImage(dicom.Dataset);
        if (images.NumberOfFrames > 0)
        {
            var imageData = images.RenderImage(0).As<Bitmap>();
            ...
        }

当我从文件路径(RequestDicomFile 中注释掉的代码)打开 DicomFile 时,我可以访问渲染的图像。

有谁知道为什么资源文件会发生这种情况?或者,是否有更好的方法来引用我的测试文件,而无需尝试将它们复制到 Azure 管道中的正确路径?

4

1 回答 1

1

解决方案是在打开 DICOM 文件时完全读取流。

result = DicomFile.Open(stream, FileReadOption.ReadAll);
于 2021-05-19T15:48:41.153 回答