【问题标题】:fo-Dicom - How do I extract image frames from the DicomFilefo-Dicom - 如何从 DicomFile 中提取图像帧
【发布时间】:2021-03-29 18:43:06
【问题描述】:

我需要使用 fo-DICOM 从 DICOM SC 中提取所有图像帧。我有一个测试应用程序可以提取和显示图像,效果很好。但是,我需要将单个图像保存到数据库中,并且遇到了问题。

到目前为止,我有以下代码:

    public void SetImages(DicomFile dicom, ThumbResults results)
    {
        var images = new DicomImage(dicom.Dataset);
        
        for(var count = 0; count < images.NumberOfFrames; count++)
        {
            var image = images.RenderImage(count).As<Bitmap>();
            using(var stream = new MemoryStream())
            {
                image.Save(stream, ImageFormat.Jpeg);
                results.Images.Add(Convert.ToBase64String(stream.ToArray()));
            }
        }
    }

我在images.RenderImage 上收到 DicomImagingException,“无法转换为 'Bitmap'”。它适用于我的测试代码,当我调用PictureBox.Image = _image.RenderImage(count).As&lt;Bitmap&gt;(); 时,我认为RenderImage 必须专门用于渲染(顾名思义)。

我应该如何将单个帧提取到将保存到数据库中的字符串?

【问题讨论】:

    标签: c# fo-dicom


    【解决方案1】:

    万一其他人遇到这个问题,问题是原始代码在 .NET Framework 中,但新代码在 .NET Core 中。 Core中ImageManager默认不使用WindowsImageManager,需要手动设置。

    ImageManager.SetImplementation(WinFormsImageManager.Instance);
    

    【讨论】:

    • 知道这是一个有点旧的答案,但是 ImageManager.SetImplementation,它来自哪里,哪个库?试图让它在 .net 6(windows)中工作,但它没有 SetImplementation 的定义。 fo-dicom.drawing 4.0.8 , fo-dicom.Imaging.Desktop 5.0.2 (虽然这个给出警告)是我导入的
    • 是Dicom.Image.ImageManager,在Dicom.Imaging命名空间中。我引用了添加的 fo-dicom.Drawing 和 fo-dicom.NetCore 库。我认为这是在 NetCore 中,但不是正面的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多