我写作Windows Forms Application
应在上显示图像的应用程序PictureBox
控制。
要从以下位置检索该图像DICOMDIR
我使用的文件fo-dicom https://github.com/fo-dicom/fo-dicom库(由驱动this https://github.com/fo-dicom/fo-dicom/wiki/Image-rendering guide):
....
private void MainForm_Load(object sender, EventArgs e)
{
ImageManager.SetImplementation(WinFormsImageManager.Instance);
}
....
// this function is just for example
// real function is bit complicated
private void ShowImage()
{
// Getting DICOM file, retrieving all info from it
// Getting dicomDataset instance
....
var id = dicomDataset.Get<string>(DicomTag.ReferencedFileID, -1);
var dicomImage = new DicomImage(id);
var bitmap = dicomImage.RenderImage().AsBitmap();
pictureBox.Image = bitmap ?? pictureBox.ErrorImage;
}
当图像检索时一切正常。但一旦我maximize
my MainForm
, I got System.ArgumentException
with Parameter is not valid
信息:
看起来这是一个 .NET Framework 错误,但也许有一种方法可以通过以下方式修复它:override
ing OnPaint()
的方法PictureBox
控制?
以前有人见过这个错误吗?
提前致谢。
附:在开发该项目期间,我使用以下软件:
- Windows 10 x64
- Visual Studio 2017 社区版
- .NET框架4.5.1
- fo-dicom 版本 3.0.2
EDIT #1
同样的问题与Panel
代替PictureBox
:
您面临着 fo-dicom 3.0.2 中已知且已修复的错误。也可以看看https://github.com/fo-dicom/fo-dicom/issues/634 https://github.com/fo-dicom/fo-dicom/issues/634。
出于性能原因,DicomImage.RenderImage().AsBitmap() 返回的位图没有自己的像素数据,但有一个指向 DicomImage 字节的指针。因此 AsBitmap() 不会复制内存中的所有像素数据。
但是,如果您在局部变量中实例化 DicomImage 并将位图保存在控件中,则 DicomImage 将在方法结束时被处理,并且像素数据会被收集。下次,位图尝试访问像素数据时,会发生此异常。
下一个版本将有两种方法:AsSharedBitmap() - 与现在相同,但对用户来说更明显 - 和 AsClonedBitmap()。
现在的解决方法是通过调用手动复制像素数据:
var 位图 = dicomImage.RenderImage().AsBitmap().Clone();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)