Transitioning from IC Imaging Control 3.x .NET Component

This section contains information about the IC Imaging Control 4 .NET Class Library from the perspective of a user of the IC Imaging Control 3.x .NET Component.

Key Differences

The IC Imaging Control 4 .NET Class Library is a spiritual successor to the IC Imaging Control 3.x .NET Component, but not source code compatible. Support for many DirectShow-specific concepts, such as video formats and fixed frame rates has been dropped. Rarely used functionalities such as frame filters, debayering configuration were removed.

The IC Imaging Control 4 .NET Class Library is compatible with both .NET Framework 4.5 and .NET 6.0 or later.

While the IC Imaging Control 3.x .NET Component supported DirectShow devices, the IC Imaging Control 4 .NET Class Library uses the machine vision standard GenICam GenTL as its driver interface. This allows the use of advanced camera features such as asynchronous device events or chunk data.

Familiar Concepts

Device and Stream Handling

Like the TIS.Imaging.ICImagingControl class, the Grabber class represents an opened video capture device as well as its possibly enabled data stream.

Display in a Windows Forms Control

Use the WinForms.Display control to display images in a Windows Forms application.

Access to Images Through Sink Types

Like in 3.5, images from the video capture device flow into a Sink object and can be accessed from there. Both the SnapSink and QueueSink are available and its use should be familiar to previous users of FrameSnapSink and FrameQueueSink.

Changed Concepts

Device Enumeration

Instead of providing only a flat list of device names, the IC Imaging Control 4 .NET Class Library contains a device enumerator class (DeviceEnum).

The device enumerator allows enumerating video capture devices and exposes device information through DeviceInfo It also provides information about the system topology, like information about the network adapters or USB controllers GigEVision or USB3 Vision devices are attached to.

Device Properties

The VCDProperty interface with replaced with a new object-oriented API (See Accessing Device Properties). Since device drivers describe their property interfaces via GenICam, the new property API can provide a rich set of information about properties, such as a description, a display name, a unit and representation hints for user interfaces.

Additionally, properties provide a callback mechanism to notify the program when an aspect of the property such as value or availability changes.

Video Formats, Video Norms, Frame Rates

There no longer are API functions for video format or frame rate enumeration. Instead, the image size and frame rate are configured using the Width, Height and AcquisitionFrameRate device properties.

Video Files

Video encoding functionality was detached from the grabber. Instead, create a VideoWriter object to save images that were captured using a Sink.

Display

In version 3.x, the display was an implicit part of the ICImagingControl control. In IC 4, a Display can be created and attached to a data stream while calling Grabber.StreamSetup or one of its overloads. A display can also be used for manual display of selected ImageBuffer objects.

Display capabilities are available through the generic EmbeddedDisplay and FloatingDisplay classes. For Windows Forms applications, the specialized WinForms.Display control is avaliable.

Renamed Concepts

Live Mode

Grabber functions that 3.x were related live mode were renamed to match the GenICam GenTL nomenclature consisting of a two-stage initialization: First, a data stream is established, and then image acquisition is started.

Renamed Data Types

  • FrameType was replaced by ImageType.
  • The role of IFrame/FrameQueueBuffer is fulfilled by ImageBuffer objects. Some aspects of the former FrameType, e.g. the buffer size, are now part of the image buffer itself (ImageBuffer.BufferSize)
  • VideoCaptureDeviceItem has been replaced by DeviceInfo.
  • FrameQueueSink has been replaced by QueueSink, the behavior is slightly changed.
  • FrameSnapSink has been replaced by SnapSink, the behavior is slightly changed.

New Property API

  • VCDPropertyItems is replaced by PropertyMap, which, in addition to property enumeration, also contains methods for direct property access.
  • VCDRangeProperty is replaced by PropInteger
  • VCDAbsValProperty is replaced by PropFloat
  • VCDMapStringsProperty is replaced by PropEnumeration
  • VCDSwitchProperty is replaced by PropBoolean