EVIL DICOM イメージ リーダーを使用しています。一部のファイルでは問題なく動作しますが、一部のファイルで次のエラーが表示されます。目的の配列の長さが十分ではありませんでした。destindex と長さ、および配列の下限を確認してください。購入した元の Web サイトが見つかりません。プログラム。任意の支援をいただければ幸いです。
1 に答える
Evil DICOM コード (バージョン 0.5.7) を見ると、ImageMatrix
完全には計画されていない方法でコンストラクターを使用していると思います。
参照しているコンストラクターは、各画像のサイズがすべての画像で同じであると想定されている DICOM 画像ファイルの配列を取ります。
構築時に、Image
配列プロパティは、1 つの画像のサイズにプライベート メソッド内の DICOM 画像配列の長さを掛けた値に等しくなりますIntializeMatrix
。
Image
次に、コンストラクターはすべての画像ファイルをループし、各ファイルのピクセル データをメソッドのプロパティに挿入しますAppendImageToMatrix
。でのコピーされたピクセル データの開始位置はImage
、DICOM ファイルによって決定されますImageNumber
。
ImageNumber
が配列のサイズに対して大きすぎる場合Image
、ピクセル データは配列の位置 0 にコピーされImage
ます。
でも!開始位置が配列の長さと等しい場合 (これはファイル数よりちょうど 1 大きい場合に発生します)、開始位置は変更されず、存在しない位置に書き込もうとします。配列!Image
ImageNumber
Image
これが行われているのは の 4 行目でAppendImageToMatrix
、次のようになっています。
if (offset > Image.Length) { offset = 0; }
ライブラリを自分で構築している場合は、>
演算子を演算子に変更する>=
と、アプリケーションは少なくともスローしなくなります。または、ピクセル データのコピー全体で、より安全な処理を検討することもできます。ただし、ここで詳しく説明する余地はありません:-)
Evil DICOM の更新されたバージョンでImageMatrix
クラスをすぐに見つけることができません。ただし、古いコードまたは新しいコードで問題が発生した場合は、Evil DICOM Github リポジトリの[問題] タブでこれらの問題を報告することを検討してください。
UPDATEプロパティが DICOM 属性インスタンス番号、タグ (0020,0013)ImageNumber
と等しいことに注意してください。