【发布时间】:2016-02-10 17:55:11
【问题描述】:
我对这个项目的目标是使用 VB.net 创建一个 Windows 窗体应用程序,以从图像中读取条形码(现在形成一个文件,稍后用网络摄像头拍摄)并将文本写入文本框。我发现了很多例子,说明如何使用 Zxing 库对除 vb.net 之外的几乎所有语言的条形码进行解码。我有一张包含代码 39(我相信)条形码的图像。
添加对 Zxing.dll 的引用并导入所需的命名空间后,我有这个:
Imports ZXing.OneD
Public Class Form2
Private webcam As WebCam
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
webcam = New WebCam()
webcam.InitializeWebCam(imgVideo)
webcam.Start()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
imgCapture.Image = imgVideo.Image 'I plan to use this later
Dim reader As New ZXing.OneD.Code39Reader
Dim image1 As Bitmap
image1 = Image.FromFile("C:\Capture.jpg") 'this is the image I'm using for testing purposes
reader.decode(image1)
End Sub
End Class
reader.decode(image1) 行产生错误:
"Error 1 Value of type 'System.Drawing.Bitmap' cannot be converted to 'ZXing.BinaryBitmap'"
显然,我正在涉足一些我还不明白的事情......所以我正在寻求帮助!我正在使用 Visual Studio 2010 Express。
我又改了一次。此代码不会产生任何错误,但它不会返回任何内容。
Imports ZXing
Imports ZXing.OneD
Public Class Form2
Private webcam As WebCam
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
webcam = New WebCam()
webcam.InitializeWebCam(imgVideo)
webcam.Start()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
imgCapture.Image = imgVideo.Image 'I plan to use this later
Dim reader As Code39Reader = New Code39Reader
Dim image1 As Bitmap = New Bitmap("C:\Capture.bmp")
Dim bitmapBytes As Byte()
Using stream As New System.IO.MemoryStream
image1.Save(stream, image1.RawFormat)
bitmapBytes = stream.GetBuffer
End Using
Dim Lumin As LuminanceSource = New RGBLuminanceSource(bitmapBytes, image1.Width, image1.Height, bitmapFormat:=RGBLuminanceSource.BitmapFormat.RGB24)
Dim HBin As Common.HybridBinarizer = New Common.HybridBinarizer(Lumin)
Dim Bitm As BinaryBitmap = New BinaryBitmap(HBin)
Dim res As String = reader.decode(Bitm).Text
End Sub
End Class
编辑* 这是有效的解决方案。谢谢大家的帮助!
Imports ZXing
Imports ZXing.OneD
Imports System.IO
Public Class Form2
Private webcam As WebCam
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
webcam = New WebCam()
webcam.InitializeWebCam(imgVideo)
webcam.Start()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
imgCapture.Image = imgVideo.Image 'I plan to use this later
Dim reader As New ZXing.BarcodeReader
Dim image1 As Bitmap
image1 = Image.FromFile("C:\Capture.bmp")
Dim res As Result = reader.Decode(image1)
MsgBox(res.Text)
End Sub
Public Function GetRGBValues(ByVal Bmp As Bitmap) As Byte()
Dim Rect As New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim BmpData As System.Drawing.Imaging.BitmapData = Bmp.LockBits(Rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, Bmp.PixelFormat)
Dim Ptr As IntPtr = BmpData.Scan0
Dim Bytes As Integer = BmpData.Stride * Bmp.Height
Dim RgbValues As Byte() = New Byte(Bytes - 1) {}
System.Runtime.InteropServices.Marshal.Copy(Ptr, RgbValues, 0, Bytes)
Bmp.UnlockBits(BmpData)
Return RgbValues
End Function
End Class
【问题讨论】:
-
很简单。
reader.decode()采用ZXing.BinaryBitmap类型的参数,但您尝试为其提供System.Drawing.Bitmap类型的参数。因此,您必须以某种方式从普通的Bitmap创建一个ZXing.BinaryBitmap。 -
或许this question 能帮到你?
-
@Visual Vincent - 我已经根据您提供的示例编辑了代码(和我的问题),但仍然没有乐趣
-
它想要一个什么的一维数组??
-
见鬼,如果我知道,错误说“'System.Drawing.Bitmap' 类型的值不能转换为'字节的一维数组'。”