0

我可以使用以下命令将位图转换为 DICOM:

  Bitmap bmp = new Bitmap(System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("~/FileName)));
                Color c = bmp.GetPixel(0, 0);
                bmp.MakeTransparent(c);
                im.Import(bmp);

它工作得很好。

现在我正在尝试使用以下方法将位图图像列表转换为 DICOM 列表:

    MySession.Current.dicomArray = new DicomImage[NFiles];
      MySession.Current.bmpArray = new Bitmap[NFiles];
.....
 for (int i = 0; i < NFiles; ++i)
                                {
                                    MySession.Current.bmpArray[i] =
                                        new Bitmap(System.Drawing.Image.FromFile(
                                            System.Web.HttpContext.Current.Server.MapPath(
                                                "~/" + ImagePath + files[i])));
                                }
    ......
          for (int i = 0; i < NFiles; ++i)
         {
           MySession.Current.dicomArray[i].Import(MySession.Current.bmpArray[i]);
        }

我收到以下错误:

Object reference not set to an instance of an object.

我可以看到 bmpArray 中的所有文件。我想我使用 for 语句是错误的。我会很感激你的建议。

4

1 回答 1

0

正如@AdilMammadov 在上面的评论中指出的那样,问题是由于您尚未定义dicomArray数组的各个成员,因此当您Import在第二个循环中调用该方法时,您是在一个null对象上调用它.

如果DicomImage有一个公共构造函数(从你的问题中不清楚是否有),要么添加 Adil 建议的行:

MySession.Current.dicomArray[i] = new DicomImage();

Import在第二个循环中的行之前。

或者,使用 LINQ 方法Enumerable.Repeat创建数组:

MySession.Current.dicomArray = Enumerable.Repeat(new DicomImage(), NFiles).ToArray();
于 2013-05-15T13:45:51.400 回答