用了Zxing和Emgu
Emgu用来打开笔记本的摄像头采图,然后通过zxing实时读取QR码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;
using com.google.zxing;
using com.google.zxing.common;
using com.google.zxing.qrcode;
using System.Threading;
namespace DuQRmaAAA
{
public partial class Form1 : Form
{
VideoCapture _capture = null;
Mat _frame = new Mat();
private bool _captureInProgress;
delegate void sss(string s);
Thread t;
public Form1()
{
InitializeComponent();
CvInvoke.UseOpenCL = false;
try
{
_capture = new VideoCapture();
_capture.ImageGrabbed += ProcessFrame;
}
catch (NullReferenceException excpt)
{
MessageBox.Show(excpt.Message);
}
}
private void ProcessFrame(object sender, EventArgs arg)
{
if (_capture != null && _capture.Ptr != IntPtr.Zero)
{
_capture.Retrieve(_frame, 0);
imageBox1.Image = _frame;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (_capture != null)
{
if (_captureInProgress)
{
button1.Text = "Start";
_capture.Pause();
}
else
{
button1.Text = "Stop";
_capture.Start();
}
_captureInProgress = !_captureInProgress;
}
}
private void button2_Click(object sender, EventArgs e)
{
t = new Thread(DDDcode);
t.Start();
}
private void DDDcode()
{
while (true)
{
try
{
Bitmap bmap = _frame.Bitmap;
LuminanceSource source = new RGBLuminanceSource(bmap, bmap.Width, bmap.Height);
com.google.zxing.BinaryBitmap bitmap = new com.google.zxing.BinaryBitmap(new HybridBinarizer(source));
Result result;
result = new QRCodeReader().decode(bitmap);
XS(result.Text);
}
catch (Exception eee)
{
}
}
}
private void XS(string s)
{
if (textBox1.InvokeRequired)
{
textBox1.Invoke(new sss(XS), new object[] { s });
}
else
{
textBox1.Text = s;
}
}
private void ReleaseData()
{
if (_capture != null)
_capture.Dispose();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (t != null)
t.Abort();
}
}
}
恩 就这样子