Exemple #1
0
        /// <summary>
        /// 图像采集函数 ,线程
        /// </summary>
        private void ShowThread()
        {
            while (true)
            {
                if (frameList.Count == 0)
                {
                    Thread.Sleep(10);
                    continue;
                }

                /* 图像队列取最新帧 */
                mutex.WaitOne();
                IGrabbedRawData frame = frameList.ElementAt(frameList.Count - 1);
                frameList.Clear();
                mutex.ReleaseMutex();

                /* 主动调用回收垃圾 */
                GC.Collect();

                /* 控制显示最高帧率为25FPS */
                if (false == IsTimeToDisplay())
                {
                    continue;
                }

                try
                {
                    /* 图像转码成bitmap图像 */
                    var     bitmap = frame.ToBitmap(false);
                    HObject image  = BitmapToHImage(bitmap);
                    OnImageAcqed(image);//触发事件
                    try
                    {
                        image.Dispose();
                        image = null;
                    }
                    catch { }
                    try
                    {
                        bitmap.Dispose();
                        bitmap = null;
                    }
                    catch { }
                }
                catch (Exception exception)
                {
                    Catcher.Show(exception);

                    /* MessageBox.Show("Dahua:系统异常");
                     * Environment.Exit(0);*/
                }
            }
        }
Exemple #2
0
        private void ShowThread()  // 开启线程采集
        {
            try
            {
                while (m_bShowLoop)
                {
                    if (m_frameList.Count == 0)
                    {
                        Thread.Sleep(10);
                        continue;
                    }

                    /* 图像队列取最新帧 */
                    m_mutex.WaitOne();
                    IGrabbedRawData frame = m_frameList.ElementAt(m_frameList.Count - 1);
                    m_frameList.Clear();
                    m_mutex.ReleaseMutex();

                    /* 主动调用回收垃圾 */
                    GC.Collect();

                    /* 控制显示最高帧率为25FPS */
                    if (false == isTimeToDisplay())
                    {
                        continue;
                    }

                    try
                    {
                        /* 图像转码成bitmap图像 */
                        var bitmap = frame.ToBitmap(false);
                        //   Bitmap bit = bitmap.Clone();
                        m_bShowByGDI = true;
                        if (m_bShowByGDI)
                        {
                            HImage himage = BitmapToHImage(bitmap);
                            /// 添加事件通过绑定事件的方式进行图像传播
                            DoSomething(bitmap, himage);
                        }
                    }
                    catch (Exception exception)
                    {
                        Catcher.Show(exception);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// 码流捕获函数
        /// </summary>
        /// <param name="sender">事件投递方</param>
        /// <param name="e">码流事件参数</param>
        private void OnImageGrabbing(object sender, IGrabbedEventArg e)
        {
            // 停止采集
            if (Interlocked.Read(ref _bCollection) == 0)
            {
                return;
            }

            // 更新样本数据,通知算法线程
            if (Interlocked.CompareExchange(ref _bAlgorithmRunning, 1, 0) == 0)
            {
                _FrameData = null;
                _FrameData = e.GrabResult;
                _DetectBarCodeEvent.Set();
            }
        }
Exemple #4
0
        /* 转码显示线程 */
        private void ShowThread()
        {
            while (m_bShowLoop)
            {
                if (m_frameList.Count == 0)
                {
                    Thread.Sleep(10);
                    continue;
                }

                /* 图像队列取最新帧 */
                m_mutex.WaitOne();
                IGrabbedRawData frame = m_frameList.ElementAt(m_frameList.Count - 1);
                m_frameList.Clear();
                m_mutex.ReleaseMutex();

                /* 主动调用回收垃圾 */
                GC.Collect();

                /* 控制显示最高帧率为25FPS */
                if (false == isTimeToDisplay())
                {
                    continue;
                }

                try
                {
                    /* 图像转码成bitmap图像 */
                    bitmap       = frame.ToBitmap(false);
                    m_bShowByGDI = true;
                    if (m_bShowByGDI)
                    {
                        /* 使用GDI绘图 */
                        if (_g == null)
                        {
                            _g = pbImage.CreateGraphics();
                        }
                        _g.DrawImage(bitmap, new Rectangle(0, 0, pbImage.Width, pbImage.Height),
                                     new Rectangle(0, 0, bitmap.Width, bitmap.Height), GraphicsUnit.Pixel);
                        if (bitmap != null)
                        {
                            imgOri = bitmap;
                        }
                        // bitmap.Save(strSavePath + strFileName);
                        // bitmap.Dispose();
                    }
                    else
                    {
                        /* 使用控件绘图,会造成主界面卡顿 */
                        if (InvokeRequired)
                        {
                            BeginInvoke(new MethodInvoker(() =>
                            {
                                try
                                {
                                    pbImage.Image = bitmap;
                                }
                                // save captured image
                                // bitmap.Save("C:\\Users\\rocki\\Desktop\\captured\\shot.jpg");

                                catch (Exception exception)
                                {
                                    Catcher.Show(exception);
                                }
                            }));
                        }
                    }
                }
                catch (Exception exception)
                {
                    Catcher.Show(exception);
                }
            }
        }
        private void LocalImageGrabbing()
        {
            List <Bitmap>  bitmapList = new List <Bitmap>();
            LocalFrameData bitmapData;

            System.Drawing.Imaging.BitmapData bmpData;
            try
            {
                if (MvBarCode.MvBarCodeGlobalVar.LocalImagePath == string.Empty)
                {
                    Console.WriteLine("没有本地目录");
                    return;
                }


                string        imgType = "*.bmp|*.png|*.jpg";
                string[]      ImgType = imgType.Split('|');
                List <string> Dirs    = new List <string>();
                for (int i = 0; i < ImgType.Length; i++)
                {
                    Dirs.AddRange(Directory.GetFiles(string.Format(MvBarCode.MvBarCodeGlobalVar.LocalImagePath), ImgType[i]));
                }
                //_FrameData
                //string[] dirs = Directory.GetFiles();

                foreach (var d in Dirs)
                {
                    Bitmap img = new Bitmap(d);

                    bitmapList.Add(img);
                }

                foreach (var b in bitmapList)
                {
                    Thread.Sleep(1000);

                    if (Interlocked.CompareExchange(ref _bAlgorithmRunning, 1, 0) == 0)
                    {
                        Rectangle rect = new Rectangle(0, 0, b.Width, b.Height);
                        bmpData    = b.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, b.PixelFormat);
                        bitmapData = new LocalFrameData(b.Width, b.Height, b, bmpData.Scan0);
                        b.UnlockBits(bmpData);

                        _FrameData = bitmapData;

                        _DetectBarCodeEvent.Set();
                    }
                }

                Thread.Sleep(3000);

                foreach (var b in bitmapList)
                {
                    //b.Dispose();
                }
            }
            catch (Exception e)
            {
                MvBarCode.MvBarCodeGlobalVar.Log.Error(e);
            }
        }