【发布时间】:2018-04-09 10:56:13
【问题描述】:
我正在尝试从 WPF 中的相机扫描 QR 码(使用 Zxing - ZXing 的解码方法仅适用于位图)。这是我所拥有的:
void Window2_Loaded(object sender, RoutedEventArgs e)
{
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 5, 0);
LoaclWebCamsCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);
LocalWebCam = new VideoCaptureDevice(LoaclWebCamsCollection[1].MonikerString);
LocalWebCam.NewFrame += new NewFrameEventHandler(Cam_NewFrame);
LocalWebCam.Start();
dispatcherTimer.Start();
}
convert 方法(位图源到位图) - 从另一个线程得到它:
Bitmap GetBitmap(BitmapSource source)
{
Bitmap bmp = new Bitmap(
source.PixelWidth,
source.PixelHeight,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
BitmapData data = bmp.LockBits(
new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size),
ImageLockMode.WriteOnly,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
source.CopyPixels(
Int32Rect.Empty,
data.Scan0,
data.Height * data.Stride,
data.Stride);
bmp.UnlockBits(data);
return bmp;
}
还有定时器方法:
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
BarcodeReader Reader = new BarcodeReader();
if (frameHolder.Source != null)
{
Result result = Reader.Decode(GetBitmap((BitmapSource)frameHolder.Source));
decoded = result.ToString().Trim();
hey.Text = decoded;
}
}
以及新的框架方法:
void Cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
try
{
System.Drawing.Bitmap img = (Bitmap)eventArgs.Frame.Clone();
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Bmp);
ms.Seek(0, SeekOrigin.Begin);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
bi.Freeze();
Dispatcher.BeginInvoke(new ThreadStart(delegate
{
frameHolder.Source = bi;
}));
}
catch (Exception ex)
{
}
}
frameHolder是我的图像控件。
我做错了什么?我很确定他不能从frameHolder 中得到Bitmap,但我不知道为什么。
【问题讨论】:
-
我做错了什么?这里可能没有先知。只要您不说出您期望的结果以及实际发生的情况,没有人可以帮助您。您可能有兴趣了解how to ask a good question 和how to create a minimal, complete and verifiable example。
标签: c# wpf bitmap zxing imagesource