3

我正在尝试从字节数组创建图像。字节数组由指纹扫描仪创建(参见 CaptureFrame 方法)。fwidth 为 256,fheight 为 255。

当我运行下面的代码时,我得到

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 方法的useEmbeddedColorManagementandvalidateImageData参数设置为 False 和 True,但这并不能解决问题。

你对如何纠正有什么建议ArgumentException吗?

4

3 回答 3

11

FromStream 需要以下格式之一的数据:

托管 GDI+ 具有支持以下文件类型的内置编码器和解码器:

  • BMP
  • 动图
  • JPEG
  • PNG
  • 国际电影节

我怀疑您的字节数组不在这些格式中,并且没有每种格式所期望的元数据或压缩信息。

您要做的是创建一个 Bitmap 对象并读取字节数组中的每个像素,在位图中调用 SetPixel 以获得适当的像素。你最终会得到一个包含你想要的像素的位图(它是一个图像)。

于 2011-07-15T20:16:37.073 回答
5

尝试以下操作:

TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(byteArray);
于 2012-06-16T13:46:48.433 回答
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

干杯

于 2017-02-09T16:51:38.283 回答