2017-06-12 13 views
-2

は、私は、画像データが含まれているUSHORTリストを持っている、と私はまず、私はその後、私はpictureBoxにそれをロードするためにFromStreamメソッドクラスimageでの使用MemoryStreamにロードピクチャボックスでこの画像を表示したい:16ビットグレースケールイメージをピクチャボックスに表示するにはどうすればよいですか?

. 
. 
MemoryStream ms = new MemoryStream(pixels24.ToArray()); //pixels24 is ushort[] 
this.DicomImage.Image = System.Drawing.Image.FromStream(ms); 
. 
. 

私は実行する場合、このエラーが現れます:

エラー1が 「System.IO.MemoryStream.MemoryStream(int型)」の最良のオーバーロードされたメソッドの試合は、いくつかの無効な引数を持ってい

私はMemoryStreamが入力としてushort配列を取ることができないことを知っていました。代わりにbyte []を受け取ります... 私はどのようにして、

+2

ありますすべてあなたの 'ushort []'のデータが実際に何であるかによって決まります。 'FromStream()'メソッドは実際のビットマップファイルフォーマットを想定しています。任意のバイトを渡すことはできません。あなたの質問は広すぎます。なぜならあなたは実際には何の文脈も提供していないからです。 –

+0

afaik 16bppは__defined__ですが、__notはサポートされていません。したがって、ushortをバイト単位で__scale down__する必要があります。それとも助けてくれるライブラリのDicomImageですか?それがちょうどPBoxの場合、これは動作しません。あなたはもっと多くの情報を与える必要があります!また、Peterさんのコメントを考慮してください:Image.FromStreamは、配列に100x200または200x100または50x400ピクセル(etcなど)のイメージが含まれている場合、どのように決定できますか? – TaW

答えて

0

と仮定すると、あなたのushort値が少しある

checked 
{ 
    ushort[] vals = pixels24.ToArray(); 
    var imgbytes = (from val in vals 
       select (byte)val).ToArray(); 

    // Your Code 
    MemoryStream ms = new MemoryStream(imgbytes); 
    this.DicomImage.Image = System.Drawing.Image.FromStream(ms); 
} 

checkedブロックはushort値を超える255

0

あなたの願望があるときに、オーバーフロー時に例外をスローするために使用され、0と255の間であります奇妙なことに、参考文献によれば、ushortの範囲はByteよりも大きいので、ushort配列をbyte配列に変換しても、のデータ損失の問題に直面することがありますまたはsystem.overflowexception。問題を処理して例外を処理するためのコードを行うことができれば、単に配列を変換することができます。

byte.MinValue = 0/byte.MaxValue = 255

ushort.MinValue = 0/ushort.MaxValue = 65535

これは単純な例

for (var i = 0; i <= 9; i++) 
{ 
    try 
    { 
     bytPixle24[i] = Convert.ToByte(pixel24[i]); 
    } 
    catch (System.OverflowException ex) 
    { 
     // ... 
    } 
} 
関連する問題