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 内のすべてのファイルを確認できます。私はステートメントを間違って使用していると思います。ご提案いただければ幸いです。

4

1 に答える 1

0

上記のコメントで@AdilMammadovが指摘したように、問題はdicomArray配列の個々のメンバーをまだ定義していないという事実によるものであるためImport、2番目のループでメソッドを呼び出すときは、nullオブジェクトで呼び出しています.

パブリック コンストラクターがある場合DicomImage(それがあるかどうかは質問から明らかではありません)、Adil が提案する行を追加します。

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

Import2 番目のループの行の前。

または、LINQ メソッドEnumerable.Repeatを使用して配列を作成します。

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