• Introduction
  • Programmer's Guide
  • Technical Articles
  • API Documentation
Search Results for

    Show / Hide Table of Contents
    • ic4
      • BufferPool
      • DeviceEnum
      • DeviceInfo
      • Display
      • DisplayNotation
      • DisplayRenderPosition
      • DisplayStatistics
      • DisplayType
      • EmbeddedDisplay
      • ErrorCode
      • ExternalOpenGLDisplay
      • FloatRepresentation
      • FloatingDisplay
      • FrameMetaData
      • Grabber
      • HandleObject
      • IBufferAllocator
      • IC4Exception
      • IDisplay
      • ImageBuffer
      • ImageBuffer.CopyOptions
      • ImageBufferExtensions
      • ImageBufferExtensionsOpenCvSharp
      • ImageType
      • IntRepresentation
      • Interface
      • Library
      • LogLevel
      • LogTarget
      • PixelFormat
      • PixelFormatExtensions
      • PngCompressionLevel
      • PropBoolean
      • PropCategory
      • PropCommand
      • PropEnumEntry
      • PropEnumeration
      • PropFloat
      • PropId
      • PropIdBoolean
      • PropIdCommand
      • PropIdEnumeration
      • PropIdFloat
      • PropIdInteger
      • PropIdRegister
      • PropIdString
      • PropInteger
      • PropRegister
      • PropString
      • Property
      • PropertyIncrementMode
      • PropertyMap
      • PropertyType
      • PropertyVisibility
      • QueueSink
      • QueueSinkConnectedEventArgs
      • QueueSinkEventArgs
      • QueueSinkQueueSizes
      • Sink
      • SinkMode
      • SinkType
      • SnapSink
      • SnapSinkAllocationStrategy
      • StreamSetupOption
      • StreamStatistics
      • TransportLayerType
      • VersionInfoFlags
      • VideoWriter
      • VideoWriterType

    Class SnapSink

    The snap sink is a sink implementation that allows a program to capture single images or sequences of images on demand, while still having a display showing all images.

    Inheritance
    object
    HandleObject
    Sink
    SnapSink
    Implements
    IDisposable
    Inherited Members
    Sink.IsAttached
    Sink.Mode
    HandleObject.Dispose(bool)
    HandleObject.Dispose()
    object.Equals(object)
    object.Equals(object, object)
    object.GetHashCode()
    object.GetType()
    object.MemberwiseClone()
    object.ReferenceEquals(object, object)
    object.ToString()
    Namespace: ic4
    Assembly: ic4dotnet.dll
    Syntax
    public class SnapSink : Sink, IDisposable
    Remarks

    To create a snap sink, use SnapSink(IEnumerable<PixelFormat>, SnapSinkAllocationStrategy, IBufferAllocator).

    Pass the sink to StreamSetup(Sink, IDisplay, StreamSetupOption) or StreamSetup(Sink, StreamSetupOption) to feed images into the sink.

    To grab a single image out of the stream, call SnapSingle(TimeSpan). To grab a sequence of images, call SnapSequence(int, TimeSpan).

    The snap sink manages the buffers used for background image aquisition as well as for the grabbed images. During stream setup, a number of buffers is allocated depending on the configured allocation strategy. Additional buffers can be automatically created on demand, if the allocation strategy allows. Likewise, if there is a surplus of unused image buffers, unused buffers are reclaimed and released automatically.

    Image buffers that were returned by one of the snap functions are owned by their respective caller through the reference to the ImageBuffer. To return the image buffer to the sink for reuse, call Dispose() on the image buffer.

    Please note that if there are no buffers available in the sink when the device tries to deliver a frame, the frame will be dropped. Use StreamStatistics to find out whether a buffer underrun occurred.

    By default, the sink uses buffers provided by the device driver or the implicitly created transformation filter. It is possible to use program-defined buffers be used by providing a IBufferAllocator to the sink constructor.

    Constructors

    SnapSink(IEnumerable<PixelFormat>, SnapSinkAllocationStrategy, IBufferAllocator)

    Creates a new snap sink.

    Declaration
    public SnapSink(IEnumerable<PixelFormat> acceptedPixelFormats = null, SnapSinkAllocationStrategy strategy = null, IBufferAllocator customAllocator = null)
    Parameters
    Type Name Description
    IEnumerable<PixelFormat> acceptedPixelFormats

    An optional list of pixel formats that restrict the input to this sink.

    This can be used to force an automatic conversion from the device's pixel format to a pixel format usable by the sink.

    SnapSinkAllocationStrategy strategy

    An optional buffer allocation strategy for the sink.

    If this is null, a default allocation strategy is used.

    IBufferAllocator customAllocator

    An optional custom buffer allocator

    Exceptions
    Type Condition
    ArgumentException

    The buffer allocation strategy is invalid.

    IC4Exception

    Check ErrorCode and ToString() for details.

    SnapSink(PixelFormat, SnapSinkAllocationStrategy, IBufferAllocator)

    Creates a new snap sink.

    Declaration
    public SnapSink(PixelFormat acceptedPixelFormat, SnapSinkAllocationStrategy strategy = null, IBufferAllocator customAllocator = null)
    Parameters
    Type Name Description
    PixelFormat acceptedPixelFormat

    A pixel format that restricts the input to this sink.

    This can be used to force an automatic conversion from the device's pixel format to a pixel format usable by the sink.

    SnapSinkAllocationStrategy strategy

    An optional buffer allocation strategy for the sink.

    If this is null, a default allocation strategy is used.

    IBufferAllocator customAllocator

    An optional custom buffer allocator

    Exceptions
    Type Condition
    ArgumentException

    The buffer allocation strategy is invalid.

    IC4Exception

    Check ErrorCode and ToString() for details.

    Properties

    OutputImageType

    The image type of the images the sink is configured to receive

    Declaration
    public ImageType OutputImageType { get; }
    Property Value
    Type Description
    ImageType

    The image type of the images the sink is configured to receive

    Exceptions
    Type Condition
    IC4Exception

    Check ErrorCode and ToString() for details.

    Type

    The type of the sink.

    For snap sinks, this always is SnapSink.

    Declaration
    public override SinkType Type { get; }
    Property Value
    Type Description
    SinkType

    The type of the sink.

    Overrides
    Sink.Type

    Methods

    SnapSequence(int, TimeSpan)

    Grabs a sequence of images out of the video stream received from the video capture device.

    Declaration
    public IReadOnlyList<ImageBuffer> SnapSequence(int count, TimeSpan timeout)
    Parameters
    Type Name Description
    int count

    Number of images to grab

    TimeSpan timeout

    Time to wait for all images to arrive

    Returns
    Type Description
    IReadOnlyList<ImageBuffer>

    The list of grabbed images.

    If the timeout expires, the returned list contains the images grabbed until then.

    Remarks

    This operation is only valid while the sink is connected to a device in a data stream.

    After a successfull call, the program owns the image buffers through the ImageBuffer references. The image buffer objects must be disposed to put the image buffer into the sink's free queue for later reuse.

    If the image buffer objects are not disposed, their finalizer will also return the image buffers to the sink. However, it is recommended to always manually dispose the image buffers for deterministic behavior.

    Exceptions
    Type Condition
    TimeoutException

    No images were received before the timeout elapsed.

    IC4Exception

    Check ErrorCode and ToString() for details.

    SnapSingle(TimeSpan)

    Grabs a single image out of the video stream received from the video capture device.

    Declaration
    public ImageBuffer SnapSingle(TimeSpan timeout)
    Parameters
    Type Name Description
    TimeSpan timeout

    Time to wait for a new image to arrive

    Returns
    Type Description
    ImageBuffer

    A filled image buffer

    Remarks

    This operation is only valid while the sink is connected to a device in a data stream.

    After a successfull call, the program owns the image buffer through the ImageBuffer reference. The image buffer object must be disposed to put the image buffer into the sink's free queue for later reuse.

    If the image buffer object is not disposed, their finalizer will also return the image buffer to the sink. However, it is recommended to always manually dispose the image buffer for deterministic behavior.

    Exceptions
    Type Condition
    TimeoutException

    No image was received before the timeout elapsed.

    IC4Exception

    Check ErrorCode and ToString() for details.

    TrySnapSingle(out ImageBuffer, TimeSpan)

    Tries to grab a single image out of the video stream received from the video capture device.

    In contrast to SnapSingle(TimeSpan), this function does not throw an exception in case of an error.

    Declaration
    public bool TrySnapSingle(out ImageBuffer buffer, TimeSpan timeout)
    Parameters
    Type Name Description
    ImageBuffer buffer

    Output parameter receiving the grabber image buffer

    TimeSpan timeout

    Time to wait for a new image to arrive

    Returns
    Type Description
    bool

    true, if a buffer was grabbed successfully, otherwise false.

    Remarks

    This operation is only valid while the sink is connected to a device in a data stream.

    After a successfull call, the program owns the image buffer through the ImageBuffer reference. The image buffer object must be disposed to put the image buffer into the sink's free queue for later reuse.

    If the image buffer object is not disposed, their finalizer will also return the image buffer to the sink. However, it is recommended to always manually dispose the image buffer for deterministic behavior.

    Implements

    IDisposable
    In this article
    Copyright ©️ 2024 The Imaging Source Europe GmbH www.theimagingsource.com