从资源加载时无法访问 DICOM 图像流
Cannot access DICOM image stream when loading from a resource
我正在使用 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;
}
这 returns 一个 DicomFile,我可以访问关联的标签。但是,当我使用下面的(缩写)代码加载图像时,在 RenderImage 行上出现异常,提示“无法从流中读取 - 可能已关闭”。
DicomImage images; = new DicomImage(dicom.Dataset);
if (images.NumberOfFrames > 0)
{
var imageData = images.RenderImage(0).As<Bitmap>();
...
}
当我从文件路径(RequestDicomFile 中注释掉的代码)打开 DicomFile 时,我能够访问渲染的图像。
有谁知道为什么资源文件会发生这种情况?或者,是否有更好的方法来引用我的测试文件,而无需尝试将它们复制到 Azure 管道中的正确路径?
解决方案是在打开 DICOM 文件时完全读取流。
result = DicomFile.Open(stream, FileReadOption.ReadAll);
我正在使用 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;
}
这 returns 一个 DicomFile,我可以访问关联的标签。但是,当我使用下面的(缩写)代码加载图像时,在 RenderImage 行上出现异常,提示“无法从流中读取 - 可能已关闭”。
DicomImage images; = new DicomImage(dicom.Dataset);
if (images.NumberOfFrames > 0)
{
var imageData = images.RenderImage(0).As<Bitmap>();
...
}
当我从文件路径(RequestDicomFile 中注释掉的代码)打开 DicomFile 时,我能够访问渲染的图像。
有谁知道为什么资源文件会发生这种情况?或者,是否有更好的方法来引用我的测试文件,而无需尝试将它们复制到 Azure 管道中的正确路径?
解决方案是在打开 DICOM 文件时完全读取流。
result = DicomFile.Open(stream, FileReadOption.ReadAll);