2011-07-15 18 views
2

バイト配列からイメージを作成しようとしています。バイト配列は、指紋スキャナーによって作成されます(cf CaptureFrameメソッド)。 、私が手fwidthは256であり、私は以下のコードを実行するとfheightは255Image.FromStream:パラメータが無効です

ある

System.ArgumentExceptionの:パラメータが有効ではありません。

Dim fWidth As Short 
Dim fHeight As Short 

DFRProxy.DFRProxy.GetImageDimensions(fWidth, fHeight) 

Dim imgBufLength As Integer = CInt(fWidth) * fHeight 

Dim finger(imgBufLength) As Byte 

Dim startCap As Short = DFRProxy.DFRProxy.StartCapture(0) 

Dim capFrame As Short = DFRProxy.DFRProxy.CaptureFrame(0, finger, 0) 


Using ms As New IO.MemoryStream(finger) 
    thisImage = Image.FromStream(ms) 
End Using 

エラーバイト配列は、65280個の要素を有する

thisImage = Image.FromStream(ms) 

ラインで起こります。私はこれに似たいくつかのStackOverflow投稿を見直しましたが、何も機能していません。 FromStreamメソッドのuseEmbeddedColorManagementvalidateImageDataパラメータをFalseとTrueに設定しようとしましたが、これで問題は解決されません。

ArgumentExceptionの修正方法に関するご意見はありますか?

答えて

6

FROMSTREAMは、これらのいずれかの形式でデータを期待している:

BMP 

GIF 

JPEG 

PNG 

TIFF 

あなたのバイト配列が、私は疑う:

マネージドGDI +は、次のファイルの種類をサポート内蔵のエンコーダとデコーダを持っていますこれらにはなく、これらの形式のそれぞれが期待するメタデータまたは圧縮情報はありません。

ビットマップオブジェクトを作成し、適切なピクセルのビットマップでSetPixelを呼び出して、バイト配列内の各ピクセルを読み取ることです。あなたは、あなたが望むピクセルを持つビットマップ(画像である)で終わるでしょう。

+0

素晴らしいです。ありがとう。それはグレースケールの画像です。 SetPixelメソッドを使用する場合、グレースケール値(0-255)をシステムカラーに変換するにはどうすればよいですか? – blueshift

+1

値がvの場合、新しいColor(v、v、v)はトリックを実行する必要があります(等しいRGBコンポーネントを持つ色を作成します。これは灰色である必要があります)。 – antlersoft

+0

これが行いました。優れた答えをありがとう。私は何時間も夢中になってきました。 – blueshift

4

試してみてください。また

TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap)); 
Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(byteArray); 
0

VB.NET用> ggsmartboyの答えに:

モジュール/クラスの上に

/フォーム

Imports system.componentmodel 

コードで

Dim ba As New Byte() 'Make sure you set the byte array to something 
Dim tc As TypeConverter = TypeDescriptor.GetConverter(GetType(Bitmap)) 
Dim bmp As Bitmap = tc.ConvertFrom(ba) 

続いて:

PictureBox1.Image = bmp 

乾杯

関連する問題