2011-07-15 266 views
2

我想從字節數組中創建一個圖像。字節數組由指紋掃描器創建(參見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 

錯誤發生在線路

thisImage = Image.FromStream(ms) 

字節陣列具有65280個元件。我已經檢查了幾個與此類似的StackOverflow貼子,但沒有任何工作。我曾嘗試將FromStream方法的useEmbeddedColorManagementvalidateImageData參數設置爲False和True,但這並不能解決問題。

對於如何糾正ArgumentException,你有什麼建議嗎?

回答

6

FromStream在這些格式中的一個期望的數據:

管理GDI +具有支持以下文件類型的內置編碼器和解碼器:

BMP 

GIF 

JPEG 

PNG 

TIFF 

你的字節數組,我懷疑不在這些格式中,並且沒有這些格式所需的元數據或壓縮信息。

你想做的是創建一個Bitmap對象,並讀取字節數組中的每個像素,調用適當像素的位圖中的SetPixel。你最終會得到一個具有你想要的像素的位圖(這是一個圖像)。

+0

優秀。謝謝。這是一個灰度圖像。當我使用SetPixel方法時,如何將灰度值(0-255)轉換爲系統顏色? – blueshift

+1

如果值是v,新的顏色(v,v,v)應該能夠實現這個功能(創建一個具有相同RGB分量的顏色,它應該是灰色的) – antlersoft

+0

這樣做。謝謝你的出色答案。幾個小時一直讓我發瘋。 – blueshift

4

嘗試以下方法:

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

除了> ggsmartboy爲VB.NET答案:

在模塊/類的頂部/形式

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 

乾杯