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
  • 相关阅读:
    递归算法的时间复杂度
    5分钟了解lucene全文索引
    Codeforces Round #234A
    快速排序法
    构造方法、类的初始化块以及类字段的初始化顺序
    Java之方法重载篇(我重载了,你要如何来调用我。。)
    突如其来的"中断异常",我(Java)该如何处理?
    一个简单的wed服务器SHTTPD(4)————SHTTPD支持CGI的实现
    一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现
    一个简单的wed服务器SHTTPD(2)———— 客户端请求分析
  • 原文地址:https://www.cnblogs.com/Jane-share/p/15741397.html
Copyright © 2011-2022 走看看