6

我不是经验丰富的程序员,只需要在我的 VS2010 项目中添加一个 DICOM 查看器即可。我可以在 Windows 窗体中显示图像,但不知道如何更改窗口中心和宽度。这是我的脚本:

DicomImage image = new DicomImage(_filename);
            int maxV = image.NumberOfFrames;
            sbSlice.Maximum = maxV - 1;
            image.WindowCenter = 7.0;
            double wc = image.WindowCenter;
            double ww = image.WindowWidth;

            Image result = image.RenderImage(0);
            DisplayImage(result);

它不起作用。我不知道这是否是正确的方法。

4

2 回答 2

6

创建 DicomImage 类的目的不是将其用于实现图像查看器。创建它是为了在 DICOM Dump 实用程序中渲染预览图像并测试图像压缩/解压缩编解码器。也许将它包含在库中是一个错误?

当代码被用于远远超出其预期功能的事情时,我很难在代码中发现错误。

也就是说,我花了一些时间来修改代码,以便将 WindowCenter/WindowWidth 属性应用于渲染的图像。您可以在 Git 存储库中找到这些修改。

var img = new DicomImage(fileName);
img.WindowCenter = 2048.0;
img.WindowWidth = 4096.0;
DisplayImage(img.RenderImage(0));
于 2012-10-27T15:49:02.693 回答
2

我查看了代码,它看起来非常错误。https://github.com/rcd/fo-dicom/blob/master/DICOM/Imaging/DicomImage.cs

在当前的错误实现中,设置WindowCenterorWindowWidth属性无效,除非 Dataset.Get(DicomTag.PhotometricInterpretation) 是Monochrome1or Monochrome2during Load()。这已经很荒谬了,但它仍然不能使用,因为_renderOptions变量只设置在一个地方并立即用于_pipeline创建(不给你机会使用WindowCenter属性来更改它)。您唯一的机会是灰度_renderOptions初始化:_renderOptions = GrayscaleRenderOptions.FromDataset(Dataset);.

当前的解决方案:您的数据集应该有

  • DicomTag.WindowCenter适当设置
  • DicomTag.WindowWidth != 0.0
  • DicomTag.PhotometricInterpretation == Monochrome1或者Monochrome2

以下代码实现了这一点:

DicomDataset dataset = DicomFile.Open(fileName).Dataset;
//dataset.Set(DicomTag.WindowWidth, 200.0); //the WindowWidth must be non-zero
dataset.Add(DicomTag.WindowCenter, "100.0");
//dataset.Add(DicomTag.PhotometricInterpretation, "MONOCHROME1"); //ValueRepresentations tag is broken
dataset.Add(new DicomCodeString(DicomTag.PhotometricInterpretation, "MONOCHROME1"));
DicomImage image = new DicomImage(dataset);
image.RenderImage();

最好的解决方案:等待这个有缺陷的库被修复。

于 2012-10-27T02:23:15.180 回答