private void CameraZm_NewVideoSample(object sender, WPFMediaKit.DirectShow.MediaPlayers.VideoSampleArgs e) { Dispatcher.Invoke(new Action(delegate() { System.Drawing.Bitmap oNewFrame = e.VideoFrame; var bitmapData = oNewFrame.LockBits( new System.Drawing.Rectangle(0, 0, oNewFrame.Width, oNewFrame.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, oNewFrame.PixelFormat); byte[] oFrameBytes = new byte[bitmapData.Stride * bitmapData.Height]; System.Runtime.InteropServices.Marshal.Copy(bitmapData.Scan0, oFrameBytes, 0, bitmapData.Stride * bitmapData.Height); oNewFrame.UnlockBits(bitmapData); this.ARRgbRaster.wrapBuffer(oFrameBytes); int detectedMkrs = this.ARDetectMarker.detectMarkerLite(this.ARRgbRaster, 100); double d = this.ARDetectMarker.getConfidence(3); int n = this.ARDetectMarker.getARCodeIndex(3); this.TbkInfoZm.Text = detectedMkrs.ToString(); //NyARDoublePoint2d[] points = null; //List<NyARDoublePoint2d[]> ltPoints = new List<NyARDoublePoint2d[]>(); //if (detectedMkrs > 0) //{ // //points = ARDetectMarker.getCorners(0); // //ltPoints.Add(points); // for (int i = 0; i < detectedMkrs; i++) // { // NyARDoublePoint2d[] oMarkerPoints = ARDetectMarker.getCorners(i); // ltPoints.Add(oMarkerPoints); // } //} //Dispatcher.BeginInvoke(new Action(delegate () //{ // try // { // this.CvMainZm.Children.Clear(); // for (int i = 0; i < ltPoints.Count; i++) // { // NyARDoublePoint2d[] oMarkerPoints = ltPoints[i]; // Polygon oPolygon = new Polygon() // { // SnapsToDevicePixels = true, // Fill = new SolidColorBrush(Colors.Violet), // Opacity = 0.8, // Stroke = new SolidColorBrush(Colors.Red) // }; // oPolygon.Points = new PointCollection(new Point[] // { // new Point(oMarkerPoints[0].x, 600 - oMarkerPoints[0].y), // new Point(oMarkerPoints[1].x, 600 - oMarkerPoints[1].y), // new Point(oMarkerPoints[2].x, 600 - oMarkerPoints[2].y), // new Point(oMarkerPoints[3].x, 600 - oMarkerPoints[3].y) // }); // this.CvMainZm.Children.Add(oPolygon); // } // } // catch // { } //}), null); })); }
private void CameraZm_NewVideoSample(object sender, WPFMediaKit.DirectShow.MediaPlayers.VideoSampleArgs e) { Dispatcher.Invoke(new Action(delegate() { System.Drawing.Bitmap oNewFrame = e.VideoFrame; var bitmapData = oNewFrame.LockBits( new System.Drawing.Rectangle(0, 0, oNewFrame.Width, oNewFrame.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, oNewFrame.PixelFormat); byte[] destArr = new byte[bitmapData.Stride * bitmapData.Height]; System.Runtime.InteropServices.Marshal.Copy(bitmapData.Scan0, destArr, 0, bitmapData.Stride * bitmapData.Height); oNewFrame.UnlockBits(bitmapData); this.m_raster.wrapBuffer(destArr); try { int detectedMkrs = this.m_ar.detectMarkerLite(this.m_raster, m_threshold); NyARDoublePoint2d[] points = null; List <NyARDoublePoint2d[]> ltPoints = new List <NyARDoublePoint2d[]>(); if (detectedMkrs > 0) { points = m_ar.getCorners(0); ltPoints.Add(points); for (int i = 0; i < detectedMkrs; i++) { NyARDoublePoint2d[] oMarkerPoints = m_ar.getCorners(i); ltPoints.Add(oMarkerPoints); } } Dispatcher.BeginInvoke(new Action(delegate() { try { this.CvMainZm.Children.Clear(); for (int i = 0; i < ltPoints.Count; i++) { NyARDoublePoint2d[] oMarkerPoints = ltPoints[i]; Polygon oPolygon = new Polygon() { SnapsToDevicePixels = true, Fill = new SolidColorBrush(Colors.Violet), Opacity = 0.8, Stroke = new SolidColorBrush(Colors.Red) }; oPolygon.Points = new PointCollection(new Point[] { new Point(oMarkerPoints[0].x, cameraResY - oMarkerPoints[0].y), new Point(oMarkerPoints[1].x, cameraResY - oMarkerPoints[1].y), new Point(oMarkerPoints[2].x, cameraResY - oMarkerPoints[2].y), new Point(oMarkerPoints[3].x, cameraResY - oMarkerPoints[3].y) }); this.CvMainZm.Children.Add(oPolygon); } } catch {} }), null); } catch {} })); }