zoukankan      html  css  js  c++  java
  • C#&Basler Demo学习Grab_UsingGrabLoopThread

    说明

    This sample illustrates how to grab and process images using the grab loop thread provided by the
    Camera class

    读程序

    image

    image
    在循环中自己会调用RetrieveResult,不需要单独调用。图像由ImageGrabbed event handlers处理。当抓取开始时循环就已经开始了。
    image
    好像逐渐开始理解事件这玩意是怎么用的了
    image
    这段程序很有意思,在很多例程中都看到了WaitForFrameTriggerReady和ExecuteSoftwareTrigger()。但他们是干嘛的呢?

    • WaitForFrameTriggerReady:在相机准备好接收软件触发之前轮询相机的参数。
      how to use this function to poll until the camera is ready to accept a trigger?
      image

    • executes the software trigger command命令是执行啥内容呢?就是软件触发了?
      image
      好像知道错在哪了,再看看改一改程序

    程序代码

    Grab_UsingGrabLoopThread.cs
    /*
        This sample illustrates how to grab and process images using the grab loop thread
        provided by the Instant Camera class.
    */
    
    using System;
    using System.Threading;
    using Basler.Pylon;
    
    namespace Grab_UsingGrabLoopThread
    {
        class Grab_UsingGrabLoopThread
        {
            // Example of an image event handler.
            static void OnImageGrabbed(Object sender, ImageGrabbedEventArgs e)
            {
                // The grab result is automatically disposed when the event call back returns.
                // The grab result can be cloned using IGrabResult.Clone if you want to keep a copy of it (not shown in this sample).
                IGrabResult grabResult = e.GrabResult;
                // Image grabbed successfully?
                if (grabResult.GrabSucceeded)
                {
                    // Access the image data.
                    Console.WriteLine("SizeX: {0}", grabResult.Width);
                    Console.WriteLine("SizeY: {0}", grabResult.Height);
                    byte[] buffer = grabResult.PixelData as byte[];
                    Console.WriteLine("Gray value of first pixel: {0}", buffer[0]);
                    Console.WriteLine("");
    
                    // Display the grabbed image.
                    ImageWindow.DisplayImage(0, grabResult);
                    ImagePersistence.Save(ImageFileFormat.Bmp, "test.bmp", grabResult);
                }
                else
                {
                    Console.WriteLine("Error: {0} {1}", grabResult.ErrorCode, grabResult.ErrorDescription);
                }
            }
    
            internal static void Main()
            {
                // The exit code of the sample application.
                int exitCode = 0;
    
                try
                {
                    // Create a camera object that selects the first camera device found.
                    // More constructors are available for selecting a specific camera device.
                    using (Camera camera = new Camera(CameraSelectionStrategy.FirstFound))
                    {
                        // Print the model name of the camera.
                        Console.WriteLine("Using camera {0}.", camera.CameraInfo[CameraInfoKey.ModelName]);
    
                        // Set the acquisition mode to software triggered continuous acquisition when the camera is opened.
                        camera.CameraOpened += Configuration.SoftwareTrigger;
    
                        //Open the connection to the camera device.
                        camera.Open();
    
                        //Check if camera supports waiting for trigger ready
                        if (camera.CanWaitForFrameTriggerReady)
                        {
    
                            // Set a handler for processing the images.
                            camera.StreamGrabber.ImageGrabbed += OnImageGrabbed;
    
                            // Start grabbing using the grab loop thread. This is done by setting the grabLoopType parameter
                            // to GrabLoop.ProvidedByStreamGrabber. The grab results are delivered to the image event handler OnImageGrabbed.
                            // The default grab strategy (GrabStrategy_OneByOne) is used.
                            camera.StreamGrabber.Start(GrabStrategy.OneByOne, GrabLoop.ProvidedByStreamGrabber);
    
                            // Wait for user input to trigger the camera or exit the loop.
                            // Software triggering is used to trigger the camera device.
                            Char key;
                            do
                            {
                                Console.WriteLine("Press 't' to trigger the camera or 'e' to exit.");
    
                                key = Console.ReadKey(true).KeyChar;
                                if ((key == 't' || key == 'T'))
                                {
                                    // Execute the software trigger. Wait up to 1000 ms until the camera is ready for trigger.
                                    if (camera.WaitForFrameTriggerReady(1000, TimeoutHandling.ThrowException))
                                    {
                                        camera.ExecuteSoftwareTrigger();
                                    }
                                }
                            }
                            while ((key != 'e') && (key != 'E'));
    
                            // Stop grabbing.
                            camera.StreamGrabber.Stop();
                        }
                        else
                        {
                            Console.WriteLine("This sample can only be used with cameras that can be queried whether they are ready to accept the next frame trigger.");
                        }
    
                        // Close the connection to the camera device.
                        camera.Close();
                    }
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine("Exception: {0}", e.Message);
                    exitCode = 1;
                }
                finally
                {
                    // Comment the following two lines to disable waiting on exit.
                    Console.Error.WriteLine("\nPress enter to exit.");
                    Console.ReadLine();
                }
    
                Environment.Exit(exitCode);
            }
        }
    }
    
    
    橘子Jane
  • 相关阅读:
    Dialog中添加多选按钮CheckBox
    把格式日期转换成毫秒
    监听EditText输入事件
    浅析LocationManager的位置定位
    Android 字体设置
    Android开发之InstanceState详解
    Bash中自动补全时忽略大小写
    51与PC通信协议设计及实现(九):更深入的扩展
    推到重做
    51与PC通信协议设计及实现(五):问题收集解决随笔
  • 原文地址:https://www.cnblogs.com/Jane-share/p/15741397.html
Copyright © 2011-2022 走看看