/*============================================================================*/
/*                        IMAQ Vision                                         */
/*----------------------------------------------------------------------------*/
/*    Copyright (c) National Instruments 2001.  All Rights Reserved.          */
/*----------------------------------------------------------------------------*/
/*                                                                            */
/* Title:       NIVision.h                                                    */
/*                                                                            */
/*============================================================================*/
#if !defined(NiVision_h)
#define NiVision_h

//============================================================================
//  Includes
//============================================================================
#include <stddef.h>


//============================================================================
//  Control Defines
//============================================================================
#if !defined(IMAQ_IMPORT)
	#ifndef __GNUC__
		#define IMAQ_IMPORT __declspec(dllimport)
	#else
		#define IMAQ_IMPORT
	#endif
#endif

#if !defined(IMAQ_FUNC)
    #if !defined(__cplusplus)
        #define IMAQ_FUNC IMAQ_IMPORT
    #else
        #define IMAQ_FUNC extern "C" IMAQ_IMPORT
    #endif
#endif

#if !defined(IMAQ_STDCALL)
	#ifndef __GNUC__
		#define IMAQ_STDCALL __stdcall
	#else
		#define IMAQ_STDCALL 
	#endif
#endif

#ifdef _CVI_
#pragma EnableLibraryRuntimeChecking
#include <ansi_c.h>
#endif

#define IMAQ_CALLBACK __cdecl

//============================================================================
//  Manifest Constants
//============================================================================
#ifndef NULL
    #ifdef __cplusplus
        #define NULL    0
    #else
        #define NULL    ((void *)0)
    #endif
#endif

#ifndef FALSE
    #define FALSE               0
#endif

#ifndef TRUE
    #define TRUE                1
#endif

#define IMAQ_DEFAULT_SHOW_COORDINATES TRUE
#define IMAQ_DEFAULT_MAX_ICONS_PER_LINE 4
#define IMAQ_DEFAULT_LEARNING_MODE IMAQ_LEARN_SHIFT_INFORMATION
#define IMAQ_DEFAULT_BMP_COMPRESS FALSE
#define IMAQ_DEFAULT_PNG_QUALITY 750
#define IMAQ_DEFAULT_JPEG_QUALITY 750
#define IMAQ_ALL_CONTOURS -1
#define IMAQ_ALL_WINDOWS -1
#define IMAQ_SHIFT      1
#define IMAQ_ALT        2
#define IMAQ_CTRL       4
#define IMAQ_CAPS_LOCK  8
#define IMAQ_MODAL_DIALOG -1
#define IMAQ_INIT_RGB_TRANSPARENT {   0,   0,   0, 1 }
#define IMAQ_INIT_RGB_RED         {   0,   0, 255, 0 }
#define IMAQ_INIT_RGB_BLUE        { 255,   0,   0, 0 }
#define IMAQ_INIT_RGB_GREEN       {   0, 255,   0, 0 }
#define IMAQ_INIT_RGB_YELLOW      {   0, 255, 255, 0 }
#define IMAQ_INIT_RGB_WHITE       { 255, 255, 255, 0 }
#define IMAQ_INIT_RGB_BLACK       {   0,   0,   0, 0 }
#define IMAQ_USE_DEFAULT_QUALITY  -1
#define IMAQ_ALL_SAMPLES          -1
#define IMAQ_ALL_OBJECTS          -1
#define IMAQ_ALL_CHARACTERS       -1

//============================================================================
//  Predefined Valid Characters
//============================================================================
#define IMAQ_ANY_CHARACTER          ""                                                                  //Any Character
#define IMAQ_ALPHABETIC             "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"              //Alphabetic
#define IMAQ_ALPHANUMERIC           "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"    //Alphanumeric
#define IMAQ_UPPERCASE_LETTERS      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"                                        //Uppercase Letters
#define IMAQ_LOWERCASE_LETTERS      "abcdefghijklmnopqrstuvwxyz"                                        //Lowercase Letters
#define IMAQ_DECIMAL_DIGITS         "0123456789"                                                        //Decimal Digits
#define IMAQ_HEXADECIMAL_DIGITS     "0123456789ABCDEFabcdef"                                            //Hexadecimal Digits
#define IMAQ_PATTERN                "\xFF"                                                              //Pattern (A single character string with the character value set to 255)
#define IMAQ_FORCE_SPACE            " "                                                                 //Force Space

//============================================================================
//  Macros
//============================================================================
#define IMAQ_NO_RECT imaqMakeRect( 0, 0, 0x7FFFFFFF, 0x7FFFFFFF)
#define IMAQ_NO_ROTATED_RECT imaqMakeRotatedRect( 0, 0, 0x7FFFFFFF, 0x7FFFFFFF, 0)
#define IMAQ_NO_POINT imaqMakePoint( -1, -1)
#define IMAQ_NO_POINT_FLOAT imaqMakePointFloat( -1.0, -1.0 )
#define IMAQ_NO_OFFSET imaqMakePointFloat( 0.0, 0.0 )



//============================================================================
//  When in Borland, some functions must be mapped to different names.
//  This accomplishes said task.
//============================================================================
#if defined(__BORLANDC__) || (defined(_CVI_) && defined(_NI_BC_))
    #define imaqMakePoint imaqMakePoint_BC
    #define imaqMakePointFloat imaqMakePointFloat_BC
#endif


//============================================================================
//  When in Watcom, some functions must be mapped to different names.
//  This accomplishes said task.
//============================================================================
#if defined(__WATCOMC__) || (defined(_CVI_) && defined(_NI_WC_))
    #define imaqMakePoint imaqMakePoint_BC
    #define imaqMakePointFloat imaqMakePointFloat_BC
#endif

//============================================================================
//  If using Visual C++, force startup & shutdown code to run.
//============================================================================
#if defined(_MSC_VER) && !defined(_CVI_) && !defined(__BORLANDC__)
    #pragma comment(linker, "/INCLUDE:_nivision_startup_shutdown")
    #pragma comment(linker, "/DEFAULTLIB:nivision.lib")
#endif

//============================================================================
//  Error Codes
//============================================================================
#define ERR_SUCCESS                                                  0 // No error.
#define ERR_SYSTEM_ERROR                                             -1074396160 // System error.
#define ERR_OUT_OF_MEMORY                                            -1074396159 // Not enough memory for requested operation.
#define ERR_MEMORY_ERROR                                             -1074396158 // Memory error.
#define ERR_UNREGISTERED                                             -1074396157 // Unlicensed copy of NI Vision.
#define ERR_NEED_FULL_VERSION                                        -1074396156 // The function requires an NI Vision 5.0 Advanced license.
#define ERR_UNINIT                                                   -1074396155 // NI Vision did not initialize properly.
#define ERR_IMAGE_TOO_SMALL                                          -1074396154 // The image is not large enough for the operation.
#define ERR_BARCODE_CODABAR                                          -1074396153 // The barcode is not a valid Codabar barcode.
#define ERR_BARCODE_CODE39                                           -1074396152 // The barcode is not a valid Code 3 of 9 barcode.
#define ERR_BARCODE_CODE93                                           -1074396151 // The barcode is not a valid Code93 barcode.
#define ERR_BARCODE_CODE128                                          -1074396150 // The barcode is not a valid Code128 barcode.
#define ERR_BARCODE_EAN8                                             -1074396149 // The barcode is not a valid EAN8 barcode.
#define ERR_BARCODE_EAN13                                            -1074396148 // The barcode is not a valid EAN13 barcode.
#define ERR_BARCODE_I25                                              -1074396147 // The barcode is not a valid Interleaved 2 of 5 barcode.
#define ERR_BARCODE_MSI                                              -1074396146 // The barcode is not a valid MSI barcode.
#define ERR_BARCODE_UPCA                                             -1074396145 // The barcode is not a valid UPCA barcode.
#define ERR_BARCODE_CODE93_SHIFT                                     -1074396144 // The Code93 barcode contains invalid shift encoding.
#define ERR_BARCODE_TYPE                                             -1074396143 // The barcode type is invalid.
#define ERR_BARCODE_INVALID                                          -1074396142 // The image does not represent a valid linear barcode.
#define ERR_BARCODE_CODE128_FNC                                      -1074396141 // The FNC value in the Code128 barcode is not located before the first data value.
#define ERR_BARCODE_CODE128_SET                                      -1074396140 // The starting code set in the Code128 barcode is not valid.
#define ERR_ROLLBACK_RESOURCE_OUT_OF_MEMORY                          -1074396139 // Not enough reserved memory in the timed environment for the requested operation.
#define ERR_ROLLBACK_NOT_SUPPORTED                                   -1074396138 // The function is not supported when a time limit is active.
#define ERR_DIRECTX_DLL_NOT_FOUND                                    -1074396137 // Quartz.dll not found.  Install DirectX 8.1 or later.
#define ERR_DIRECTX_INVALID_FILTER_QUALITY                           -1074396136 // The filter quality you provided is invalid. Valid quality values range from -1 to 1000.
#define ERR_INVALID_BUTTON_LABEL                                     -1074396135 // Invalid button label.
#define ERR_THREAD_INITIALIZING                                      -1074396134 // Could not execute the function in the separate thread because the thread has not completed initialization.
#define ERR_THREAD_COULD_NOT_INITIALIZE                              -1074396133 // Could not execute the function in the separate thread because the thread could not initialize.
#define ERR_MASK_NOT_TEMPLATE_SIZE                                   -1074396132 // The mask must be the same size as the template.
#define ERR_NOT_RECT_OR_ROTATED_RECT                                 -1074396130 // The ROI must only have either a single Rectangle contour or a single Rotated Rectangle contour.
#define ERR_ROLLBACK_UNBOUNDED_INTERFACE                             -1074396129 // During timed execution, you must use the preallocated version of this operation.
#define ERR_ROLLBACK_RESOURCE_CONFLICT_3                             -1074396128 // An image being modified by one process cannot be requested by another process while a time limit is active.
#define ERR_ROLLBACK_RESOURCE_CONFLICT_2                             -1074396127 // An image with pattern matching, calibration, or overlay information cannot be manipulated while a time limit is active.
#define ERR_ROLLBACK_RESOURCE_CONFLICT_1                             -1074396126 // An image created before a time limit is started cannot be resized while a time limit is active.
#define ERR_INVALID_CONTRAST_THRESHOLD                               -1074396125 // Invalid contrast threshold. The threshold value must be greater than 0. 
#define ERR_INVALID_CALIBRATION_ROI_MODE                             -1074396124 // NI Vision does not support the calibration ROI mode you supplied.
#define ERR_INVALID_CALIBRATION_MODE                                 -1074396123 // NI Vision does not support the calibration mode you supplied.
#define ERR_DRAWTEXT_COLOR_MUST_BE_GRAYSCALE                         -1074396122 // Set the foreground and background text colors to grayscale to draw on a U8 image.
#define ERR_SATURATION_THRESHOLD_OUT_OF_RANGE                        -1074396121 // The value of the saturation threshold must be from 0 to 255.
#define ERR_NOT_IMAGE                                                -1074396120 // Not an image.
#define ERR_CUSTOMDATA_INVALID_KEY                                   -1074396119 // They custom data key you supplied is invalid. The only valid character values are decimal 32-126 and 161-255. There must also be no repeated, leading, or trailing spaces.
#define ERR_INVALID_STEP_SIZE                                        -1074396118 // Step size must be greater than zero and less than Image size
#define ERR_MATRIX_SIZE                                              -1074396117 // Invalid matrix size in the structuring element.
#define ERR_CALIBRATION_INSF_POINTS                                  -1074396116 // Insufficient number of calibration feature points.
#define ERR_CALIBRATION_IMAGE_CORRECTED                              -1074396115 // The operation is invalid in a corrected image.
#define ERR_CALIBRATION_INVALID_ROI                                  -1074396114 // The ROI contains an invalid contour type or is not contained in the ROI learned for calibration.
#define ERR_CALIBRATION_IMAGE_UNCALIBRATED                           -1074396113 // The source/input image has not been calibrated.
#define ERR_INCOMP_MATRIX_SIZE                                       -1074396112 // The number of pixel and real-world coordinates must be equal.
#define ERR_CALIBRATION_FAILED_TO_FIND_GRID                          -1074396111 // Unable to automatically detect grid because the image is too distorted.
#define ERR_CALIBRATION_INFO_VERSION                                 -1074396110 // Invalid calibration information version.
#define ERR_CALIBRATION_INVALID_SCALING_FACTOR                       -1074396109 // Invalid calibration scaling factor.
#define ERR_CALIBRATION_ERRORMAP                                     -1074396108 // The calibration error map cannot be computed.
#define ERR_CALIBRATION_INFO_1                                       -1074396107 // Invalid calibration template image.
#define ERR_CALIBRATION_INFO_2                                       -1074396106 // Invalid calibration template image.
#define ERR_CALIBRATION_INFO_3                                       -1074396105 // Invalid calibration template image.
#define ERR_CALIBRATION_INFO_4                                       -1074396104 // Invalid calibration template image.
#define ERR_CALIBRATION_INFO_5                                       -1074396103 // Invalid calibration template image.
#define ERR_CALIBRATION_INFO_6                                       -1074396102 // Invalid calibration template image.
#define ERR_CALIBRATION_INFO_MICRO_PLANE                             -1074396101 // Invalid calibration template image.
#define ERR_CALIBRATION_INFO_PERSPECTIVE_PROJECTION                  -1074396100 // Invalid calibration template image.
#define ERR_CALIBRATION_INFO_SIMPLE_TRANSFORM                        -1074396099 // Invalid calibration template image.
#define ERR_RESERVED_MUST_BE_NULL                                    -1074396098 // You must pass NULL for the reserved parameter.
#define ERR_INVALID_PARTICLE_PARAMETER_VALUE                         -1074396097 // You entered an invalid selection in the particle parameter.
#define ERR_NOT_AN_OBJECT                                            -1074396096 // Not an object.
#define ERR_CALIBRATION_DUPLICATE_REFERENCE_POINT                    -1074396095 // The reference points passed are inconsistent.  At least two similar pixel coordinates correspond to different real-world coordinates.
#define ERR_ROLLBACK_RESOURCE_CANNOT_UNLOCK                          -1074396094 // A resource conflict occurred in the timed environment. Two processes cannot manage the same resource and be time bounded.
#define ERR_ROLLBACK_RESOURCE_LOCKED                                 -1074396093 // A resource conflict occurred in the timed environment. Two processes cannot access the same resource and be time bounded.
#define ERR_ROLLBACK_RESOURCE_NON_EMPTY_INITIALIZE                   -1074396092 // Multiple timed environments are not supported.
#define ERR_ROLLBACK_RESOURCE_UNINITIALIZED_ENABLE                   -1074396091 // A time limit cannot be started until the timed environment is initialized.
#define ERR_ROLLBACK_RESOURCE_ENABLED                                -1074396090 // Multiple timed environments are not supported.
#define ERR_ROLLBACK_RESOURCE_REINITIALIZE                           -1074396089 // The timed environment is already initialized.
#define ERR_ROLLBACK_RESIZE                                          -1074396088 // The results of the operation exceeded the size limits on the output data arrays.
#define ERR_ROLLBACK_STOP_TIMER                                      -1074396087 // No time limit is available to stop.
#define ERR_ROLLBACK_START_TIMER                                     -1074396086 // A time limit could not be set.
#define ERR_ROLLBACK_INIT_TIMER                                      -1074396085 // The timed environment could not be initialized.
#define ERR_ROLLBACK_DELETE_TIMER                                    -1074396084 // No initialized timed environment is available to close.
#define ERR_ROLLBACK_TIMEOUT                                         -1074396083 // The time limit has expired.
#define ERR_PALETTE_NOT_SUPPORTED                                    -1074396082 // Only 8-bit images support the use of palettes.  Either do not use a palette, or convert your image to an 8-bit image before using a palette.
#define ERR_BAD_PASSWORD                                             -1074396081 // Incorrect password.
#define ERR_INVALID_IMAGE_TYPE                                       -1074396080 // Invalid image type.
#define ERR_INVALID_METAFILE_HANDLE                                  -1074396079 // Invalid metafile handle.
#define ERR_INCOMP_TYPE                                              -1074396077 // Incompatible image type.
#define ERR_COORD_SYS_FIRST_AXIS                                     -1074396076 // Unable to fit a line for the primary axis.
#define ERR_COORD_SYS_SECOND_AXIS                                    -1074396075 // Unable to fit a line for the secondary axis.
#define ERR_INCOMP_SIZE                                              -1074396074 // Incompatible image size.
#define ERR_MASK_OUTSIDE_IMAGE                                       -1074396073 // When the mask's offset was applied, the mask was entirely outside of the image.
#define ERR_INVALID_BORDER                                           -1074396072 // Invalid image border.
#define ERR_INVALID_SCAN_DIRECTION                                   -1074396071 // Invalid scan direction.
#define ERR_INVALID_FUNCTION                                         -1074396070 // Unsupported function.
#define ERR_INVALID_COLOR_MODE                                       -1074396069 // NI Vision does not support the color mode you specified.
#define ERR_INVALID_ACTION                                           -1074396068 // The function does not support the requested action.
#define ERR_IMAGES_NOT_DIFF                                          -1074396067 // The source image and destination image must be different.
#define ERR_INVALID_POINTSYMBOL                                      -1074396066 // Invalid point symbol.
#define ERR_CANT_RESIZE_EXTERNAL                                     -1074396065 // Cannot resize an image in an acquisition buffer.
#define ERR_EXTERNAL_NOT_SUPPORTED                                   -1074396064 // This operation is not supported for images in an acquisition buffer.
#define ERR_EXTERNAL_ALIGNMENT                                       -1074396063 // The external buffer must be aligned on a 4-byte boundary. The line width and border pixels must be 4-byte aligned, as well.
#define ERR_INVALID_TOLERANCE                                        -1074396062 // The tolerance parameter must be greater than or equal to 0.
#define ERR_INVALID_WINDOW_SIZE                                      -1074396061 // The size of each dimension of the window must be greater than 2 and less than or equal to the size of the image in the corresponding dimension.
#define ERR_JPEG2000_LOSSLESS_WITH_FLOATING_POINT                    -1074396060 // Lossless compression cannot be used with the floating point wavelet transform mode. Either set the wavelet transform mode to integer, or use lossy compression.
#define ERR_INVALID_MAX_ITERATIONS                                   -1074396059 // Invalid maximum number of iterations. Maximum number of iterations must be greater than zero.
#define ERR_INVALID_ROTATION_MODE                                    -1074396058 // Invalid rotation mode.
#define ERR_INVALID_SEARCH_VECTOR_WIDTH                              -1074396057 // Invalid search vector width. The width must be an odd number greater than zero.
#define ERR_INVALID_MATRIX_MIRROR_MODE                               -1074396056 // Invalid matrix mirror mode.
#define ERR_INVALID_ASPECT_RATIO                                     -1074396055 // Invalid aspect ratio. Valid aspect ratios must be greater than or equal to zero.
#define ERR_INVALID_CELL_FILL_TYPE                                   -1074396054 // Invalid cell fill type.
#define ERR_INVALID_BORDER_INTEGRITY                                 -1074396053 // Invalid border integrity. Valid values range from 0 to 100.
#define ERR_INVALID_DEMODULATION_MODE                                -1074396052 // Invalid demodulation mode.
#define ERR_INVALID_CELL_FILTER_MODE                                 -1074396051 // Invalid cell filter mode.
#define ERR_INVALID_ECC_TYPE                                         -1074396050 // Invalid ECC type.
#define ERR_INVALID_MATRIX_POLARITY                                  -1074396049 // Invalid matrix polarity.
#define ERR_INVALID_CELL_SAMPLE_SIZE                                 -1074396048 // Invalid cell sample size.
#define ERR_INVALID_LINEAR_AVERAGE_MODE                              -1074396047 // Invalid linear average mode.
#define ERR_INVALID_2D_BARCODE_CONTRAST_FOR_ROI                      -1074396046 // When using a region of interest that is not a rectangle, you must specify the contrast mode of the barcode as either black on white or white on black.
#define ERR_INVALID_2D_BARCODE_SUBTYPE                               -1074396045 // Invalid 2-D barcode Data Matrix subtype.
#define ERR_INVALID_2D_BARCODE_SHAPE                                 -1074396044 // Invalid 2-D barcode shape.
#define ERR_INVALID_2D_BARCODE_CELL_SHAPE                            -1074396043 // Invalid 2-D barcode cell shape.
#define ERR_INVALID_2D_BARCODE_CONTRAST                              -1074396042 // Invalid 2-D barcode contrast.
#define ERR_INVALID_2D_BARCODE_TYPE                                  -1074396041 // Invalid 2-D barcode type.
#define ERR_DRIVER                                                   -1074396040 // Cannot access NI-IMAQ driver.
#define ERR_IO_ERROR                                                 -1074396039 // I/O error.
#define ERR_FIND_COORDSYS_MORE_THAN_ONE_EDGE                         -1074396038 // When searching for a coordinate system, the number of lines to fit must be 1.
#define ERR_TIMEOUT                                                  -1074396037 // Trigger timeout.
#define ERR_INVALID_SKELETONMODE                                     -1074396036 // The Skeleton mode you specified is invalid.
#define ERR_TEMPLATEIMAGE_NOCIRCLE                                   -1074396035 // The template image does not contain enough information for learning the aggressive search strategy.
#define ERR_TEMPLATEIMAGE_EDGEINFO                                   -1074396034 // The template image does not contain enough edge information for the sample size(s) requested.
#define ERR_TEMPLATEDESCRIPTOR_LEARNSETUPDATA                        -1074396033 // Invalid template descriptor.
#define ERR_TEMPLATEDESCRIPTOR_ROTATION_SEARCHSTRATEGY               -1074396032 // The template descriptor does not contain data required for the requested search strategy in rotation-invariant matching.
#define ERR_INVALID_TETRAGON                                         -1074396031 // The input tetragon must have four points. The points are specified clockwise starting with the top left point. 
#define ERR_TOO_MANY_CLASSIFICATION_SESSIONS                         -1074396030 // There are too many classification sessions open.  You must close a session before you can open another one.
#define ERR_TIME_BOUNDED_EXECUTION_NOT_SUPPORTED                     -1074396028 // NI Vision no longer supports time-bounded execution.
#define ERR_INVALID_COLOR_RESOLUTION                                 -1074396027 // Invalid Color Resolution for the Color Classifier
#define ERR_INVALID_PROCESS_TYPE_FOR_EDGE_DETECTION                  -1074396026 // Invalid process type for edge detection.
#define ERR_INVALID_ANGLE_RANGE_FOR_STRAIGHT_EDGE                    -1074396025 // Angle range value should be equal to or greater than zero.
#define ERR_INVALID_MIN_COVERAGE_FOR_STRAIGHT_EDGE                   -1074396024 // Minimum coverage value should be greater than zero.
#define ERR_INVALID_ANGLE_TOL_FOR_STRAIGHT_EDGE                      -1074396023 // The angle tolerance should be equal to or greater than 0.001.
#define ERR_INVALID_SEARCH_MODE_FOR_STRAIGHT_EDGE                    -1074396022 // Invalid search mode for detecting straight edges
#define ERR_INVALID_KERNEL_SIZE_FOR_EDGE_DETECTION                   -1074396021 // Invalid kernel size for edge detection. The minimum kernel size is 3, the maximum kernel size is 1073741823 and the kernel size must be odd.
#define ERR_INVALID_GRADING_MODE                                     -1074396020 // Invalid grading mode.
#define ERR_INVALID_THRESHOLD_PERCENTAGE                             -1074396019 // Invalid threshold percentage. Valid values range from 0 to 100.
#define ERR_INVALID_EDGE_POLARITY_SEARCH_MODE                        -1074396018 // Invalid edge polarity search mode.
#define ERR_OPENING_NEWER_AIM_GRADING_DATA                           -1074396017 // The AIM grading data attached to the image you tried to open was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this file.
#define ERR_NO_VIDEO_DRIVER                                          -1074396016 // No video driver is installed.
#define ERR_RPC_EXECUTE_IVB                                          -1074396015 // Unable to establish network connection with remote system.
#define ERR_INVALID_VIDEO_BLIT                                       -1074396014 // RT Video Out does not support displaying the supplied image type at the selected color depth.
#define ERR_INVALID_VIDEO_MODE                                       -1074396013 // Invalid video mode.
#define ERR_RPC_EXECUTE                                              -1074396012 // Unable to display remote image on network connection.
#define ERR_RPC_BIND                                                 -1074396011 // Unable to establish network connection.
#define ERR_INVALID_FRAME_NUMBER                                     -1074396010 // Invalid frame number.
#define ERR_DIRECTX                                                  -1074396009 // An internal DirectX error has occurred.  Try upgrading to the latest version of DirectX.
#define ERR_DIRECTX_NO_FILTER                                        -1074396008 // An appropriate DirectX filter to process this file could not be found.  Install the filter that was used to create this AVI. Upgrading to the latest version of DirectX may correct this error.  NI Vision requires DirectX 8.1 or higher.
#define ERR_DIRECTX_INCOMPATIBLE_COMPRESSION_FILTER                  -1074396007 // Incompatible compression filter.
#define ERR_DIRECTX_UNKNOWN_COMPRESSION_FILTER                       -1074396006 // Unknown compression filter.
#define ERR_INVALID_AVI_SESSION                                      -1074396005 // Invalid AVI session.
#define ERR_DIRECTX_CERTIFICATION_FAILURE                            -1074396004 // A software key is restricting the use of this compression filter.
#define ERR_AVI_DATA_EXCEEDS_BUFFER_SIZE                             -1074396003 // The data for this frame exceeds the data buffer size specified when creating the AVI file.
#define ERR_INVALID_LINEGAUGEMETHOD                                  -1074396002 // Invalid line gauge method.
#define ERR_TOO_MANY_AVI_SESSIONS                                    -1074396001 // There are too many AVI sessions open.  You must close a session before you can open another one.
#define ERR_FILE_FILE_HEADER                                         -1074396000 // Invalid file header.
#define ERR_FILE_FILE_TYPE                                           -1074395999 // Invalid file type.
#define ERR_FILE_COLOR_TABLE                                         -1074395998 // Invalid color table.
#define ERR_FILE_ARGERR                                              -1074395997 // Invalid parameter.
#define ERR_FILE_OPEN                                                -1074395996 // File is already open for writing.
#define ERR_FILE_NOT_FOUND                                           -1074395995 // File not found.
#define ERR_FILE_TOO_MANY_OPEN                                       -1074395994 // Too many files open.
#define ERR_FILE_IO_ERR                                              -1074395993 // File I/O error.
#define ERR_FILE_PERMISSION                                          -1074395992 // File access denied.
#define ERR_FILE_INVALID_TYPE                                        -1074395991 // NI Vision does not support the file type you specified.
#define ERR_FILE_GET_INFO                                            -1074395990 // Could not read Vision info from file.
#define ERR_FILE_READ                                                -1074395989 // Unable to read data.
#define ERR_FILE_WRITE                                               -1074395988 // Unable to write data.
#define ERR_FILE_EOF                                                 -1074395987 // Premature end of file.
#define ERR_FILE_FORMAT                                              -1074395986 // Invalid file format.
#define ERR_FILE_OPERATION                                           -1074395985 // Invalid file operation.
#define ERR_FILE_INVALID_DATA_TYPE                                   -1074395984 // NI Vision does not support the file data type you specified.
#define ERR_FILE_NO_SPACE                                            -1074395983 // Disk full.
#define ERR_INVALID_FRAMES_PER_SECOND                                -1074395982 // The frames per second in an AVI must be greater than zero.
#define ERR_INSUFFICIENT_BUFFER_SIZE                                 -1074395981 // The buffer that was passed in is not big enough to hold all of the data.
#define ERR_COM_INITIALIZE                                           -1074395980 // Error initializing COM.
#define ERR_INVALID_PARTICLE_INFO                                    -1074395979 // The image has invalid particle information.  Call imaqCountParticles on the image to create particle information.
#define ERR_INVALID_PARTICLE_NUMBER                                  -1074395978 // Invalid particle number.
#define ERR_AVI_VERSION                                              -1074395977 // The AVI file was created in a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this AVI file.
#define ERR_NUMBER_OF_PALETTE_COLORS                                 -1074395976 // The color palette must have exactly 0 or 256 entries.
#define ERR_AVI_TIMEOUT                                              -1074395975 // DirectX has timed out reading or writing the AVI file.  When closing an AVI file, try adding an additional delay.  When reading an AVI file, try reducing CPU and disk load.
#define ERR_UNSUPPORTED_JPEG2000_COLORSPACE_METHOD                   -1074395974 // NI Vision does not support reading JPEG2000 files with this colorspace method.
#define ERR_JPEG2000_UNSUPPORTED_MULTIPLE_LAYERS                     -1074395973 // NI Vision does not support reading JPEG2000 files with more than one layer.
#define ERR_DIRECTX_ENUMERATE_FILTERS                                -1074395972 // DirectX is unable to enumerate the compression filters. This is caused by a third-party compression filter that is either improperly installed or is preventing itself from being enumerated. Remove any recently installed compression filters and try again.
#define ERR_INVALID_OFFSET                                           -1074395971 // The offset you specified must be size 2.
#define ERR_INIT                                                     -1074395960 // Initialization error.
#define ERR_CREATE_WINDOW                                            -1074395959 // Unable to create window.
#define ERR_WINDOW_ID                                                -1074395958 // Invalid window ID.
#define ERR_ARRAY_SIZE_MISMATCH                                      -1074395957 // The array sizes are not compatible.
#define ERR_INVALID_QUALITY                                          -1074395956 // The quality you provided is invalid. Valid quality values range from -1 to 1000.
#define ERR_INVALID_MAX_WAVELET_TRANSFORM_LEVEL                      -1074395955 // Invalid maximum wavelet transform level.  Valid values range from 0 to 255.
#define ERR_INVALID_QUANTIZATION_STEP_SIZE                           -1074395954 // The quantization step size must be greater than or equal to 0.
#define ERR_INVALID_WAVELET_TRANSFORM_MODE                           -1074395953 // Invalid wavelet transform mode.
#define ERR_ROI_NOT_POINT                                            -1074395952 // The ROI must only have a single Point contour.
#define ERR_ROI_NOT_POINTS                                           -1074395951 // The ROI must only have Point contours.
#define ERR_ROI_NOT_LINE                                             -1074395950 // The ROI must only have a single Line contour.
#define ERR_ROI_NOT_ANNULUS                                          -1074395949 // The ROI must only have a single Annulus contour.
#define ERR_INVALID_MEASURE_PARTICLES_CALIBRATION_MODE               -1074395948 // Invalid measure particles calibration mode.
#define ERR_INVALID_PARTICLE_CLASSIFIER_THRESHOLD_TYPE               -1074395947 // Invalid particle classifier threshold type.
#define ERR_INVALID_DISTANCE                                         -1074395946 // Invalid Color Segmentation Distance
#define ERR_INVALID_PARTICLE_AREA                                    -1074395945 // Invalid Color Segmenation Particle Area
#define ERR_CLASS_NAME_NOT_FOUND                                     -1074395944 // Required Class name is not found in trained labels/Class names
#define ERR_NUMBER_LABEL_LIMIT_EXCEEDED                              -1074395943 // Number of Labels exceeded limit of label Image type
#define ERR_INVALID_DISTANCE_LEVEL                                   -1074395942 // Invalid Color Segmentation distance level
#define ERR_INVALID_SVM_TYPE                                         -1074395941 // Invalid SVM model type
#define ERR_INVALID_SVM_KERNEL                                       -1074395940 // Invalid SVM kernel type
#define ERR_NO_SUPPORT_VECTOR_FOUND                                  -1074395939 // No Support Vector is found at SVM training
#define ERR_COST_LABEL_NOT_FOUND                                     -1074395938 // Label name is not found in added samples
#define ERR_EXCEEDED_SVM_MAX_ITERATION                               -1074395937 // SVM training exceeded maximim Iteration limit
#define ERR_INVALID_SVM_PARAMETER                                    -1074395936 // Invalid SVM Parameter
#define ERR_INVALID_IDENTIFICATION_SCORE                             -1074395935 // Invalid Identification score. Must be between 0-1000.
#define ERR_INVALID_TEXTURE_FEATURE                                  -1074395934 // Requested for invalid texture feature
#define ERR_INVALID_COOCCURRENCE_LEVEL                               -1074395933 // The coOccurrence Level must lie between 1 and the maximum pixel value of an image (255 for U8 image)
#define ERR_INVALID_WAVELET_SUBBAND                                  -1074395932 // Request for invalid wavelet subBand
#define ERR_INVALID_FINAL_STEP_SIZE                                  -1074395931 // The final step size must be lesser than the initial step size
#define ERR_INVALID_ENERGY                                           -1074395930 // Minimum Energy should lie between 0 and 100
#define ERR_INVALID_TEXTURE_LABEL                                    -1074395929 // The classification label must be texture or defect for texture defect classifier
#define ERR_INVALID_WAVELET_TYPE                                     -1074395928 // The wavelet type is invalid
#define ERR_SAME_WAVELET_BANDS_SELECTED                              -1074395927 // Same Wavelet band is selected multiple times
#define ERR_IMAGE_SIZE_MISMATCH                                      -1074395926 // The two input image sizes are different 
#define ERR_NUMBER_CLASS                                             -1074395920 // Invalid number of classes.
#define ERR_INVALID_LUCAS_KANADE_WINDOW_SIZE                         -1074395888 // Both dimensions of the window size should be odd, greater than 2 and less than 16.
#define ERR_INVALID_MATRIX_TYPE                                      -1074395887 // The type of matrix supplied to the function is not supported.
#define ERR_INVALID_OPTICAL_FLOW_TERMINATION_CRITERIA_TYPE           -1074395886 // An invalid termination criteria was specified for the optical flow computation.
#define ERR_LKP_NULL_PYRAMID                                         -1074395885 // The pyramid levels where not properly allocated.
#define ERR_INVALID_PYRAMID_LEVEL                                    -1074395884 // The pyramid level specified cannot be negative
#define ERR_INVALID_LKP_KERNEL                                       -1074395883 // The kernel must be symmetric  with non-zero coefficients and of odd size
#define ERR_INVALID_HORN_SCHUNCK_LAMBDA                              -1074395882 // Invalid smoothing parameter in Horn Schunck operation.
#define ERR_INVALID_HORN_SCHUNCK_TYPE                                -1074395881 // Invalid stopping criteria type for Horn Schunck optical flow.
#define ERR_PARTICLE                                                 -1074395880 // Invalid particle.
#define ERR_BAD_MEASURE                                              -1074395879 // Invalid measure number.
#define ERR_PROP_NODE_WRITE_NOT_SUPPORTED                            -1074395878 // The Image Display control does not support writing this property node.
#define ERR_COLORMODE_REQUIRES_CHANGECOLORSPACE2                     -1074395877 // The specified color mode requires the use of imaqChangeColorSpace2.
#define ERR_UNSUPPORTED_COLOR_MODE                                   -1074395876 // This function does not currently support the color mode you specified.
#define ERR_BARCODE_PHARMACODE                                       -1074395875 // The barcode is not a valid Pharmacode symbol
#define ERR_BAD_INDEX                                                -1074395840 // Invalid handle table index.
#define ERR_INVALID_COMPRESSION_RATIO                                -1074395837 // The compression ratio must be greater than or equal to 1.
#define ERR_TOO_MANY_CONTOURS                                        -1074395801 // The ROI contains too many contours.
#define ERR_PROTECTION                                               -1074395800 // Protection error.
#define ERR_INTERNAL                                                 -1074395799 // Internal error.
#define ERR_INVALID_CUSTOM_SAMPLE                                    -1074395798 // The size of the feature vector in the custom sample must match the size of those you have already added.
#define ERR_INVALID_CLASSIFIER_SESSION                               -1074395797 // Not a valid classifier session.
#define ERR_INVALID_KNN_METHOD                                       -1074395796 // You requested an invalid Nearest Neighbor classifier method.
#define ERR_K_TOO_LOW                                                -1074395795 // The k parameter must be greater than two.
#define ERR_K_TOO_HIGH                                               -1074395794 // The k parameter must be <= the number of samples in each class.
#define ERR_INVALID_OPERATION_ON_COMPACT_SESSION_ATTEMPTED           -1074395793 // This classifier session is compact. Only the Classify and Dispose functions may be called on a compact classifier session.
#define ERR_CLASSIFIER_SESSION_NOT_TRAINED                           -1074395792 // This classifier session is not trained. You may only call this function on a trained classifier session.
#define ERR_CLASSIFIER_INVALID_SESSION_TYPE                          -1074395791 // This classifier function cannot be called on this type of classifier session.
#define ERR_INVALID_DISTANCE_METRIC                                  -1074395790 // You requested an invalid distance metric.
#define ERR_OPENING_NEWER_CLASSIFIER_SESSION                         -1074395789 // The classifier session you tried to open was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this file.
#define ERR_NO_SAMPLES                                               -1074395788 // This operation cannot be performed because you have not added any samples.
#define ERR_INVALID_CLASSIFIER_TYPE                                  -1074395787 // You requested an invalid classifier type.
#define ERR_INVALID_PARTICLE_OPTIONS                                 -1074395786 // The sum of Scale Dependence and Symmetry Dependence must be less than 1000.
#define ERR_NO_PARTICLE                                              -1074395785 // The image yielded no particles.
#define ERR_INVALID_LIMITS                                           -1074395784 // The limits you supplied are not valid.
#define ERR_BAD_SAMPLE_INDEX                                         -1074395783 // The Sample Index fell outside the range of Samples.
#define ERR_DESCRIPTION_TOO_LONG                                     -1074395782 // The description must be <= 255 characters.
#define ERR_CLASSIFIER_INVALID_ENGINE_TYPE                           -1074395781 // The engine for this classifier session does not support this operation.
#define ERR_INVALID_PARTICLE_TYPE                                    -1074395780 // You requested an invalid particle type.
#define ERR_CANNOT_COMPACT_UNTRAINED                                 -1074395779 // You may only save a session in compact form if it is trained.
#define ERR_INVALID_KERNEL_SIZE                                      -1074395778 // The Kernel size must be smaller than the image size.
#define ERR_INCOMPATIBLE_CLASSIFIER_TYPES                            -1074395777 // The session you read from file must be the same type as the session you passed in.
#define ERR_INVALID_USE_OF_COMPACT_SESSION_FILE                      -1074395776 // You can not use a compact classification file with read options other than Read All.
#define ERR_ROI_HAS_OPEN_CONTOURS                                    -1074395775 // The ROI you passed in may only contain closed contours.
#define ERR_NO_LABEL                                                 -1074395774 // You must pass in a label.
#define ERR_NO_DEST_IMAGE                                            -1074395773 // You must provide a destination image.
#define ERR_INVALID_REGISTRATION_METHOD                              -1074395772 // You provided an invalid registration method.
#define ERR_OPENING_NEWER_INSPECTION_TEMPLATE                        -1074395771 // The golden template you tried to open was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this file.
#define ERR_INVALID_INSPECTION_TEMPLATE                              -1074395770 // Invalid golden template.
#define ERR_INVALID_EDGE_THICKNESS                                   -1074395769 // Edge Thickness to Ignore must be greater than zero.
#define ERR_INVALID_SCALE                                            -1074395768 // Scale must be greater than zero.
#define ERR_INVALID_ALIGNMENT                                        -1074395767 // The supplied scale is invalid for your template.
#define ERR_DEPRECATED_FUNCTION                                      -1074395766 // This backwards-compatibility function can not be used with this session. Use newer, supported functions instead.
#define ERR_INVALID_NORMALIZATION_METHOD                             -1074395763 // You must provide a valid normalization method.
#define ERR_INVALID_NIBLACK_DEVIATION_FACTOR                         -1074395762 // The deviation factor for Niblack local threshold must be between 0 and 1.
#define ERR_BOARD_NOT_FOUND                                          -1074395760 // Board not found.
#define ERR_BOARD_NOT_OPEN                                           -1074395758 // Board not opened.
#define ERR_DLL_NOT_FOUND                                            -1074395757 // DLL not found.
#define ERR_DLL_FUNCTION_NOT_FOUND                                   -1074395756 // DLL function not found.
#define ERR_TRIG_TIMEOUT                                             -1074395754 // Trigger timeout.
#define ERR_CONTOUR_INVALID_REFINEMENTS                              -1074395746 // Invalid number specified for maximum contour refinements.
#define ERR_TOO_MANY_CURVES                                          -1074395745 // Too many curves extracted from image. Raise the edge threshold or reduce the ROI.
#define ERR_CONTOUR_INVALID_KERNEL_FOR_SMOOTHING                     -1074395744 // Invalid kernel for contour smoothing. Zero indicates no smoothing, otherwise value must be odd. 
#define ERR_CONTOUR_LINE_INVALID                                     -1074395743 // The contour line fit is invalid. Line segment start and stop must differ.
#define ERR_CONTOUR_TEMPLATE_IMAGE_INVALID                           -1074395742 // The template image must be trained with IMAQ Learn Contour Pattern or be the same size as the target image.
#define ERR_CONTOUR_GPM_FAIL                                         -1074395741 // Matching failed to align the template and target contours.
#define ERR_CONTOUR_OPENING_NEWER_VERSION                            -1074395740 // The contour you tried to open was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this file. 
#define ERR_CONTOUR_CONNECT_DUPLICATE                                -1074395739 // Only one range is allowed per curve connection constraint type. 
#define ERR_CONTOUR_CONNECT_TYPE                                     -1074395738 // Invalid contour connection constraint type. 
#define ERR_CONTOUR_MATCH_STR_NOT_APPLICABLE                         -1074395737 // In order to use contour matching, you must provide a template image that has been trained with IMAQ Learn Contour Pattern
#define ERR_CONTOUR_CURVATURE_KERNEL                                 -1074395736 // Invalid kernel width for curvature calculation. Must be an odd value greater than 1. 
#define ERR_CONTOUR_EXTRACT_SELECTION                                -1074395735 // Invalid Contour Selection method for contour extraction. 
#define ERR_CONTOUR_EXTRACT_DIRECTION                                -1074395734 // Invalid Search Direction for contour extraction. 
#define ERR_CONTOUR_EXTRACT_ROI                                      -1074395733 // Invalid ROI for contour extraction. The ROI must contain an annulus, rectangle or rotated rectangle. 
#define ERR_CONTOUR_NO_CURVES                                        -1074395732 // No curves were found in the image.
#define ERR_CONTOUR_COMPARE_KERNEL                                   -1074395731 // Invalid Smoothing Kernel width for contour comparison. Must be zero or an odd positive integer. 
#define ERR_CONTOUR_COMPARE_SINGLE_IMAGE                             -1074395730 // If no template image is provided, the target image must contain both a contour with extracted points and a fitted equation.
#define ERR_CONTOUR_INVALID                                          -1074395729 // Invalid contour image.
#define ERR_INVALID_2D_BARCODE_SEARCH_MODE                           -1074395728 // NI Vision does not support the search mode you provided.
#define ERR_UNSUPPORTED_2D_BARCODE_SEARCH_MODE                       -1074395727 // NI Vision does not support the search mode you provided for the type of 2D barcode for which you are searching.
#define ERR_MATCHFACTOR_OBSOLETE                                     -1074395726 // matchFactor has been obsoleted. Instead, set the initialMatchListLength and matchListReductionFactor in the MatchPatternAdvancedOptions structure.
#define ERR_DATA_VERSION                                             -1074395725 // The data was stored with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this data.
#define ERR_CUSTOMDATA_INVALID_SIZE                                  -1074395724 // The size you specified is out of the valid range.
#define ERR_CUSTOMDATA_KEY_NOT_FOUND                                 -1074395723 // The key you specified cannot be found in the image.
#define ERR_CLASSIFIER_CLASSIFY_IMAGE_WITH_CUSTOM_SESSION            -1074395722 // Custom classifier sessions only classify feature vectors. They do not support classifying images.
#define ERR_INVALID_BIT_DEPTH                                        -1074395721 // NI Vision does not support the bit depth you supplied for the image you supplied.
#define ERR_BAD_ROI                                                  -1074395720 // Invalid ROI.
#define ERR_BAD_ROI_BOX                                              -1074395719 // Invalid ROI global rectangle.
#define ERR_LAB_VERSION                                              -1074395718 // The version of LabVIEW or BridgeVIEW you are running does not support this operation.
#define ERR_INVALID_RANGE                                            -1074395717 // The range you supplied is invalid.
#define ERR_INVALID_SCALING_METHOD                                   -1074395716 // NI Vision does not support the scaling method you provided.
#define ERR_INVALID_CALIBRATION_UNIT                                 -1074395715 // NI Vision does not support the calibration unit you supplied.
#define ERR_INVALID_AXIS_ORIENTATION                                 -1074395714 // NI Vision does not support the axis orientation you supplied.
#define ERR_VALUE_NOT_IN_ENUM                                        -1074395713 // Value not in enumeration.
#define ERR_WRONG_REGION_TYPE                                        -1074395712 // You selected a region that is not of the right type.
#define ERR_NOT_ENOUGH_REGIONS                                       -1074395711 // You specified a viewer that does not contain enough regions.
#define ERR_TOO_MANY_PARTICLES                                       -1074395710 // The image has too many particles for this process.
#define ERR_AVI_UNOPENED_SESSION                                     -1074395709 // The AVI session has not been opened.
#define ERR_AVI_READ_SESSION_REQUIRED                                -1074395708 // The AVI session is a write session, but this operation requires a read session.
#define ERR_AVI_WRITE_SESSION_REQUIRED                               -1074395707 // The AVI session is a read session, but this operation requires a write session.
#define ERR_AVI_SESSION_ALREADY_OPEN                                 -1074395706 // This AVI session is already open. You must close it before calling the Create or Open functions.
#define ERR_DATA_CORRUPTED                                           -1074395705 // The data is corrupted and cannot be read.
#define ERR_INVALID_COMPRESSION_TYPE                                 -1074395704 // Invalid compression type.
#define ERR_INVALID_TYPE_OF_FLATTEN                                  -1074395703 // Invalid type of flatten.
#define ERR_INVALID_LENGTH                                           -1074395702 // The length of the edge detection line must be greater than zero.
#define ERR_INVALID_MATRIX_SIZE_RANGE                                -1074395701 // The maximum Data Matrix barcode size must be equal to or greater than the minimum Data Matrix barcode size.
#define ERR_REQUIRES_WIN2000_OR_NEWER                                -1074395700 // The function requires the operating system to be Microsoft Windows 2000 or newer.
#define ERR_INVALID_CALIBRATION_METHOD                               -1074395662 // Invalid calibration method requested
#define ERR_INVALID_OPERATION_ON_COMPACT_CALIBRATION_ATTEMPTED       -1074395661 // This calibration is compact. Re-Learning calibration and retrieving thumbnails are not possible with this calibration
#define ERR_INVALID_POLYNOMIAL_MODEL_K_COUNT                         -1074395660 // Invalid number of K values 
#define ERR_INVALID_DISTORTION_MODEL                                 -1074395659 // Invalid distortion model type
#define ERR_CAMERA_MODEL_NOT_AVAILABLE                               -1074395658 // Camera Model is not learned
#define ERR_INVALID_THUMBNAIL_INDEX                                  -1074395657 // Supplied thumbnail index is invalid
#define ERR_SMOOTH_CONTOURS_MUST_BE_SAME                             -1074395656 // You must specify the same value for the smooth contours advanced match option for all templates you want to match.
#define ERR_ENABLE_CALIBRATION_SUPPORT_MUST_BE_SAME                  -1074395655 // You must specify the same value for the enable calibration support advanced match option for all templates you want to match.
#define ERR_GRADING_INFORMATION_NOT_FOUND                            -1074395654 // The source image does not contain grading information. You must prepare the source image for grading when reading the Data Matrix, and you cannot change the contents of the source image between reading and grading the Data Matrix.
#define ERR_OPENING_NEWER_MULTIPLE_GEOMETRIC_TEMPLATE                -1074395653 // The multiple geometric matching template you tried to open was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this file.
#define ERR_OPENING_NEWER_GEOMETRIC_MATCHING_TEMPLATE                -1074395652 // The geometric matching template you tried to open was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this file.
#define ERR_EDGE_FILTER_SIZE_MUST_BE_SAME                            -1074395651 // You must specify the same edge filter size for all the templates you want to match.
#define ERR_CURVE_EXTRACTION_MODE_MUST_BE_SAME                       -1074395650 // You must specify the same curve extraction mode for all the templates you want to match.
#define ERR_INVALID_GEOMETRIC_FEATURE_TYPE                           -1074395649 // The geometric feature type specified is invalid.
#define ERR_TEMPLATE_NOT_LEARNED                                     -1074395648 // You supplied a template that was not learned.
#define ERR_INVALID_MULTIPLE_GEOMETRIC_TEMPLATE                      -1074395647 // Invalid multiple geometric template.
#define ERR_NO_TEMPLATE_TO_LEARN                                     -1074395646 // Need at least one template to learn.
#define ERR_INVALID_NUMBER_OF_LABELS                                 -1074395645 // You supplied an invalid number of labels.
#define ERR_LABEL_TOO_LONG                                           -1074395644 // Labels must be <= 255 characters.
#define ERR_INVALID_NUMBER_OF_MATCH_OPTIONS                          -1074395643 // You supplied an invalid number of match options.
#define ERR_LABEL_NOT_FOUND                                          -1074395642 // Cannot find a label that matches the one you specified.
#define ERR_DUPLICATE_LABEL                                          -1074395641 // Duplicate labels are not allowed.
#define ERR_TOO_MANY_ZONES                                           -1074395640 // The number of zones found exceeded the capacity of the algorithm.
#define ERR_INVALID_HATCH_STYLE                                      -1074395639 // The hatch style for the window background is invalid.
#define ERR_INVALID_FILL_STYLE                                       -1074395638 // The fill style for the window background is invalid.
#define ERR_HARDWARE_DOESNT_SUPPORT_NONTEARING                       -1074395637 // Your hardware is not supported by DirectX and cannot be put into NonTearing mode.
#define ERR_DIRECTX_NOT_FOUND                                        -1074395636 // DirectX is required for this feature.  Please install the latest version..
#define ERR_INVALID_SHAPE_DESCRIPTOR                                 -1074395635 // The passed shape descriptor is invalid.
#define ERR_INVALID_MAX_MATCH_OVERLAP                                -1074395634 // Invalid max match overlap.  Values must be between -1 and 100.
#define ERR_INVALID_MIN_MATCH_SEPARATION_SCALE                       -1074395633 // Invalid minimum match separation scale.  Values must be greater than or equal to -1.
#define ERR_INVALID_MIN_MATCH_SEPARATION_ANGLE                       -1074395632 // Invalid minimum match separation angle.  Values must be between -1 and 360.
#define ERR_INVALID_MIN_MATCH_SEPARATION_DISTANCE                    -1074395631 // Invalid minimum match separation distance.  Values must be greater than or equal to -1.
#define ERR_INVALID_MAXIMUM_FEATURES_LEARNED                         -1074395630 // Invalid maximum number of features learn. Values must be integers greater than zero.
#define ERR_INVALID_MAXIMUM_PIXEL_DISTANCE_FROM_LINE                 -1074395629 // Invalid maximum pixel distance from line. Values must be positive real numbers.
#define ERR_INVALID_GEOMETRIC_MATCHING_TEMPLATE                      -1074395628 // Invalid geometric matching template image.
#define ERR_NOT_ENOUGH_TEMPLATE_FEATURES_1                           -1074395627 // The template does not contain enough features for geometric matching.
#define ERR_NOT_ENOUGH_TEMPLATE_FEATURES                             -1074395626 // The template does not contain enough features for geometric matching.
#define ERR_INVALID_MATCH_CONSTRAINT_TYPE                            -1074395625 // You specified an invalid value for the match constraint value of the  range settings.
#define ERR_INVALID_OCCLUSION_RANGE                                  -1074395624 // Invalid occlusion range. Valid values for the bounds range from 0 to 100 and the upper bound must be greater than or equal to the lower bound.
#define ERR_INVALID_SCALE_RANGE                                      -1074395623 // Invalid scale range. Values for the lower bound must be a positive real numbers and the upper bound must be greater than or equal to the lower bound.
#define ERR_INVALID_MATCH_GEOMETRIC_PATTERN_SETUP_DATA               -1074395622 // Invalid match geometric pattern setup data.
#define ERR_INVALID_LEARN_GEOMETRIC_PATTERN_SETUP_DATA               -1074395621 // Invalid learn geometric pattern setup data.
#define ERR_INVALID_CURVE_EXTRACTION_MODE                            -1074395620 // Invalid curve extraction mode.
#define ERR_TOO_MANY_OCCLUSION_RANGES                                -1074395619 // You can specify only one occlusion range.
#define ERR_TOO_MANY_SCALE_RANGES                                    -1074395618 // You can specify only one scale range.
#define ERR_INVALID_NUMBER_OF_FEATURES_RANGE                         -1074395617 // The minimum number of features must be less than or equal to the maximum number of features.
#define ERR_INVALID_EDGE_FILTER_SIZE                                 -1074395616 // Invalid edge filter size.
#define ERR_INVALID_MINIMUM_FEATURE_STRENGTH                         -1074395615 // Invalid minimum strength for features. Values must be positive real numbers.
#define ERR_INVALID_MINIMUM_FEATURE_ASPECT_RATIO                     -1074395614 // Invalid aspect ratio for rectangular features. Values must be positive real numbers in the range 0.01 to 1.0.
#define ERR_INVALID_MINIMUM_FEATURE_LENGTH                           -1074395613 // Invalid minimum length for linear features. Values must be integers greater than 0.
#define ERR_INVALID_MINIMUM_FEATURE_RADIUS                           -1074395612 // Invalid minimum radius for circular features. Values must be integers greater than 0.
#define ERR_INVALID_MINIMUM_RECTANGLE_DIMENSION                      -1074395611 // Invalid minimum rectangle dimension. Values must be integers greater than 0.
#define ERR_INVALID_INITIAL_MATCH_LIST_LENGTH                        -1074395610 // Invalid initial match list length. Values must be integers greater than 5.
#define ERR_INVALID_SUBPIXEL_TOLERANCE                               -1074395609 // Invalid subpixel tolerance. Values must be positive real numbers.
#define ERR_INVALID_SUBPIXEL_ITERATIONS                              -1074395608 // Invalid number of subpixel iterations. Values must be integers greater 10.
#define ERR_INVALID_MAXIMUM_FEATURES_PER_MATCH                       -1074395607 // Invalid maximum number of features used per match. Values must be integers greater than or equal to zero.
#define ERR_INVALID_MINIMUM_FEATURES_TO_MATCH                        -1074395606 // Invalid minimum number of features used for matching. Values must be integers greater than zero.
#define ERR_INVALID_MAXIMUM_END_POINT_GAP                            -1074395605 // Invalid maximum end point gap. Valid values range from 0 to 32767.
#define ERR_INVALID_COLUMN_STEP                                      -1074395604 // Invalid column step. Valid range is 1 to 255.
#define ERR_INVALID_ROW_STEP                                         -1074395603 // Invalid row step. Valid range is 1 to 255.
#define ERR_INVALID_MINIMUM_CURVE_LENGTH                             -1074395602 // Invalid minimum length. Valid values must be greater than or equal to zero.
#define ERR_INVALID_EDGE_THRESHOLD                                   -1074395601 // Invalid edge threshold. Valid values range from 1 to 360.
#define ERR_INFO_NOT_FOUND                                           -1074395600 // You must provide information about the subimage within the browser.
#define ERR_NIOCR_INVALID_ACCEPTANCE_LEVEL                           -1074395598 // The acceptance level is outside the valid range of  0 to 1000.
#define ERR_NIOCR_NOT_A_VALID_SESSION                                -1074395597 // Not a valid OCR session.
#define ERR_NIOCR_INVALID_CHARACTER_SIZE                             -1074395596 // Invalid character size. Character size must be >= 1.
#define ERR_NIOCR_INVALID_THRESHOLD_MODE                             -1074395595 // Invalid threshold mode value.
#define ERR_NIOCR_INVALID_SUBSTITUTION_CHARACTER                     -1074395594 // Invalid substitution character. Valid substitution characters are ASCII values that range from 1 to 254.
#define ERR_NIOCR_INVALID_NUMBER_OF_BLOCKS                           -1074395593 // Invalid number of blocks. Number of blocks must be >= 4 and <= 50.
#define ERR_NIOCR_INVALID_READ_STRATEGY                              -1074395592 // Invalid read strategy.
#define ERR_NIOCR_INVALID_CHARACTER_INDEX                            -1074395591 // Invalid character index.
#define ERR_NIOCR_INVALID_NUMBER_OF_VALID_CHARACTER_POSITIONS        -1074395590 // Invalid number of character positions. Valid values range from 0 to 255.
#define ERR_NIOCR_INVALID_LOW_THRESHOLD_VALUE                        -1074395589 // Invalid low threshold value. Valid threshold values range from 0 to 255.
#define ERR_NIOCR_INVALID_HIGH_THRESHOLD_VALUE                       -1074395588 // Invalid high threshold value. Valid threshold values range from 0 to 255.
#define ERR_NIOCR_INVALID_THRESHOLD_RANGE                            -1074395587 // The low threshold must be less than the high threshold.
#define ERR_NIOCR_INVALID_LOWER_THRESHOLD_LIMIT                      -1074395586 // Invalid lower threshold limit. Valid lower threshold limits range from 0 to 255.
#define ERR_NIOCR_INVALID_UPPER_THRESHOLD_LIMIT                      -1074395585 // Invalid upper threshold limit. Valid upper threshold limits range from 0 to 255.
#define ERR_NIOCR_INVALID_THRESHOLD_LIMITS                           -1074395584 // The lower threshold limit must be less than the upper threshold limit.
#define ERR_NIOCR_INVALID_MIN_CHAR_SPACING                           -1074395583 // Invalid minimum character spacing value. Character spacing must be >= 1 pixel.
#define ERR_NIOCR_INVALID_MAX_HORIZ_ELEMENT_SPACING                  -1074395582 // Invalid maximum horizontal element spacing value. Maximum horizontal element spacing must be >= 0.
#define ERR_NIOCR_INVALID_MAX_VERT_ELEMENT_SPACING                   -1074395581 // Invalid maximum vertical element spacing value. Maximum vertical element spacing must be >= 0.
#define ERR_NIOCR_INVALID_MIN_BOUNDING_RECT_WIDTH                    -1074395580 // Invalid minimum bounding rectangle width. Minimum bounding rectangle width must be >= 1.
#define ERR_NIOCR_INVALID_ASPECT_RATIO                               -1074395579 // Invalid aspect ratio value. The aspect ratio must be zero or >= 100.
#define ERR_NIOCR_INVALID_CHARACTER_SET_FILE                         -1074395578 // Invalid or corrupt character set file.
#define ERR_NIOCR_CHARACTER_VALUE_CANNOT_BE_EMPTYSTRING              -1074395577 // The character value must not be an empty string.
#define ERR_NIOCR_CHARACTER_VALUE_TOO_LONG                           -1074395576 // Character values must be <=255 characters.
#define ERR_NIOCR_INVALID_NUMBER_OF_EROSIONS                         -1074395575 // Invalid number of erosions. The number of erosions must be >= 0.
#define ERR_NIOCR_CHARACTER_SET_DESCRIPTION_TOO_LONG                 -1074395574 // The character set description must be <=255 characters.
#define ERR_NIOCR_INVALID_CHARACTER_SET_FILE_VERSION                 -1074395573 // The character set file was created by a newer version of NI Vision. Upgrade to the latest version of NI Vision to read the character set file.
#define ERR_NIOCR_INTEGER_VALUE_FOR_STRING_ATTRIBUTE                 -1074395572 // You must specify characters for a string. A string cannot contain integers.
#define ERR_NIOCR_GET_ONLY_ATTRIBUTE                                 -1074395571 // This attribute is read-only.
#define ERR_NIOCR_INTEGER_VALUE_FOR_BOOLEAN_ATTRIBUTE                -1074395570 // This attribute requires a Boolean value.
#define ERR_NIOCR_INVALID_ATTRIBUTE                                  -1074395569 // Invalid attribute.
#define ERR_NIOCR_STRING_VALUE_FOR_INTEGER_ATTRIBUTE                 -1074395568 // This attribute requires integer values.
#define ERR_NIOCR_STRING_VALUE_FOR_BOOLEAN_ATTRIBUTE                 -1074395567 // String values are invalid for this attribute. Enter a boolean value.
#define ERR_NIOCR_BOOLEAN_VALUE_FOR_INTEGER_ATTRIBUTE                -1074395566 // Boolean values are not valid for this attribute. Enter an integer value.
#define ERR_NIOCR_MUST_BE_SINGLE_CHARACTER                           -1074395565 // Requires a single-character string.
#define ERR_NIOCR_INVALID_PREDEFINED_CHARACTER                       -1074395564 // Invalid predefined character value.
#define ERR_NIOCR_UNLICENSED                                         -1074395563 // This copy of NI OCR is unlicensed.
#define ERR_NIOCR_BOOLEAN_VALUE_FOR_STRING_ATTRIBUTE                 -1074395562 // String values are not valid for this attribute. Enter a Boolean value.
#define ERR_NIOCR_INVALID_NUMBER_OF_CHARACTERS                       -1074395561 // The number of characters in the character value must match the number of objects in the image.
#define ERR_NIOCR_INVALID_OBJECT_INDEX                               -1074395560 // Invalid object index.
#define ERR_NIOCR_INVALID_READ_OPTION                                -1074395559 // Invalid read option.
#define ERR_NIOCR_INVALID_CHARACTER_SIZE_RANGE                       -1074395558 // The minimum character size must be less than the maximum character size.
#define ERR_NIOCR_INVALID_BOUNDING_RECT_WIDTH_RANGE                  -1074395557 // The minimum character bounding rectangle width must be less than the maximum character bounding rectangle width.
#define ERR_NIOCR_INVALID_BOUNDING_RECT_HEIGHT_RANGE                 -1074395556 // The minimum character bounding rectangle height must be less than the maximum character bounding rectangle height.
#define ERR_NIOCR_INVALID_SPACING_RANGE                              -1074395555 // The maximum horizontal element spacing value must not exceed the minimum character spacing value.
#define ERR_NIOCR_INVALID_READ_RESOLUTION                            -1074395554 // Invalid read resolution.
#define ERR_NIOCR_INVALID_MIN_BOUNDING_RECT_HEIGHT                   -1074395553 // Invalid minimum bounding rectangle height. The minimum bounding rectangle height must be >= 1.
#define ERR_NIOCR_NOT_A_VALID_CHARACTER_SET                          -1074395552 // Not a valid character set.
#define ERR_NIOCR_RENAME_REFCHAR                                     -1074395551 // A trained OCR character cannot be renamed while it is a reference character.
#define ERR_NIOCR_INVALID_CHARACTER_VALUE                            -1074395550 // A character cannot have an ASCII value of 255.
#define ERR_NIOCR_INVALID_NUMBER_OF_OBJECTS_TO_VERIFY                -1074395549 // The number of objects found does not match the number of expected characters or patterns to verify.
#define ERR_INVALID_STEREO_BLOCKMATCHING_PREFILTER_CAP               -1074395421 // The specified value for the filter cap for block matching is invalid.
#define ERR_INVALID_STEREO_BLOCKMATCHING_PREFILTER_SIZE              -1074395420 // The specified prefilter size for block matching is invalid.
#define ERR_INVALID_STEREO_BLOCKMATCHING_PREFILTER_TYPE              -1074395419 // The specified prefilter type for block matching is invalid.
#define ERR_INVALID_STEREO_BLOCKMATCHING_NUMDISPARITIES              -1074395418 // The specifed value for number of disparities is invalid.
#define ERR_INVALID_STEREO_BLOCKMATCHING_WINDOW_SIZE                 -1074395417 // The specified window size for block matching is invalid.
#define ERR_3DVISION_INVALID_SESSION_TYPE                            -1074395416 // This 3D vision function cannot be called on this type of 3d vision session.
#define ERR_TOO_MANY_3DVISION_SESSIONS                               -1074395415 // There are too many 3D vision sessions open.  You must close a session before you can open another one.
#define ERR_OPENING_NEWER_3DVISION_SESSION                           -1074395414 // The 3D vision session you tried to open was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this file.
#define ERR_INVALID_STEREO_BLOCKMATCHING_FILTERTYPE                  -1074395413 // You have specified an invalid filter type for block matching.
#define ERR_INVALID_STEREO_CAMERA_POSITION                           -1074395412 // You have requested results at an invalid camera position in the stereo setup.
#define ERR_INVALID_3DVISION_SESSION                                 -1074395411 // Not a valid 3D Vision session.
#define ERR_INVALID_ICONS_PER_LINE                                   -1074395410 // NI Vision does not support less than one icon per line.
#define ERR_INVALID_SUBPIXEL_DIVISIONS                               -1074395409 // Invalid subpixel divisions.
#define ERR_INVALID_DETECTION_MODE                                   -1074395408 // Invalid detection mode.
#define ERR_INVALID_CONTRAST                                         -1074395407 // Invalid contrast value. Valid contrast values range from 0 to 255.
#define ERR_COORDSYS_NOT_FOUND                                       -1074395406 // The coordinate system could not be found on this image.
#define ERR_INVALID_TEXTORIENTATION                                  -1074395405 // NI Vision does not support the text orientation value you supplied.
#define ERR_INVALID_INTERPOLATIONMETHOD_FOR_UNWRAP                   -1074395404 // UnwrapImage does not support the interpolation method value you supplied.  Valid interpolation methods are zero order and bilinear. 
#define ERR_EXTRAINFO_VERSION                                        -1074395403 // The image was created in a newer version of NI Vision. Upgrade to the latest version of NI Vision to use this image.
#define ERR_INVALID_MAXPOINTS                                        -1074395402 // The function does not support the maximum number of points that you specified.
#define ERR_INVALID_MATCHFACTOR                                      -1074395401 // The function does not support the matchFactor that you specified.
#define ERR_MULTICORE_OPERATION                                      -1074395400 // The operation you have given Multicore Options is invalid. Please see the available enumeration values for Multicore Operation.
#define ERR_MULTICORE_INVALID_ARGUMENT                               -1074395399 // You have given Multicore Options an invalid argument.
#define ERR_COMPLEX_IMAGE_REQUIRED                                   -1074395397 // A complex image is required.
#define ERR_COLOR_IMAGE_REQUIRED                                     -1074395395 // The input image must be a color image.
#define ERR_COLOR_SPECTRUM_MASK                                      -1074395394 // The color mask removes too much color information.
#define ERR_COLOR_TEMPLATE_IMAGE_TOO_SMALL                           -1074395393 // The color template image is too small.
#define ERR_COLOR_TEMPLATE_IMAGE_TOO_LARGE                           -1074395392 // The color template image is too large.
#define ERR_COLOR_TEMPLATE_IMAGE_HUE_CONTRAST_TOO_LOW                -1074395391 // The contrast in the hue plane of the image is too low for learning shape features.
#define ERR_COLOR_TEMPLATE_IMAGE_LUMINANCE_CONTRAST_TOO_LOW          -1074395390 // The contrast in the luminance plane of the image is too low to learn shape features.
#define ERR_COLOR_LEARN_SETUP_DATA                                   -1074395389 // Invalid color learn setup data.
#define ERR_COLOR_LEARN_SETUP_DATA_SHAPE                             -1074395388 // Invalid color learn setup data.
#define ERR_COLOR_MATCH_SETUP_DATA                                   -1074395387 // Invalid color match setup data.
#define ERR_COLOR_MATCH_SETUP_DATA_SHAPE                             -1074395386 // Invalid color match setup data.
#define ERR_COLOR_ROTATION_REQUIRES_SHAPE_FEATURE                    -1074395385 // Rotation-invariant color pattern matching requires a feature mode including shape.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR                                -1074395384 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_1                              -1074395383 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_2                              -1074395382 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_3                              -1074395381 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_4                              -1074395380 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_5                              -1074395379 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_6                              -1074395378 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_SHIFT                          -1074395377 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_NOSHIFT                        -1074395376 // The color template image does not contain data required for shift-invariant color matching.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_SHIFT_1                        -1074395375 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_SHIFT_2                        -1074395374 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_ROTATION                       -1074395373 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_NOROTATION                     -1074395372 // The color template image does not contain data required for rotation-invariant color matching.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_ROTATION_1                     -1074395371 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_ROTATION_2                     -1074395370 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_ROTATION_3                     -1074395369 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_ROTATION_4                     -1074395368 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_ROTATION_5                     -1074395367 // Invalid color template image.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_NOSHAPE                        -1074395366 // The color template image does not contain data required for color matching in shape feature mode.
#define ERR_COLOR_TEMPLATE_DESCRIPTOR_NOSPECTRUM                     -1074395365 // The color template image does not contain data required for color matching in color feature mode.
#define ERR_IGNORE_COLOR_SPECTRUM_SET                                -1074395364 // The ignore color spectra array is invalid.
#define ERR_INVALID_SUBSAMPLING_RATIO                                -1074395363 // Invalid subsampling ratio.
#define ERR_INVALID_WIDTH                                            -1074395362 // Invalid pixel width.
#define ERR_INVALID_STEEPNESS                                        -1074395361 // Invalid steepness.
#define ERR_COMPLEX_PLANE                                            -1074395360 // Invalid complex plane.
#define ERR_INVALID_COLOR_IGNORE_MODE                                -1074395357 // Invalid color ignore mode.
#define ERR_INVALID_MIN_MATCH_SCORE                                  -1074395356 // Invalid minimum match score. Acceptable values range from 0 to 1000.
#define ERR_INVALID_NUM_MATCHES_REQUESTED                            -1074395355 // Invalid number of matches requested. You must request a minimum of one match.
#define ERR_INVALID_COLOR_WEIGHT                                     -1074395354 // Invalid color weight. Acceptable values range from 0 to 1000.
#define ERR_INVALID_SEARCH_STRATEGY                                  -1074395353 // Invalid search strategy.
#define ERR_INVALID_FEATURE_MODE                                     -1074395352 // Invalid feature mode.
#define ERR_INVALID_RECT                                             -1074395351 // NI Vision does not support rectangles with negative widths or negative heights.
#define ERR_INVALID_VISION_INFO                                      -1074395350 // NI Vision does not support the vision information type you supplied.
#define ERR_INVALID_SKELETONMETHOD                                   -1074395349 // NI Vision does not support the SkeletonMethod value you supplied.
#define ERR_INVALID_3DPLANE                                          -1074395348 // NI Vision does not support the 3DPlane value you supplied.
#define ERR_INVALID_3DDIRECTION                                      -1074395347 // NI Vision does not support the 3DDirection value you supplied.
#define ERR_INVALID_INTERPOLATIONMETHOD_FOR_ROTATE                   -1074395346 // imaqRotate does not support the InterpolationMethod value you supplied.
#define ERR_INVALID_FLIPAXIS                                         -1074395345 // NI Vision does not support the axis of symmetry you supplied.
#define ERR_FILE_FILENAME_NULL                                       -1074395343 // You must pass a valid file name. Do not pass in NULL.
#define ERR_INVALID_SIZETYPE                                         -1074395340 // NI Vision does not support the SizeType value you supplied.
#define ERR_UNKNOWN_ALGORITHM                                        -1074395336 // You specified the dispatch status of an unknown algorithm.
#define ERR_DISPATCH_STATUS_CONFLICT                                 -1074395335 // You are attempting to set the same algorithm to dispatch and to not dispatch. Remove one of the conflicting settings.
#define ERR_INVALID_CONVERSIONSTYLE                                  -1074395334 // NI Vision does not support the Conversion Method value you supplied.
#define ERR_INVALID_VERTICAL_TEXT_ALIGNMENT                          -1074395333 // NI Vision does not support the VerticalTextAlignment value you supplied.
#define ERR_INVALID_COMPAREFUNCTION                                  -1074395332 // NI Vision does not support the CompareFunction value you supplied.
#define ERR_INVALID_BORDERMETHOD                                     -1074395331 // NI Vision does not support the BorderMethod value you supplied.
#define ERR_INVALID_BORDER_SIZE                                      -1074395330 // Invalid border size. Acceptable values range from 0 to 50.
#define ERR_INVALID_OUTLINEMETHOD                                    -1074395329 // NI Vision does not support the OutlineMethod value you supplied.
#define ERR_INVALID_INTERPOLATIONMETHOD                              -1074395328 // NI Vision does not support the InterpolationMethod value you supplied.
#define ERR_INVALID_SCALINGMODE                                      -1074395327 // NI Vision does not support the ScalingMode value you supplied.
#define ERR_INVALID_DRAWMODE_FOR_LINE                                -1074395326 // imaqDrawLineOnImage does not support the DrawMode value you supplied.
#define ERR_INVALID_DRAWMODE                                         -1074395325 // NI Vision does not support the DrawMode value you supplied.
#define ERR_INVALID_SHAPEMODE                                        -1074395324 // NI Vision does not support the ShapeMode value you supplied.
#define ERR_INVALID_FONTCOLOR                                        -1074395323 // NI Vision does not support the FontColor value you supplied.
#define ERR_INVALID_TEXTALIGNMENT                                    -1074395322 // NI Vision does not support the TextAlignment value you supplied.
#define ERR_INVALID_MORPHOLOGYMETHOD                                 -1074395321 // NI Vision does not support the MorphologyMethod value you supplied.
#define ERR_TEMPLATE_EMPTY                                           -1074395320 // The template image is empty.
#define ERR_INVALID_SUBPIX_TYPE                                      -1074395319 // NI Vision does not support the interpolation type you supplied.
#define ERR_INSF_POINTS                                              -1074395318 // You supplied an insufficient number of points to perform this operation.
#define ERR_UNDEF_POINT                                              -1074395317 // You specified a point that lies outside the image.
#define ERR_INVALID_KERNEL_CODE                                      -1074395316 // Invalid kernel code.
#define ERR_INEFFICIENT_POINTS                                       -1074395315 // You supplied an inefficient set of points to match the minimum score.
#define ERR_WRITE_FILE_NOT_SUPPORTED                                 -1074395313 // Writing files is not supported on this device.
#define ERR_LCD_CALIBRATE                                            -1074395312 // The input image does not seem to be a valid LCD or LED calibration image.
#define ERR_INVALID_COLOR_SPECTRUM                                   -1074395311 // The color spectrum array you provided has an invalid number of elements or contains an element set to not-a-number (NaN).
#define ERR_INVALID_PALETTE_TYPE                                     -1074395310 // NI Vision does not support the PaletteType value you supplied.
#define ERR_INVALID_WINDOW_THREAD_POLICY                             -1074395309 // NI Vision does not support the WindowThreadPolicy value you supplied.
#define ERR_INVALID_COLORSENSITIVITY                                 -1074395308 // NI Vision does not support the ColorSensitivity value you supplied.
#define ERR_PRECISION_NOT_GTR_THAN_0                                 -1074395307 // The precision parameter must be greater than 0.
#define ERR_INVALID_TOOL                                             -1074395306 // NI Vision does not support the Tool value you supplied.
#define ERR_INVALID_REFERENCEMODE                                    -1074395305 // NI Vision does not support the ReferenceMode value you supplied.
#define ERR_INVALID_MATHTRANSFORMMETHOD                              -1074395304 // NI Vision does not support the MathTransformMethod value you supplied.
#define ERR_INVALID_NUM_OF_CLASSES                                   -1074395303 // Invalid number of classes for auto threshold. Acceptable values range from 2 to 256.
#define ERR_INVALID_THRESHOLDMETHOD                                  -1074395302 // NI Vision does not support the threshold method value you supplied.
#define ERR_ROI_NOT_2_LINES                                          -1074395301 // The ROI you passed into imaqGetMeterArc must consist of two lines.
#define ERR_INVALID_METERARCMODE                                     -1074395300 // NI Vision does not support the MeterArcMode value you supplied.
#define ERR_INVALID_COMPLEXPLANE                                     -1074395299 // NI Vision does not support the ComplexPlane value you supplied.
#define ERR_COMPLEXPLANE_NOT_REAL_OR_IMAGINARY                       -1074395298 // You can perform this operation on a real or an imaginary ComplexPlane only.
#define ERR_INVALID_PARTICLEINFOMODE                                 -1074395297 // NI Vision does not support the ParticleInfoMode value you supplied.
#define ERR_INVALID_BARCODETYPE                                      -1074395296 // NI Vision does not support the BarcodeType value you supplied.
#define ERR_INVALID_INTERPOLATIONMETHOD_INTERPOLATEPOINTS            -1074395295 // imaqInterpolatePoints does not support the InterpolationMethod value you supplied.
#define ERR_CONTOUR_INDEX_OUT_OF_RANGE                               -1074395294 // The contour index you supplied is larger than the number of contours in the ROI.
#define ERR_CONTOURID_NOT_FOUND                                      -1074395293 // The supplied ContourID did not correlate to a contour inside the ROI.
#define ERR_POINTS_ARE_COLLINEAR                                     -1074395292 // Do not supply collinear points for this operation.
#define ERR_SHAPEMATCH_BADIMAGEDATA                                  -1074395291 // Shape Match requires the image to contain only pixel values of 0 or 1.
#define ERR_SHAPEMATCH_BADTEMPLATE                                   -1074395290 // The template you supplied for ShapeMatch contains no shape information.
#define ERR_CONTAINER_CAPACITY_EXCEEDED_UINT_MAX                     -1074395289 // The operation would have exceeded the capacity of an internal container, which is limited to 4294967296 unique elements.
#define ERR_CONTAINER_CAPACITY_EXCEEDED_INT_MAX                      -1074395288 // The operation would have exceeded the capacity of an internal container, which is limited to 2147483648 unique elements.
#define ERR_INVALID_LINE                                             -1074395287 // The line you provided contains two identical points, or one of the coordinate locations for the line is not a number (NaN).
#define ERR_INVALID_CONCENTRIC_RAKE_DIRECTION                        -1074395286 // Invalid concentric rake direction.
#define ERR_INVALID_SPOKE_DIRECTION                                  -1074395285 // Invalid spoke direction.
#define ERR_INVALID_EDGE_PROCESS                                     -1074395284 // Invalid edge process.
#define ERR_INVALID_RAKE_DIRECTION                                   -1074395283 // Invalid rake direction.
#define ERR_CANT_DRAW_INTO_VIEWER                                    -1074395282 // Unable to draw to viewer. You must have the latest version of the control.
#define ERR_IMAGE_SMALLER_THAN_BORDER                                -1074395281 // Your image must be larger than its border size for this operation.
#define ERR_ROI_NOT_RECT                                             -1074395280 // The ROI must only have a single Rectangle contour.
#define ERR_ROI_NOT_POLYGON                                          -1074395279 // ROI is not a polygon.
#define ERR_LCD_NOT_NUMERIC                                          -1074395278 // LCD image is not a number.
#define ERR_BARCODE_CHECKSUM                                         -1074395277 // The decoded barcode information did not pass the checksum test.
#define ERR_LINES_PARALLEL                                           -1074395276 // You specified parallel lines for the meter ROI.
#define ERR_INVALID_BROWSER_IMAGE                                    -1074395275 // Invalid browser image.
#define ERR_DIV_BY_ZERO                                              -1074395270 // Cannot divide by zero.
#define ERR_NULL_POINTER                                             -1074395269 // Null pointer.
#define ERR_LINEAR_COEFF                                             -1074395268 // The linear equations are not independent.
#define ERR_COMPLEX_ROOT                                             -1074395267 // The roots of the equation are complex.
#define ERR_BARCODE                                                  -1074395265 // The barcode does not match the type you specified.
#define ERR_LCD_NO_SEGMENTS                                          -1074395263 // No lit segment.
#define ERR_LCD_BAD_MATCH                                            -1074395262 // The LCD does not form a known digit.
#define ERR_GIP_RANGE                                                -1074395261 // An internal error occurred while attempting to access an invalid coordinate on an image.
#define ERR_HEAP_TRASHED                                             -1074395260 // An internal memory error occurred.
#define ERR_BAD_FILTER_WIDTH                                         -1074395258 // The filter width must be odd for the Canny operator.
#define ERR_INVALID_EDGE_DIR                                         -1074395257 // You supplied an invalid edge direction in the Canny operator.
#define ERR_EVEN_WINDOW_SIZE                                         -1074395256 // The window size must be odd for the Canny operator.
#define ERR_INVALID_LEARN_MODE                                       -1074395253 // Invalid learn mode.
#define ERR_LEARN_SETUP_DATA                                         -1074395252 // Invalid learn setup data.
#define ERR_INVALID_MATCH_MODE                                       -1074395251 // Invalid match mode.
#define ERR_MATCH_SETUP_DATA                                         -1074395250 // Invalid match setup data.
#define ERR_ROTATION_ANGLE_RANGE_TOO_LARGE                           -1074395249 // At least one range in the array of rotation angle ranges exceeds 360 degrees.
#define ERR_TOO_MANY_ROTATION_ANGLE_RANGES                           -1074395248 // The array of rotation angle ranges contains too many ranges.
#define ERR_TEMPLATE_DESCRIPTOR                                      -1074395247 // Invalid template descriptor.
#define ERR_TEMPLATE_DESCRIPTOR_1                                    -1074395246 // Invalid template descriptor.
#define ERR_TEMPLATE_DESCRIPTOR_2                                    -1074395245 // Invalid template descriptor.
#define ERR_TEMPLATE_DESCRIPTOR_3                                    -1074395244 // Invalid template descriptor.
#define ERR_TEMPLATE_DESCRIPTOR_4                                    -1074395243 // The template descriptor was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to use this template.
#define ERR_TEMPLATE_DESCRIPTOR_ROTATION                             -1074395242 // Invalid template descriptor.
#define ERR_TEMPLATE_DESCRIPTOR_NOROTATION                           -1074395241 // The template descriptor does not contain data required for rotation-invariant matching.
#define ERR_TEMPLATE_DESCRIPTOR_ROTATION_1                           -1074395240 // Invalid template descriptor.
#define ERR_TEMPLATE_DESCRIPTOR_SHIFT                                -1074395239 // Invalid template descriptor.
#define ERR_TEMPLATE_DESCRIPTOR_NOSHIFT                              -1074395238 // The template descriptor does not contain data required for shift-invariant matching.
#define ERR_TEMPLATE_DESCRIPTOR_SHIFT_1                              -1074395237 // Invalid template descriptor.
#define ERR_TEMPLATE_DESCRIPTOR_NOSCALE                              -1074395236 // The template descriptor does not contain data required for scale-invariant matching.
#define ERR_TEMPLATE_IMAGE_CONTRAST_TOO_LOW                          -1074395235 // The template image does not contain enough contrast.
#define ERR_TEMPLATE_IMAGE_TOO_SMALL                                 -1074395234 // The template image is too small.
#define ERR_TEMPLATE_IMAGE_TOO_LARGE                                 -1074395233 // The template image is too large.
#define ERR_TOO_MANY_OCR_SESSIONS                                    -1074395214 // There are too many OCR sessions open.  You must close a session before you can open another one.
#define ERR_OCR_TEMPLATE_WRONG_SIZE                                  -1074395212 // The size of the template string must match the size of the string you are trying to correct.
#define ERR_OCR_BAD_TEXT_TEMPLATE                                    -1074395211 // The supplied text template contains nonstandard characters that cannot be generated by OCR.
#define ERR_OCR_CANNOT_MATCH_TEXT_TEMPLATE                           -1074395210 // At least one character in the text template was of a lexical class that did not match the supplied character reports.
#define ERR_OCR_LIB_INIT                                             -1074395203 // The OCR library cannot be initialized correctly.
#define ERR_OCR_LOAD_LIBRARY                                         -1074395201 // There was a failure when loading one of the internal OCR engine or LabView libraries.
#define ERR_OCR_INVALID_PARAMETER                                    -1074395200 // One of the parameters supplied to the OCR function that generated this error is invalid.
#define ERR_MARKER_INFORMATION_NOT_SUPPLIED                          -1074395199 // Marker image and points are not supplied
#define ERR_INCOMPATIBLE_MARKER_IMAGE_SIZE                           -1074395198 // Source Image and Marker Image should be of same size.
#define ERR_BOTH_MARKER_INPUTS_SUPPLIED                              -1074395197 // Both Marker Image and Points are supplied.
#define ERR_INVALID_MORPHOLOGICAL_OPERATION                          -1074395196 // Invalid Morphological Operation.
#define ERR_IMAGE_CONTAINS_NAN_VALUES                                -1074395195 // Float image contains NaN values
#define ERR_OVERLAY_EXTRAINFO_OPENING_NEW_VERSION                    -1074395194 // The overlay information you tried to open was created with a newer version of NI Vision. Upgrade to the latest version of NI Vision to read this file.
#define ERR_NO_CLAMP_FOUND                                           -1074395193 // No valid clamp was found with the current configuration
#define ERR_NO_CLAMP_WITHIN_ANGLE_RANGE                              -1074395192 // Supplied angle range for clamp is insufficient
#define ERR_GHT_INVALID_USE_ALL_CURVES_VALUE                         -1074395188 // The use all curves advanced option specified during learn is not supported
#define ERR_INVALID_GAUSS_SIGMA_VALUE                                -1074395187 // The sigma value specified for the Gaussian filter is too small.
#define ERR_INVALID_GAUSS_FILTER_TYPE                                -1074395186 // The specified Gaussian filter type is not supported.
#define ERR_INVALID_CONTRAST_REVERSAL_MODE                           -1074395185 // The contrast reversal mode specified during matching is invalid.
#define ERR_INVALID_ROTATION_RANGE                                   -1074395184 // Invalid roation angle range. The upper bound must be greater than or equal to the lower bound.
#define ERR_GHT_INVALID_MINIMUM_LEARN_ANGLE_VALUE                    -1074395183 // The minimum rotation angle value specifed during learning of the template is not supported.
#define ERR_GHT_INVALID_MAXIMUM_LEARN_ANGLE_VALUE                    -1074395182 // The maximum rotation angle value specifed during learning of the template is not supported.
#define ERR_GHT_INVALID_MAXIMUM_LEARN_SCALE_FACTOR                   -1074395181 // The maximum scale factor specifed during learning of the template is not supported.
#define ERR_GHT_INVALID_MINIMUM_LEARN_SCALE_FACTOR                   -1074395180 // The minimum scale factor specifed during learning of the template is not supported.
#define ERR_OCR_PREPROCESSING_FAILED                                 -1074395179 // The OCR engine failed during the preprocessing stage.
#define ERR_OCR_RECOGNITION_FAILED                                   -1074395178 // The OCR engine failed during the recognition stage.
#define ERR_OCR_BAD_USER_DICTIONARY                                  -1074395175 // The provided filename is not valid user dictionary filename.
#define ERR_OCR_INVALID_AUTOORIENTMODE                               -1074395174 // NI Vision does not support the AutoOrientMode value you supplied.
#define ERR_OCR_INVALID_LANGUAGE                                     -1074395173 // NI Vision does not support the Language value you supplied.
#define ERR_OCR_INVALID_CHARACTERSET                                 -1074395172 // NI Vision does not support the CharacterSet value you supplied.
#define ERR_OCR_INI_FILE_NOT_FOUND                                   -1074395171 // The system could not locate the initialization file required for OCR initialization.
#define ERR_OCR_INVALID_CHARACTERTYPE                                -1074395170 // NI Vision does not support the CharacterType value you supplied.
#define ERR_OCR_INVALID_RECOGNITIONMODE                              -1074395169 // NI Vision does not support the RecognitionMode value you supplied.
#define ERR_OCR_INVALID_AUTOCORRECTIONMODE                           -1074395168 // NI Vision does not support the AutoCorrectionMode value you supplied.
#define ERR_OCR_INVALID_OUTPUTDELIMITER                              -1074395167 // NI Vision does not support the OutputDelimiter value you supplied.
#define ERR_OCR_BIN_DIR_NOT_FOUND                                    -1074395166 // The system could not locate the OCR binary directory required for OCR initialization.
#define ERR_OCR_WTS_DIR_NOT_FOUND                                    -1074395165 // The system could not locate the OCR weights directory required for OCR initialization.
#define ERR_OCR_ADD_WORD_FAILED                                      -1074395164 // The supplied word could not be added to the user dictionary.
#define ERR_OCR_INVALID_CHARACTERPREFERENCE                          -1074395163 // NI Vision does not support the CharacterPreference value you supplied.
#define ERR_OCR_INVALID_CORRECTIONMODE                               -1074395162 // NI Vision does not support the CorrectionMethod value you supplied.
#define ERR_OCR_INVALID_CORRECTIONLEVEL                              -1074395161 // NI Vision does not support the CorrectionLevel value you supplied.
#define ERR_OCR_INVALID_MAXPOINTSIZE                                 -1074395160 // NI Vision does not support the maximum point size you supplied.  Valid values range from 4 to 72.
#define ERR_OCR_INVALID_TOLERANCE                                    -1074395159 // NI Vision does not support the tolerance value you supplied.  Valid values are non-negative.
#define ERR_OCR_INVALID_CONTRASTMODE                                 -1074395158 // NI Vision does not support the ContrastMode value you supplied.
#define ERR_OCR_SKEW_DETECT_FAILED                                   -1074395156 // The OCR attempted to detected the text skew and failed.
#define ERR_OCR_ORIENT_DETECT_FAILED                                 -1074395155 // The OCR attempted to detected the text orientation and failed.
#define ERR_FONT_FILE_FORMAT                                         -1074395153 // Invalid font file format.
#define ERR_FONT_FILE_NOT_FOUND                                      -1074395152 // Font file not found.
#define ERR_OCR_CORRECTION_FAILED                                    -1074395151 // The OCR engine failed during the correction stage.
#define ERR_INVALID_ROUNDING_MODE                                    -1074395150 // NI Vision does not support the RoundingMode value you supplied.
#define ERR_DUPLICATE_TRANSFORM_TYPE                                 -1074395149 // Found a duplicate transform type in the properties array. Each properties array may only contain one behavior for each transform type.
#define ERR_OVERLAY_GROUP_NOT_FOUND                                  -1074395148 // Overlay Group Not Found.
#define ERR_BARCODE_RSSLIMITED                                       -1074395147 // The barcode is not a valid RSS Limited symbol
#define ERR_QR_DETECTION_VERSION                                     -1074395146 // Couldn't determine the correct version of the QR code.
#define ERR_QR_INVALID_READ                                          -1074395145 // Invalid read of the QR code.
#define ERR_QR_INVALID_BARCODE                                       -1074395144 // The barcode that was read contains invalid parameters.
#define ERR_QR_DETECTION_MODE                                        -1074395143 // The data stream that was demodulated could not be read because the mode was not detected.
#define ERR_QR_DETECTION_MODELTYPE                                   -1074395142 // Couldn't determine the correct model of the QR code.
#define ERR_OCR_NO_TEXT_FOUND                                        -1074395141 // The OCR engine could not find any text in the supplied region.
#define ERR_OCR_CHAR_REPORT_CORRUPTED                                -1074395140 // One of the character reports is no longer usable by the system.
#define ERR_IMAQ_QR_DIMENSION_INVALID                                -1074395139 // Invalid Dimensions.
#define ERR_OCR_REGION_TOO_SMALL                                     -1074395138 // The OCR region provided was too small to have contained any characters.
#define _FIRST_ERR  ERR_SYSTEM_ERROR
#define _LAST_ERR   ERR_OCR_REGION_TOO_SMALL

//============================================================================
//  Enumerated Types
//============================================================================
typedef enum PointSymbol_enum {
    IMAQ_POINT_AS_PIXEL          = 0,           //A single pixel represents a point in the overlay.
    IMAQ_POINT_AS_CROSS          = 1,           //A cross represents a point in the overlay.
    IMAQ_POINT_USER_DEFINED      = 2,           //The pattern supplied by the user represents a point in the overlay.
    IMAQ_POINT_SYMBOL_SIZE_GUARD = 0xFFFFFFFF   
} PointSymbol;

typedef enum MeasurementValue_enum {
    IMAQ_AREA                         = 0,           //Surface area of the particle in pixels.
    IMAQ_AREA_CALIBRATED              = 1,           //Surface area of the particle in calibrated units.
    IMAQ_NUM_HOLES                    = 2,           //Number of holes in the particle.
    IMAQ_AREA_OF_HOLES                = 3,           //Surface area of the holes in calibrated units.
    IMAQ_TOTAL_AREA                   = 4,           //Total surface area (holes and particle) in calibrated units.
    IMAQ_IMAGE_AREA                   = 5,           //Surface area of the entire image in calibrated units.
    IMAQ_PARTICLE_TO_IMAGE            = 6,           //Ratio, expressed as a percentage, of the surface area of a particle in relation to the total area of the particle.
    IMAQ_PARTICLE_TO_TOTAL            = 7,           //Ratio, expressed as a percentage, of the surface area of a particle in relation to the total area of the particle.
    IMAQ_CENTER_MASS_X                = 8,           //X-coordinate of the center of mass.
    IMAQ_CENTER_MASS_Y                = 9,           //Y-coordinate of the center of mass.
    IMAQ_LEFT_COLUMN                  = 10,          //Left edge of the bounding rectangle.
    IMAQ_TOP_ROW                      = 11,          //Top edge of the bounding rectangle.
    IMAQ_RIGHT_COLUMN                 = 12,          //Right edge of the bounding rectangle.
    IMAQ_BOTTOM_ROW                   = 13,          //Bottom edge of bounding rectangle.
    IMAQ_WIDTH                        = 14,          //Width of bounding rectangle in calibrated units.
    IMAQ_HEIGHT                       = 15,          //Height of bounding rectangle in calibrated units.
    IMAQ_MAX_SEGMENT_LENGTH           = 16,          //Length of longest horizontal line segment.
    IMAQ_MAX_SEGMENT_LEFT_COLUMN      = 17,          //Leftmost x-coordinate of longest horizontal line segment.
    IMAQ_MAX_SEGMENT_TOP_ROW          = 18,          //Y-coordinate of longest horizontal line segment.
    IMAQ_PERIMETER                    = 19,          //Outer perimeter of the particle.
    IMAQ_PERIMETER_OF_HOLES           = 20,          //Perimeter of all holes within the particle.
    IMAQ_SIGMA_X                      = 21,          //Sum of the particle pixels on the x-axis.
    IMAQ_SIGMA_Y                      = 22,          //Sum of the particle pixels on the y-axis.
    IMAQ_SIGMA_XX                     = 23,          //Sum of the particle pixels on the x-axis squared.
    IMAQ_SIGMA_YY                     = 24,          //Sum of the particle pixels on the y-axis squared.
    IMAQ_SIGMA_XY                     = 25,          //Sum of the particle pixels on the x-axis and y-axis.
    IMAQ_PROJ_X                       = 26,          //Projection corrected in X.
    IMAQ_PROJ_Y                       = 27,          //Projection corrected in Y.
    IMAQ_INERTIA_XX                   = 28,          //Inertia matrix coefficient in XX.
    IMAQ_INERTIA_YY                   = 29,          //Inertia matrix coefficient in YY.
    IMAQ_INERTIA_XY                   = 30,          //Inertia matrix coefficient in XY.
    IMAQ_MEAN_H                       = 31,          //Mean length of horizontal segments.
    IMAQ_MEAN_V                       = 32,          //Mean length of vertical segments.
    IMAQ_MAX_INTERCEPT                = 33,          //Length of longest segment of the convex hull.
    IMAQ_MEAN_INTERCEPT               = 34,          //Mean length of the chords in an object perpendicular to its max intercept.
    IMAQ_ORIENTATION                  = 35,          //The orientation based on the inertia of the pixels in the particle.
    IMAQ_EQUIV_ELLIPSE_MINOR          = 36,          //Total length of the axis of the ellipse having the same area as the particle and a major axis equal to half the max intercept.
    IMAQ_ELLIPSE_MAJOR                = 37,          //Total length of major axis having the same area and perimeter as the particle in calibrated units.
    IMAQ_ELLIPSE_MINOR                = 38,          //Total length of minor axis having the same area and perimeter as the particle in calibrated units.
    IMAQ_ELLIPSE_RATIO                = 39,          //Fraction of major axis to minor axis.
    IMAQ_RECT_LONG_SIDE               = 40,          //Length of the long side of a rectangle having the same area and perimeter as the particle in calibrated units.
    IMAQ_RECT_SHORT_SIDE              = 41,          //Length of the short side of a rectangle having the same area and perimeter as the particle in calibrated units.
    IMAQ_RECT_RATIO                   = 42,          //Ratio of rectangle long side to rectangle short side.
    IMAQ_ELONGATION                   = 43,          //Max intercept/mean perpendicular intercept.
    IMAQ_COMPACTNESS                  = 44,          //Particle area/(height x width).
    IMAQ_HEYWOOD                      = 45,          //Particle perimeter/perimeter of the circle having the same area as the particle.
    IMAQ_TYPE_FACTOR                  = 46,          //A complex factor relating the surface area to the moment of inertia.
    IMAQ_HYDRAULIC                    = 47,          //Particle area/particle perimeter.
    IMAQ_WADDLE_DISK                  = 48,          //Diameter of the disk having the same area as the particle in user units.
    IMAQ_DIAGONAL                     = 49,          //Diagonal of an equivalent rectangle in user units.
    IMAQ_MEASUREMENT_VALUE_SIZE_GUARD = 0xFFFFFFFF   
} MeasurementValue;

typedef enum ScalingMode_enum {
    IMAQ_SCALE_LARGER            = 0,           //The function duplicates pixels to make the image larger.
    IMAQ_SCALE_SMALLER           = 1,           //The function subsamples pixels to make the image smaller.
    IMAQ_SCALING_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ScalingMode;

typedef enum ScalingMethod_enum {
    IMAQ_SCALE_TO_PRESERVE_AREA    = 0,           //Correction functions scale the image such that the features in the corrected image have the same area as the features in the input image.
    IMAQ_SCALE_TO_FIT              = 1,           //Correction functions scale the image such that the corrected image is the same size as the input image.
    IMAQ_SCALING_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} ScalingMethod;

typedef enum ReferenceMode_enum {
    IMAQ_COORD_X_Y                 = 0,           //This method requires three elements in the points array.
    IMAQ_COORD_ORIGIN_X            = 1,           //This method requires two elements in the points array.
    IMAQ_REFERENCE_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ReferenceMode;

typedef enum RectOrientation_enum {
    IMAQ_BASE_INSIDE                 = 0,           //Specifies that the base of the rectangular image lies along the inside edge of the annulus.
    IMAQ_BASE_OUTSIDE                = 1,           //Specifies that the base of the rectangular image lies along the outside edge of the annulus.
    IMAQ_TEXT_ORIENTATION_SIZE_GUARD = 0xFFFFFFFF   
} RectOrientation;

typedef enum ShapeMode_enum {
    IMAQ_SHAPE_RECT            = 1,           //The function draws a rectangle.
    IMAQ_SHAPE_OVAL            = 2,           //The function draws an oval.
    IMAQ_SHAPE_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ShapeMode;

typedef enum PolarityType_enum {
    IMAQ_EDGE_RISING              = 1,           //The edge is a rising edge.
    IMAQ_EDGE_FALLING             = -1,          //The edge is a falling edge.
    IMAQ_POLARITY_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} PolarityType;

typedef enum SizeType_enum {
    IMAQ_KEEP_LARGE           = 0,           //The function keeps large particles remaining after the erosion.
    IMAQ_KEEP_SMALL           = 1,           //The function keeps small particles eliminated by the erosion.
    IMAQ_SIZE_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} SizeType;

typedef enum Plane3D_enum {
    IMAQ_3D_REAL             = 0,           //The function shows the real part of complex images.
    IMAQ_3D_IMAGINARY        = 1,           //The function shows the imaginary part of complex images.
    IMAQ_3D_MAGNITUDE        = 2,           //The function shows the magnitude part of complex images.
    IMAQ_3D_PHASE            = 3,           //The function shows the phase part of complex images.
    IMAQ_PLANE_3D_SIZE_GUARD = 0xFFFFFFFF   
} Plane3D;

typedef enum PhotometricMode_enum {
    IMAQ_WHITE_IS_ZERO               = 0,           //The function interprets zero-value pixels as white.
    IMAQ_BLACK_IS_ZERO               = 1,           //The function interprets zero-value pixels as black.
    IMAQ_PHOTOMETRIC_MODE_SIZE_GUARD = 0xFFFFFFFF   
} PhotometricMode;

typedef enum ParticleInfoMode_enum {
    IMAQ_BASIC_INFO                    = 0,           //The function returns only the following elements of each report: area, calibratedArea, boundingRect.
    IMAQ_ALL_INFO                      = 1,           //The function returns all the information about each particle.
    IMAQ_PARTICLE_INFO_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ParticleInfoMode;

typedef enum OutlineMethod_enum {
    IMAQ_EDGE_DIFFERENCE           = 0,           //The function uses a method that produces continuous contours by highlighting each pixel where an intensity variation occurs between itself and its three upper-left neighbors.
    IMAQ_EDGE_GRADIENT             = 1,           //The function uses a method that outlines contours where an intensity variation occurs along the vertical axis.
    IMAQ_EDGE_PREWITT              = 2,           //The function uses a method that extracts the outer contours of objects.
    IMAQ_EDGE_ROBERTS              = 3,           //The function uses a method that outlines the contours that highlight pixels where an intensity variation occurs along the diagonal axes.
    IMAQ_EDGE_SIGMA                = 4,           //The function uses a method that outlines contours and details by setting pixels to the mean value found in their neighborhood, if their deviation from this value is not significant.
    IMAQ_EDGE_SOBEL                = 5,           //The function uses a method that extracts the outer contours of objects.
    IMAQ_OUTLINE_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} OutlineMethod;

typedef enum MorphologyMethod_enum {
    IMAQ_AUTOM                        = 0,           //The function uses a transformation that generates simpler particles that contain fewer details.
    IMAQ_CLOSE                        = 1,           //The function uses a transformation that fills tiny holes and smooths boundaries.
    IMAQ_DILATE                       = 2,           //The function uses a transformation that eliminates tiny holes isolated in particles and expands the contour of the particles according to the template defined by the structuring element.
    IMAQ_ERODE                        = 3,           //The function uses a transformation that eliminates pixels isolated in the background and erodes the contour of particles according to the template defined by the structuring element.
    IMAQ_GRADIENT                     = 4,           //The function uses a transformation that leaves only the pixels that would be added by the dilation process or eliminated by the erosion process.
    IMAQ_GRADIENTOUT                  = 5,           //The function uses a transformation that leaves only the pixels that would be added by the dilation process.
    IMAQ_GRADIENTIN                   = 6,           //The function uses a transformation that leaves only the pixels that would be eliminated by the erosion process.
    IMAQ_HITMISS                      = 7,           //The function uses a transformation that extracts each pixel located in a neighborhood exactly matching the template defined by the structuring element.
    IMAQ_OPEN                         = 8,           //The function uses a transformation that removes small particles and smooths boundaries.
    IMAQ_PCLOSE                       = 9,           //The function uses a transformation that fills tiny holes and smooths the inner contour of particles according to the template defined by the structuring element.
    IMAQ_POPEN                        = 10,          //The function uses a transformation that removes small particles and smooths the contour of particles according to the template defined by the structuring element.
    IMAQ_THICK                        = 11,          //The function uses a transformation that adds to an image those pixels located in a neighborhood that matches a template specified by the structuring element.
    IMAQ_THIN                         = 12,          //The function uses a transformation that eliminates pixels that are located in a neighborhood matching a template specified by the structuring element.
    IMAQ_MORPHOLOGY_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} MorphologyMethod;

typedef enum MeterArcMode_enum {
    IMAQ_METER_ARC_ROI             = 0,           //The function uses the roi parameter and ignores the base, start, and end parameters.
    IMAQ_METER_ARC_POINTS          = 1,           //The function uses the base,start, and end parameters and ignores the roi parameter.
    IMAQ_METER_ARC_MODE_SIZE_GUARD = 0xFFFFFFFF   
} MeterArcMode;

typedef enum RakeDirection_enum {
    IMAQ_LEFT_TO_RIGHT             = 0,           //The function searches from the left side of the search area to the right side of the search area.
    IMAQ_RIGHT_TO_LEFT             = 1,           //The function searches from the right side of the search area to the left side of the search area.
    IMAQ_TOP_TO_BOTTOM             = 2,           //The function searches from the top side of the search area to the bottom side of the search area.
    IMAQ_BOTTOM_TO_TOP             = 3,           //The function searches from the bottom side of the search area to the top side of the search area.
    IMAQ_RAKE_DIRECTION_SIZE_GUARD = 0xFFFFFFFF   
} RakeDirection;

typedef enum TruncateMode_enum {
    IMAQ_TRUNCATE_LOW             = 0,           //The function truncates low frequencies.
    IMAQ_TRUNCATE_HIGH            = 1,           //The function truncates high frequencies.
    IMAQ_TRUNCATE_MODE_SIZE_GUARD = 0xFFFFFFFF   
} TruncateMode;

typedef enum AttenuateMode_enum {
    IMAQ_ATTENUATE_LOW             = 0,           //The function attenuates low frequencies.
    IMAQ_ATTENUATE_HIGH            = 1,           //The function attenuates high frequencies.
    IMAQ_ATTENUATE_MODE_SIZE_GUARD = 0xFFFFFFFF   
} AttenuateMode;

typedef enum WindowThreadPolicy_enum {
    IMAQ_CALLING_THREAD                  = 0,           //Using this policy, NI Vision creates windows in the thread that makes the first display function call for a given window number.
    IMAQ_SEPARATE_THREAD                 = 1,           //Using this policy, NI Vision creates windows in a separate thread and processes messages for the windows automatically.
    IMAQ_WINDOW_THREAD_POLICY_SIZE_GUARD = 0xFFFFFFFF   
} WindowThreadPolicy;

typedef enum WindowOptions_enum {
    IMAQ_WIND_RESIZABLE            = 1,           //When present, the user may resize the window interactively.
    IMAQ_WIND_TITLEBAR             = 2,           //When present, the title bar on the window is visible.
    IMAQ_WIND_CLOSEABLE            = 4,           //When present, the close box is available.
    IMAQ_WIND_TOPMOST              = 8,           //When present, the window is always on top.
    IMAQ_WINDOW_OPTIONS_SIZE_GUARD = 0xFFFFFFFF   
} WindowOptions;

typedef enum WindowEventType_enum {
    IMAQ_NO_EVENT                     = 0,           //No event occurred since the last call to imaqGetLastEvent().
    IMAQ_CLICK_EVENT                  = 1,           //The user clicked on a window.
    IMAQ_DRAW_EVENT                   = 2,           //The user drew an ROI in a window.
    IMAQ_MOVE_EVENT                   = 3,           //The user moved a window.
    IMAQ_SIZE_EVENT                   = 4,           //The user sized a window.
    IMAQ_SCROLL_EVENT                 = 5,           //The user scrolled a window.
    IMAQ_ACTIVATE_EVENT               = 6,           //The user activated a window.
    IMAQ_CLOSE_EVENT                  = 7,           //The user closed a window.
    IMAQ_DOUBLE_CLICK_EVENT           = 8,           //The user double-clicked in a window.
    IMAQ_WINDOW_EVENT_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} WindowEventType;

typedef enum VisionInfoType_enum {
    IMAQ_ANY_VISION_INFO             = 0,           //The function checks if any extra vision information is associated with the image.
    IMAQ_PATTERN_MATCHING_INFO       = 1,           //The function checks if any pattern matching template information is associated with the image.
    IMAQ_CALIBRATION_INFO            = 2,           //The function checks if any calibration information is associated with the image.
    IMAQ_OVERLAY_INFO                = 3,           //The function checks if any overlay information is associated with the image.
    IMAQ_VISION_INFO_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} VisionInfoType;

typedef enum SearchStrategy_enum {
    IMAQ_CONSERVATIVE               = 1,           //Instructs the pattern matching algorithm to use the largest possible amount of information from the image at the expense of slowing down the speed of the algorithm.
    IMAQ_BALANCED                   = 2,           //Instructs the pattern matching algorithm to balance the amount of information from the image it uses with the speed of the algorithm.
    IMAQ_AGGRESSIVE                 = 3,           //Instructs the pattern matching algorithm to use a lower amount of information from the image, which allows the algorithm to run quickly but at the expense of accuracy.
    IMAQ_VERY_AGGRESSIVE            = 4,           //Instructs the pattern matching algorithm to use the smallest possible amount of information from the image, which allows the algorithm to run at the highest speed possible but at the expense of accuracy.
    IMAQ_SEARCH_STRATEGY_SIZE_GUARD = 0xFFFFFFFF   
} SearchStrategy;

typedef enum TwoEdgePolarityType_enum {
    IMAQ_NONE                              = 0,           //The function ignores the polarity of the edges.
    IMAQ_RISING_FALLING                    = 1,           //The polarity of the first edge is rising (dark to light) and the polarity of the second edge is falling (light to dark).
    IMAQ_FALLING_RISING                    = 2,           //The polarity of the first edge is falling (light to dark) and the polarity of the second edge is rising (dark to light).
    IMAQ_RISING_RISING                     = 3,           //The polarity of the first edge is rising (dark to light) and the polarity of the second edge is rising (dark to light).
    IMAQ_FALLING_FALLING                   = 4,           //The polarity of the first edge is falling (light to dark) and the polarity of the second edge is falling (light to dark).
    IMAQ_TWO_EDGE_POLARITY_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} TwoEdgePolarityType;

typedef enum ObjectType_enum {
    IMAQ_BRIGHT_OBJECTS         = 0,           //The function detects bright objects.
    IMAQ_DARK_OBJECTS           = 1,           //The function detects dark objects.
    IMAQ_OBJECT_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} ObjectType;

typedef enum Tool_enum {
    IMAQ_NO_TOOL              = -1,          //No tool is in the selected state.
    IMAQ_SELECTION_TOOL       = 0,           //The selection tool selects an existing ROI in an image.
    IMAQ_POINT_TOOL           = 1,           //The point tool draws a point on the image.
    IMAQ_LINE_TOOL            = 2,           //The line tool draws a line on the image.
    IMAQ_RECTANGLE_TOOL       = 3,           //The rectangle tool draws a rectangle on the image.
    IMAQ_OVAL_TOOL            = 4,           //The oval tool draws an oval on the image.
    IMAQ_POLYGON_TOOL         = 5,           //The polygon tool draws a polygon on the image.
    IMAQ_CLOSED_FREEHAND_TOOL = 6,           //The closed freehand tool draws closed freehand shapes on the image.
    IMAQ_ANNULUS_TOOL         = 7,           //The annulus tool draws annuluses on the image.
    IMAQ_ZOOM_TOOL            = 8,           //The zoom tool controls the zoom of an image.
    IMAQ_PAN_TOOL             = 9,           //The pan tool shifts the view of the image.
    IMAQ_POLYLINE_TOOL        = 10,          //The polyline tool draws a series of connected straight lines on the image.
    IMAQ_FREEHAND_TOOL        = 11,          //The freehand tool draws freehand lines on the image.
    IMAQ_ROTATED_RECT_TOOL    = 12,          //The rotated rectangle tool draws rotated rectangles on the image.
    IMAQ_ZOOM_OUT_TOOL        = 13,          //The zoom out tool controls the zoom of an image.
    IMAQ_TOOL_SIZE_GUARD      = 0xFFFFFFFF   
} Tool;

typedef enum TIFFCompressionType_enum {
    IMAQ_NO_COMPRESSION                   = 0,           //The function does not compress the TIFF file.
    IMAQ_JPEG                             = 1,           //The function uses the JPEG compression algorithm to compress the TIFF file.
    IMAQ_RUN_LENGTH                       = 2,           //The function uses a run length compression algorithm to compress the TIFF file.
    IMAQ_ZIP                              = 3,           //The function uses the ZIP compression algorithm to compress the TIFF file.
    IMAQ_TIFF_COMPRESSION_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} TIFFCompressionType;

typedef enum ThresholdMethod_enum {
    IMAQ_THRESH_CLUSTERING           = 0,           //The function uses a method that sorts the histogram of the image within a discrete number of classes corresponding to the number of phases perceived in an image.
    IMAQ_THRESH_ENTROPY              = 1,           //The function uses a method that is best for detecting particles that are present in minuscule proportions on the image.
    IMAQ_THRESH_METRIC               = 2,           //The function uses a method that is well-suited for images in which classes are not too disproportionate.
    IMAQ_THRESH_MOMENTS              = 3,           //The function uses a method that is suited for images that have poor contrast.
    IMAQ_THRESH_INTERCLASS           = 4,           //The function uses a method that is well-suited for images in which classes have well separated pixel value distributions.
    IMAQ_THRESHOLD_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} ThresholdMethod;

typedef enum TextAlignment_enum {
    IMAQ_LEFT                      = 0,           //Left aligns the text at the reference point.
    IMAQ_CENTER                    = 1,           //Centers the text around the reference point.
    IMAQ_RIGHT                     = 2,           //Right aligns the text at the reference point.
    IMAQ_TEXT_ALIGNMENT_SIZE_GUARD = 0xFFFFFFFF   
} TextAlignment;

typedef enum SpokeDirection_enum {
    IMAQ_OUTSIDE_TO_INSIDE          = 0,           //The function searches from the outside of the search area to the inside of the search area.
    IMAQ_INSIDE_TO_OUTSIDE          = 1,           //The function searches from the inside of the search area to the outside of the search area.
    IMAQ_SPOKE_DIRECTION_SIZE_GUARD = 0xFFFFFFFF   
} SpokeDirection;

typedef enum SkeletonMethod_enum {
    IMAQ_SKELETON_L                 = 0,           //Uses an L-shaped structuring element in the skeleton function.
    IMAQ_SKELETON_M                 = 1,           //Uses an M-shaped structuring element in the skeleton function.
    IMAQ_SKELETON_INVERSE           = 2,           //Uses an L-shaped structuring element on an inverse of the image in the skeleton function.
    IMAQ_SKELETON_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} SkeletonMethod;

typedef enum VerticalTextAlignment_enum {
    IMAQ_BOTTOM                             = 0,           //Aligns the bottom of the text at the reference point.
    IMAQ_TOP                                = 1,           //Aligns the top of the text at the reference point.
    IMAQ_BASELINE                           = 2,           //Aligns the baseline of the text at the reference point.
    IMAQ_VERTICAL_TEXT_ALIGNMENT_SIZE_GUARD = 0xFFFFFFFF   
} VerticalTextAlignment;

typedef enum CalibrationROI_enum {
    IMAQ_FULL_IMAGE                 = 0,           //The correction function corrects the whole image, regardless of the user-defined or calibration-defined ROIs.
    IMAQ_CALIBRATION_ROI            = 1,           //The correction function corrects the area defined by the calibration ROI.
    IMAQ_USER_ROI                   = 2,           //The correction function corrects the area defined by the user-defined ROI.
    IMAQ_CALIBRATION_AND_USER_ROI   = 3,           //The correction function corrects the area defined by the intersection of the user-defined ROI and the calibration ROI.
    IMAQ_CALIBRATION_OR_USER_ROI    = 4,           //The correction function corrects the area defined by the union of the user-defined ROI and the calibration ROI.
    IMAQ_CALIBRATION_ROI_SIZE_GUARD = 0xFFFFFFFF   
} CalibrationROI;

typedef enum ContourType_enum {
    IMAQ_EMPTY_CONTOUR           = 0,           //The contour is empty.
    IMAQ_POINT                   = 1,           //The contour represents a point.
    IMAQ_LINE                    = 2,           //The contour represents a line.
    IMAQ_RECT                    = 3,           //The contour represents a rectangle.
    IMAQ_OVAL                    = 4,           //The contour represents an oval.
    IMAQ_CLOSED_CONTOUR          = 5,           //The contour represents a series of connected points where the last point connects to the first.
    IMAQ_OPEN_CONTOUR            = 6,           //The contour represents a series of connected points where the last point does not connect to the first.
    IMAQ_ANNULUS                 = 7,           //The contour represents an annulus.
    IMAQ_ROTATED_RECT            = 8,           //The contour represents a rotated rectangle.
    IMAQ_CONTOUR_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} ContourType;

typedef enum MathTransformMethod_enum {
    IMAQ_TRANSFORM_LINEAR                 = 0,           //The function uses linear remapping.
    IMAQ_TRANSFORM_LOG                    = 1,           //The function uses logarithmic remapping.
    IMAQ_TRANSFORM_EXP                    = 2,           //The function uses exponential remapping.
    IMAQ_TRANSFORM_SQR                    = 3,           //The function uses square remapping.
    IMAQ_TRANSFORM_SQRT                   = 4,           //The function uses square root remapping.
    IMAQ_TRANSFORM_POWX                   = 5,           //The function uses power X remapping.
    IMAQ_TRANSFORM_POW1X                  = 6,           //The function uses power 1/X remapping.
    IMAQ_MATH_TRANSFORM_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} MathTransformMethod;

typedef enum ComplexPlane_enum {
    IMAQ_REAL                     = 0,           //The function operates on the real plane of the complex image.
    IMAQ_IMAGINARY                = 1,           //The function operates on the imaginary plane of the complex image.
    IMAQ_MAGNITUDE                = 2,           //The function operates on the magnitude plane of the complex image.
    IMAQ_PHASE                    = 3,           //The function operates on the phase plane of the complex image.
    IMAQ_COMPLEX_PLANE_SIZE_GUARD = 0xFFFFFFFF   
} ComplexPlane;

typedef enum PaletteType_enum {
    IMAQ_PALETTE_GRAY            = 0,           //The function uses a palette that has a gradual gray-level variation from black to white.
    IMAQ_PALETTE_BINARY          = 1,           //The function uses a palette of 16 cycles of 16 different colors that is useful with binary images.
    IMAQ_PALETTE_GRADIENT        = 2,           //The function uses a palette that has a gradation from red to white with a prominent range of light blue in the upper value range.
    IMAQ_PALETTE_RAINBOW         = 3,           //The function uses a palette that has a gradation from blue to red with a prominent range of greens in the middle value range.
    IMAQ_PALETTE_TEMPERATURE     = 4,           //The function uses a palette that has a gradation from light brown to dark brown.
    IMAQ_PALETTE_USER            = 5,           //The function uses a palette defined by the user.
    IMAQ_PALETTE_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} PaletteType;

typedef enum ColorSensitivity_enum {
    IMAQ_SENSITIVITY_LOW              = 0,           //Instructs the algorithm to divide the hue plane into a low number of sectors, allowing for simple color analysis.
    IMAQ_SENSITIVITY_MED              = 1,           //Instructs the algorithm to divide the hue plane into a medium number of sectors, allowing for color analysis that balances sensitivity and complexity.
    IMAQ_SENSITIVITY_HIGH             = 2,           //Instructs the algorithm to divide the hue plane into a high number of sectors, allowing for complex, sensitive color analysis.
    IMAQ_COLOR_SENSITIVITY_SIZE_GUARD = 0xFFFFFFFF   
} ColorSensitivity;

typedef enum ColorMode_enum {
    IMAQ_RGB                   = 0,           //The function operates in the RGB (Red, Blue, Green) color space.
    IMAQ_HSL                   = 1,           //The function operates in the HSL (Hue, Saturation, Luminance) color space.
    IMAQ_HSV                   = 2,           //The function operates in the HSV (Hue, Saturation, Value) color space.
    IMAQ_HSI                   = 3,           //The function operates in the HSI (Hue, Saturation, Intensity) color space.
    IMAQ_CIE                   = 4,           //The function operates in the CIE L*a*b* color space.
    IMAQ_CIEXYZ                = 5,           //The function operates in the CIE XYZ color space.
    IMAQ_COLOR_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ColorMode;

typedef enum DetectionMode_enum {
    IMAQ_DETECT_PEAKS              = 0,           //The function detects peaks.
    IMAQ_DETECT_VALLEYS            = 1,           //The function detects valleys.
    IMAQ_DETECTION_MODE_SIZE_GUARD = 0xFFFFFFFF   
} DetectionMode;

typedef enum CalibrationUnit_enum {
    IMAQ_UNDEFINED                   = 0,           //The image does not have a defined unit of measurement.
    IMAQ_ANGSTROM                    = 1,           //The unit of measure for the image is angstroms.
    IMAQ_MICROMETER                  = 2,           //The unit of measure for the image is micrometers.
    IMAQ_MILLIMETER                  = 3,           //The unit of measure for the image is millimeters.
    IMAQ_CENTIMETER                  = 4,           //The unit of measure for the image is centimeters.
    IMAQ_METER                       = 5,           //The unit of measure for the image is meters.
    IMAQ_KILOMETER                   = 6,           //The unit of measure for the image is kilometers.
    IMAQ_MICROINCH                   = 7,           //The unit of measure for the image is microinches.
    IMAQ_INCH                        = 8,           //The unit of measure for the image is inches.
    IMAQ_FOOT                        = 9,           //The unit of measure for the image is feet.
    IMAQ_NAUTICMILE                  = 10,          //The unit of measure for the image is nautical miles.
    IMAQ_GROUNDMILE                  = 11,          //The unit of measure for the image is ground miles.
    IMAQ_STEP                        = 12,          //The unit of measure for the image is steps.
    IMAQ_CALIBRATION_UNIT_SIZE_GUARD = 0xFFFFFFFF   
} CalibrationUnit;

typedef enum ConcentricRakeDirection_enum {
    IMAQ_COUNTER_CLOCKWISE                    = 0,           //The function searches the search area in a counter-clockwise direction.
    IMAQ_CLOCKWISE                            = 1,           //The function searches the search area in a clockwise direction.
    IMAQ_CONCENTRIC_RAKE_DIRECTION_SIZE_GUARD = 0xFFFFFFFF   
} ConcentricRakeDirection;

typedef enum CalibrationMode_enum {
    IMAQ_PERSPECTIVE                 = 0,           //Functions correct for distortion caused by the camera's perspective.
    IMAQ_NONLINEAR                   = 1,           //Functions correct for distortion caused by the camera's lens.
    IMAQ_SIMPLE_CALIBRATION          = 2,           //Functions do not correct for distortion.
    IMAQ_CORRECTED_IMAGE             = 3,           //The image is already corrected.
    IMAQ_CALIBRATION_MODE_SIZE_GUARD = 0xFFFFFFFF   
} CalibrationMode;

typedef enum BrowserLocation_enum {
    IMAQ_INSERT_FIRST_FREE           = 0,           //Inserts the thumbnail in the first available cell.
    IMAQ_INSERT_END                  = 1,           //Inserts the thumbnail after the last occupied cell.
    IMAQ_BROWSER_LOCATION_SIZE_GUARD = 0xFFFFFFFF   
} BrowserLocation;

typedef enum BrowserFrameStyle_enum {
    IMAQ_RAISED_FRAME                   = 0,           //Each thumbnail has a raised frame.
    IMAQ_BEVELLED_FRAME                 = 1,           //Each thumbnail has a beveled frame.
    IMAQ_OUTLINE_FRAME                  = 2,           //Each thumbnail has an outlined frame.
    IMAQ_HIDDEN_FRAME                   = 3,           //Each thumbnail has a hidden frame.
    IMAQ_STEP_FRAME                     = 4,           //Each thumbnail has a stepped frame.
    IMAQ_RAISED_OUTLINE_FRAME           = 5,           //Each thumbnail has a raised, outlined frame.
    IMAQ_BROWSER_FRAME_STYLE_SIZE_GUARD = 0xFFFFFFFF   
} BrowserFrameStyle;

typedef enum BorderMethod_enum {
    IMAQ_BORDER_MIRROR            = 0,           //Symmetrically copies pixel values from the image into the border.
    IMAQ_BORDER_COPY              = 1,           //Copies the value of the pixel closest to the edge of the image into the border.
    IMAQ_BORDER_CLEAR             = 2,           //Sets all pixels in the border to 0.
    IMAQ_BORDER_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} BorderMethod;

typedef enum BarcodeType_enum {
    IMAQ_INVALID                 = -1,          //The barcode is not of a type known by NI Vision.
    IMAQ_CODABAR                 = 1,           //The barcode is of type Codabar.
    IMAQ_CODE39                  = 2,           //The barcode is of type Code 39.
    IMAQ_CODE93                  = 4,           //The barcode is of type Code 93.
    IMAQ_CODE128                 = 8,           //The barcode is of type Code 128.
    IMAQ_EAN8                    = 16,          //The barcode is of type EAN 8.
    IMAQ_EAN13                   = 32,          //The barcode is of type EAN 13.
    IMAQ_I2_OF_5                 = 64,          //The barcode is of type Code 25.
    IMAQ_MSI                     = 128,         //The barcode is of type MSI code.
    IMAQ_UPCA                    = 256,         //The barcode is of type UPC A.
    IMAQ_PHARMACODE              = 512,         //The barcode is of type Pharmacode.
    IMAQ_RSS_LIMITED             = 1024,        //The barcode is of type RSS Limited.
    IMAQ_BARCODE_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} BarcodeType;

typedef enum AxisOrientation_enum {
    IMAQ_DIRECT                      = 0,           //The y-axis direction corresponds to the y-axis direction of the Cartesian coordinate system.
    IMAQ_INDIRECT                    = 1,           //The y-axis direction corresponds to the y-axis direction of an image.
    IMAQ_AXIS_ORIENTATION_SIZE_GUARD = 0xFFFFFFFF   
} AxisOrientation;

typedef enum ColorIgnoreMode_enum {
    IMAQ_IGNORE_NONE                        = 0,           //Specifies that the function does not ignore any pixels.
    IMAQ_IGNORE_BLACK                       = 1,           //Specifies that the function ignores black pixels.
    IMAQ_IGNORE_WHITE                       = 2,           //Specifies that the function ignores white pixels.
    IMAQ_IGNORE_BLACK_AND_WHITE             = 3,           //Specifies that the function ignores black pixels and white pixels.
    IMAQ_BLACK_WHITE_IGNORE_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ColorIgnoreMode;

typedef enum LevelType_enum {
    IMAQ_ABSOLUTE              = 0,           //The function evaluates the threshold and hysteresis values as absolute values.
    IMAQ_RELATIVE              = 1,           //The function evaluates the threshold and hysteresis values relative to the dynamic range of the given path.
    IMAQ_LEVEL_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} LevelType;

typedef enum MatchingMode_enum {
    IMAQ_MATCH_SHIFT_INVARIANT    = 1,           //Searches for occurrences of the template image anywhere in the searchRect, assuming that the pattern is not rotated more than plus or minus 4 degrees.
    IMAQ_MATCH_ROTATION_INVARIANT = 2,           //Searches for occurrences of the pattern in the image with no restriction on the rotation of the pattern.
    IMAQ_MATCHING_MODE_SIZE_GUARD = 0xFFFFFFFF   
} MatchingMode;

typedef enum MappingMethod_enum {
    IMAQ_FULL_DYNAMIC              = 0,           //(Obsolete) When the image bit depth is 0, the function maps the full dynamic range of the 16-bit image to an 8-bit scale.
    IMAQ_DOWNSHIFT                 = 1,           //(Obsolete) When the image bit depth is 0, the function shifts the 16-bit image pixels to the right the number of times specified by the shiftCount element of the DisplayMapping structure.
    IMAQ_RANGE                     = 2,           //(Obsolete) When the image bit depth is 0, the function maps the pixel values in the range specified by the minimumValue and maximumValue elements of the DisplayMapping structure to an 8-bit scale.
    IMAQ_90_PCT_DYNAMIC            = 3,           //(Obsolete) When the image bit depth to 0, the function maps the dynamic range containing the middle 90 percent of the cumulated histogram of the image to an 8-bit (256 grayscale values) scale.
    IMAQ_PERCENT_RANGE             = 4,           //(Obsolete) When the image bit depth is 0, the function maps the pixel values in the relative percentage range (0 to 100) of the cumulated histogram specified by minimumValue and maximumValue to an 8-bit scale.
    IMAQ_DEFAULT_MAPPING           = 10,          //If the bit depth is 0, the function maps the 16-bit image to 8 bits by following the IMAQ_FULL_DYNAMIC_ALWAYS behavior; otherwise, the function shifts the image data to the right according to the IMAQ_MOST_SIGNIFICANT behavior.
    IMAQ_MOST_SIGNIFICANT          = 11,          //The function shifts the 16-bit image pixels to the right until the 8 most significant bits of the image data are remaining.
    IMAQ_FULL_DYNAMIC_ALWAYS       = 12,          //The function maps the full dynamic range of the 16-bit image to an 8-bit scale.
    IMAQ_DOWNSHIFT_ALWAYS          = 13,          //The function shifts the 16-bit image pixels to the right the number of times specified by the shiftCount element of the DisplayMapping structure.
    IMAQ_RANGE_ALWAYS              = 14,          //The function maps the pixel values in the range specified by the minimumValue and maximumValue elements of the DisplayMapping structure to an 8-bit scale.
    IMAQ_90_PCT_DYNAMIC_ALWAYS     = 15,          //The function maps the dynamic range containing the middle 90 percent of the cumulated histogram of the image to an 8-bit (256 grayscale values) scale.
    IMAQ_PERCENT_RANGE_ALWAYS      = 16,          //The function maps the pixel values in the relative percentage range (0 to 100) of the cumulated histogram specified by minimumValue and maximumValue to an 8-bit scale.
    IMAQ_MAPPING_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} MappingMethod;

typedef enum ComparisonFunction_enum {
    IMAQ_CLEAR_LESS                  = 0,           //The comparison is true if the source pixel value is less than the comparison image pixel value.
    IMAQ_CLEAR_LESS_OR_EQUAL         = 1,           //The comparison is true if the source pixel value is less than or equal to the comparison image pixel value.
    IMAQ_CLEAR_EQUAL                 = 2,           //The comparison is true if the source pixel value is equal to the comparison image pixel value.
    IMAQ_CLEAR_GREATER_OR_EQUAL      = 3,           //The comparison is true if the source pixel value is greater than or equal to the comparison image pixel value.
    IMAQ_CLEAR_GREATER               = 4,           //The comparison is true if the source pixel value is greater than the comparison image pixel value.
    IMAQ_COMPARE_FUNCTION_SIZE_GUARD = 0xFFFFFFFF   
} ComparisonFunction;

typedef enum LineGaugeMethod_enum {
    IMAQ_EDGE_TO_EDGE                 = 0,           //Measures from the first edge on the line to the last edge on the line.
    IMAQ_EDGE_TO_POINT                = 1,           //Measures from the first edge on the line to the end point of the line.
    IMAQ_POINT_TO_EDGE                = 2,           //Measures from the start point of the line to the first edge on the line.
    IMAQ_POINT_TO_POINT               = 3,           //Measures from the start point of the line to the end point of the line.
    IMAQ_LINE_GAUGE_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} LineGaugeMethod;

typedef enum Direction3D_enum {
    IMAQ_3D_NW                   = 0,           //The viewing angle for the 3D image is from the northwest.
    IMAQ_3D_SW                   = 1,           //The viewing angle for the 3D image is from the southwest.
    IMAQ_3D_SE                   = 2,           //The viewing angle for the 3D image is from the southeast.
    IMAQ_3D_NE                   = 3,           //The viewing angle for the 3D image is from the northeast.
    IMAQ_DIRECTION_3D_SIZE_GUARD = 0xFFFFFFFF   
} Direction3D;

typedef enum LearningMode_enum {
    IMAQ_LEARN_ALL                  = 0,           //The function extracts information for shift- and rotation-invariant matching.
    IMAQ_LEARN_SHIFT_INFORMATION    = 1,           //The function extracts information for shift-invariant matching.
    IMAQ_LEARN_ROTATION_INFORMATION = 2,           //The function extracts information for rotation-invariant matching.
    IMAQ_LEARNING_MODE_SIZE_GUARD   = 0xFFFFFFFF   
} LearningMode;

typedef enum KernelFamily_enum {
    IMAQ_GRADIENT_FAMILY          = 0,           //The kernel is in the gradient family.
    IMAQ_LAPLACIAN_FAMILY         = 1,           //The kernel is in the Laplacian family.
    IMAQ_SMOOTHING_FAMILY         = 2,           //The kernel is in the smoothing family.
    IMAQ_GAUSSIAN_FAMILY          = 3,           //The kernel is in the Gaussian family.
    IMAQ_KERNEL_FAMILY_SIZE_GUARD = 0xFFFFFFFF   
} KernelFamily;

typedef enum InterpolationMethod_enum {
    IMAQ_ZERO_ORDER                      = 0,           //The function uses an interpolation method that interpolates new pixel values using the nearest valid neighboring pixel.
    IMAQ_BILINEAR                        = 1,           //The function uses an interpolation method that interpolates new pixel values using a bidirectional average of the neighboring pixels.
    IMAQ_QUADRATIC                       = 2,           //The function uses an interpolation method that interpolates new pixel values using a quadratic approximating polynomial.
    IMAQ_CUBIC_SPLINE                    = 3,           //The function uses an interpolation method that interpolates new pixel values by fitting them to a cubic spline curve, where the curve is based on known pixel values from the image.
    IMAQ_BILINEAR_FIXED                  = 4,           //The function uses an interpolation method that interpolates new pixel values using a bidirectional average of the neighboring pixels.
    IMAQ_INTERPOLATION_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} InterpolationMethod;

typedef enum ImageType_enum {
    IMAQ_IMAGE_U8              = 0,           //The image type is 8-bit unsigned integer grayscale.
    IMAQ_IMAGE_U16             = 7,           //The image type is 16-bit unsigned integer grayscale.
    IMAQ_IMAGE_I16             = 1,           //The image type is 16-bit signed integer grayscale.
    IMAQ_IMAGE_SGL             = 2,           //The image type is 32-bit floating-point grayscale.
    IMAQ_IMAGE_COMPLEX         = 3,           //The image type is complex.
    IMAQ_IMAGE_RGB             = 4,           //The image type is RGB color.
    IMAQ_IMAGE_HSL             = 5,           //The image type is HSL color.
    IMAQ_IMAGE_RGB_U64         = 6,           //The image type is 64-bit unsigned RGB color.
    IMAQ_IMAGE_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} ImageType;

typedef enum ImageFeatureMode_enum {
    IMAQ_COLOR_AND_SHAPE_FEATURES = 0,           //Instructs the function to use the color and the shape features of the color pattern.
    IMAQ_COLOR_FEATURES           = 1,           //Instructs the function to use the color features of the color pattern.
    IMAQ_SHAPE_FEATURES           = 2,           //Instructs the function to use the shape features of the color pattern.
    IMAQ_FEATURE_MODE_SIZE_GUARD  = 0xFFFFFFFF   
} ImageFeatureMode;

typedef enum FontColor_enum {
    IMAQ_WHITE                 = 0,           //Draws text in white.
    IMAQ_BLACK                 = 1,           //Draws text in black.
    IMAQ_INVERT                = 2,           //Inverts the text pixels.
    IMAQ_BLACK_ON_WHITE        = 3,           //Draws text in black with a white background.
    IMAQ_WHITE_ON_BLACK        = 4,           //Draws text in white with a black background.
    IMAQ_FONT_COLOR_SIZE_GUARD = 0xFFFFFFFF   
} FontColor;

typedef enum FlipAxis_enum {
    IMAQ_HORIZONTAL_AXIS      = 0,           //Flips the image over the central horizontal axis.
    IMAQ_VERTICAL_AXIS        = 1,           //Flips the image over the central vertical axis.
    IMAQ_CENTER_AXIS          = 2,           //Flips the image over both the central vertical and horizontal axes.
    IMAQ_DIAG_L_TO_R_AXIS     = 3,           //Flips the image over an axis from the upper left corner to lower right corner.
    IMAQ_DIAG_R_TO_L_AXIS     = 4,           //Flips the image over an axis from the upper right corner to lower left corner.
    IMAQ_FLIP_AXIS_SIZE_GUARD = 0xFFFFFFFF   
} FlipAxis;

typedef enum EdgeProcess_enum {
    IMAQ_FIRST                   = 0,           //The function looks for the first edge.
    IMAQ_FIRST_AND_LAST          = 1,           //The function looks for the first and last edge.
    IMAQ_ALL                     = 2,           //The function looks for all edges.
    IMAQ_BEST                    = 3,           //The function looks for the best edge.
    IMAQ_EDGE_PROCESS_SIZE_GUARD = 0xFFFFFFFF   
} EdgeProcess;

typedef enum DrawMode_enum {
    IMAQ_DRAW_VALUE           = 0,           //Draws the boundary of the object with the specified pixel value.
    IMAQ_DRAW_INVERT          = 2,           //Inverts the pixel values of the boundary of the object.
    IMAQ_PAINT_VALUE          = 1,           //Fills the object with the given pixel value.
    IMAQ_PAINT_INVERT         = 3,           //Inverts the pixel values of the object.
    IMAQ_HIGHLIGHT_VALUE      = 4,           //The function fills the object by highlighting the enclosed pixels with the color of the object.
    IMAQ_DRAW_MODE_SIZE_GUARD = 0xFFFFFFFF   
} DrawMode;

typedef enum NearestNeighborMetric_enum {
    IMAQ_METRIC_MAXIMUM                     = 0,           //The maximum metric.
    IMAQ_METRIC_SUM                         = 1,           //The sum metric.
    IMAQ_METRIC_EUCLIDEAN                   = 2,           //The Euclidean metric.
    IMAQ_NEAREST_NEIGHBOR_METRIC_SIZE_GUARD = 0xFFFFFFFF   
} NearestNeighborMetric;

typedef enum ReadResolution_enum {
    IMAQ_LOW_RESOLUTION             = 0,           //Configures NI Vision to use low resolution during the read process.
    IMAQ_MEDIUM_RESOLUTION          = 1,           //Configures NI Vision to use medium resolution during the read process.
    IMAQ_HIGH_RESOLUTION            = 2,           //Configures NI Vision to use high resolution during the read process.
    IMAQ_READ_RESOLUTION_SIZE_GUARD = 0xFFFFFFFF   
} ReadResolution;

typedef enum ThresholdMode_enum {
    IMAQ_FIXED_RANGE               = 0,           //Performs thresholding using the values you provide in the lowThreshold and highThreshold elements of OCRProcessingOptions.
    IMAQ_COMPUTED_UNIFORM          = 1,           //Calculates a single threshold value for the entire ROI.
    IMAQ_COMPUTED_LINEAR           = 2,           //Calculates a value on the left side of the ROI, calculates a value on the right side of the ROI, and linearly fills the middle values from left to right.
    IMAQ_COMPUTED_NONLINEAR        = 3,           //Divides the ROI into the number of blocks specified by the blockCount element of OCRProcessingOptions and calculates a threshold value for each block.
    IMAQ_THRESHOLD_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ThresholdMode;

typedef enum ReadStrategy_enum {
    IMAQ_READ_AGGRESSIVE          = 0,           //Configures NI Vision to perform fewer checks when analyzing objects to determine if they match trained characters.
    IMAQ_READ_CONSERVATIVE        = 1,           //Configures NI Vision to perform more checks to determine if an object matches a trained character.
    IMAQ_READ_STRATEGY_SIZE_GUARD = 0xFFFFFFFF   
} ReadStrategy;

typedef enum MeasurementType_enum {
    IMAQ_MT_CENTER_OF_MASS_X                    = 0,           //X-coordinate of the point representing the average position of the total particle mass, assuming every point in the particle has a constant density.
    IMAQ_MT_CENTER_OF_MASS_Y                    = 1,           //Y-coordinate of the point representing the average position of the total particle mass, assuming every point in the particle has a constant density.
    IMAQ_MT_FIRST_PIXEL_X                       = 2,           //X-coordinate of the highest, leftmost particle pixel.
    IMAQ_MT_FIRST_PIXEL_Y                       = 3,           //Y-coordinate of the highest, leftmost particle pixel.
    IMAQ_MT_BOUNDING_RECT_LEFT                  = 4,           //X-coordinate of the leftmost particle point.
    IMAQ_MT_BOUNDING_RECT_TOP                   = 5,           //Y-coordinate of highest particle point.
    IMAQ_MT_BOUNDING_RECT_RIGHT                 = 6,           //X-coordinate of the rightmost particle point.
    IMAQ_MT_BOUNDING_RECT_BOTTOM                = 7,           //Y-coordinate of the lowest particle point.
    IMAQ_MT_MAX_FERET_DIAMETER_START_X          = 8,           //X-coordinate of the start of the line segment connecting the two perimeter points that are the furthest apart.
    IMAQ_MT_MAX_FERET_DIAMETER_START_Y          = 9,           //Y-coordinate of the start of the line segment connecting the two perimeter points that are the furthest apart.
    IMAQ_MT_MAX_FERET_DIAMETER_END_X            = 10,          //X-coordinate of the end of the line segment connecting the two perimeter points that are the furthest apart.
    IMAQ_MT_MAX_FERET_DIAMETER_END_Y            = 11,          //Y-coordinate of the end of the line segment connecting the two perimeter points that are the furthest apart.
    IMAQ_MT_MAX_HORIZ_SEGMENT_LENGTH_LEFT       = 12,          //X-coordinate of the leftmost pixel in the longest row of contiguous pixels in the particle.
    IMAQ_MT_MAX_HORIZ_SEGMENT_LENGTH_RIGHT      = 13,          //X-coordinate of the rightmost pixel in the longest row of contiguous pixels in the particle.
    IMAQ_MT_MAX_HORIZ_SEGMENT_LENGTH_ROW        = 14,          //Y-coordinate of all of the pixels in the longest row of contiguous pixels in the particle.
    IMAQ_MT_BOUNDING_RECT_WIDTH                 = 16,          //Distance between the x-coordinate of the leftmost particle point and the x-coordinate of the rightmost particle point.
    IMAQ_MT_BOUNDING_RECT_HEIGHT                = 17,          //Distance between the y-coordinate of highest particle point and the y-coordinate of the lowest particle point.
    IMAQ_MT_BOUNDING_RECT_DIAGONAL              = 18,          //Distance between opposite corners of the bounding rectangle.
    IMAQ_MT_PERIMETER                           = 19,          //Length of the outer boundary of the particle.
    IMAQ_MT_CONVEX_HULL_PERIMETER               = 20,          //Perimeter of the smallest convex polygon containing all points in the particle.
    IMAQ_MT_HOLES_PERIMETER                     = 21,          //Sum of the perimeters of each hole in the particle.
    IMAQ_MT_MAX_FERET_DIAMETER                  = 22,          //Distance between the start and end of the line segment connecting the two perimeter points that are the furthest apart.
    IMAQ_MT_EQUIVALENT_ELLIPSE_MAJOR_AXIS       = 23,          //Length of the major axis of the ellipse with the same perimeter and area as the particle.
    IMAQ_MT_EQUIVALENT_ELLIPSE_MINOR_AXIS       = 24,          //Length of the minor axis of the ellipse with the same perimeter and area as the particle.
    IMAQ_MT_EQUIVALENT_ELLIPSE_MINOR_AXIS_FERET = 25,          //Length of the minor axis of the ellipse with the same area as the particle, and Major Axis equal in length to the Max Feret Diameter.
    IMAQ_MT_EQUIVALENT_RECT_LONG_SIDE           = 26,          //Longest side of the rectangle with the same perimeter and area as the particle.
    IMAQ_MT_EQUIVALENT_RECT_SHORT_SIDE          = 27,          //Shortest side of the rectangle with the same perimeter and area as the particle.
    IMAQ_MT_EQUIVALENT_RECT_DIAGONAL            = 28,          //Distance between opposite corners of the rectangle with the same perimeter and area as the particle.
    IMAQ_MT_EQUIVALENT_RECT_SHORT_SIDE_FERET    = 29,          //Shortest side of the rectangle with the same area as the particle, and longest side equal in length to the Max Feret Diameter.
    IMAQ_MT_AVERAGE_HORIZ_SEGMENT_LENGTH        = 30,          //Average length of a horizontal segment in the particle.
    IMAQ_MT_AVERAGE_VERT_SEGMENT_LENGTH         = 31,          //Average length of a vertical segment in the particle.
    IMAQ_MT_HYDRAULIC_RADIUS                    = 32,          //The particle area divided by the particle perimeter.
    IMAQ_MT_WADDEL_DISK_DIAMETER                = 33,          //Diameter of a disk with the same area as the particle.
    IMAQ_MT_AREA                                = 35,          //Area of the particle.
    IMAQ_MT_HOLES_AREA                          = 36,          //Sum of the areas of each hole in the particle.
    IMAQ_MT_PARTICLE_AND_HOLES_AREA             = 37,          //Area of a particle that completely covers the image.
    IMAQ_MT_CONVEX_HULL_AREA                    = 38,          //Area of the smallest convex polygon containing all points in the particle.
    IMAQ_MT_IMAGE_AREA                          = 39,          //Area of the image.
    IMAQ_MT_NUMBER_OF_HOLES                     = 41,          //Number of holes in the particle.
    IMAQ_MT_NUMBER_OF_HORIZ_SEGMENTS            = 42,          //Number of horizontal segments in the particle.
    IMAQ_MT_NUMBER_OF_VERT_SEGMENTS             = 43,          //Number of vertical segments in the particle.
    IMAQ_MT_ORIENTATION                         = 45,          //The angle of the line that passes through the particle Center of Mass about which the particle has the lowest moment of inertia.
    IMAQ_MT_MAX_FERET_DIAMETER_ORIENTATION      = 46,          //The angle of the line segment connecting the two perimeter points that are the furthest apart.
    IMAQ_MT_AREA_BY_IMAGE_AREA                  = 48,          //Percentage of the particle Area covering the Image Area.
    IMAQ_MT_AREA_BY_PARTICLE_AND_HOLES_AREA     = 49,          //Percentage of the particle Area in relation to its Particle and Holes Area.
    IMAQ_MT_RATIO_OF_EQUIVALENT_ELLIPSE_AXES    = 50,          //Equivalent Ellipse Major Axis divided by Equivalent Ellipse Minor Axis.
    IMAQ_MT_RATIO_OF_EQUIVALENT_RECT_SIDES      = 51,          //Equivalent Rect Long Side divided by Equivalent Rect Short Side.
    IMAQ_MT_ELONGATION_FACTOR                   = 53,          //Max Feret Diameter divided by Equivalent Rect Short Side (Feret).
    IMAQ_MT_COMPACTNESS_FACTOR                  = 54,          //Area divided by the product of Bounding Rect Width and Bounding Rect Height.
    IMAQ_MT_HEYWOOD_CIRCULARITY_FACTOR          = 55,          //Perimeter divided by the circumference of a circle with the same area.
    IMAQ_MT_TYPE_FACTOR                         = 56,          //Factor relating area to moment of inertia.
    IMAQ_MT_SUM_X                               = 58,          //The sum of all x-coordinates in the particle.
    IMAQ_MT_SUM_Y                               = 59,          //The sum of all y-coordinates in the particle.
    IMAQ_MT_SUM_XX                              = 60,          //The sum of all x-coordinates squared in the particle.
    IMAQ_MT_SUM_XY                              = 61,          //The sum of all x-coordinates times y-coordinates in the particle.
    IMAQ_MT_SUM_YY                              = 62,          //The sum of all y-coordinates squared in the particle.
    IMAQ_MT_SUM_XXX                             = 63,          //The sum of all x-coordinates cubed in the particle.
    IMAQ_MT_SUM_XXY                             = 64,          //The sum of all x-coordinates squared times y-coordinates in the particle.
    IMAQ_MT_SUM_XYY                             = 65,          //The sum of all x-coordinates times y-coordinates squared in the particle.
    IMAQ_MT_SUM_YYY                             = 66,          //The sum of all y-coordinates cubed in the particle.
    IMAQ_MT_MOMENT_OF_INERTIA_XX                = 68,          //The moment of inertia in the x-direction twice.
    IMAQ_MT_MOMENT_OF_INERTIA_XY                = 69,          //The moment of inertia in the x and y directions.
    IMAQ_MT_MOMENT_OF_INERTIA_YY                = 70,          //The moment of inertia in the y-direction twice.
    IMAQ_MT_MOMENT_OF_INERTIA_XXX               = 71,          //The moment of inertia in the x-direction three times.
    IMAQ_MT_MOMENT_OF_INERTIA_XXY               = 72,          //The moment of inertia in the x-direction twice and the y-direction once.
    IMAQ_MT_MOMENT_OF_INERTIA_XYY               = 73,          //The moment of inertia in the x-direction once and the y-direction twice.
    IMAQ_MT_MOMENT_OF_INERTIA_YYY               = 74,          //The moment of inertia in the y-direction three times.
    IMAQ_MT_NORM_MOMENT_OF_INERTIA_XX           = 75,          //The normalized moment of inertia in the x-direction twice.
    IMAQ_MT_NORM_MOMENT_OF_INERTIA_XY           = 76,          //The normalized moment of inertia in the x- and y-directions.
    IMAQ_MT_NORM_MOMENT_OF_INERTIA_YY           = 77,          //The normalized moment of inertia in the y-direction twice.
    IMAQ_MT_NORM_MOMENT_OF_INERTIA_XXX          = 78,          //The normalized moment of inertia in the x-direction three times.
    IMAQ_MT_NORM_MOMENT_OF_INERTIA_XXY          = 79,          //The normalized moment of inertia in the x-direction twice and the y-direction once.
    IMAQ_MT_NORM_MOMENT_OF_INERTIA_XYY          = 80,          //The normalized moment of inertia in the x-direction once and the y-direction twice.
    IMAQ_MT_NORM_MOMENT_OF_INERTIA_YYY          = 81,          //The normalized moment of inertia in the y-direction three times.
    IMAQ_MT_HU_MOMENT_1                         = 82,          //The first Hu moment.
    IMAQ_MT_HU_MOMENT_2                         = 83,          //The second Hu moment.
    IMAQ_MT_HU_MOMENT_3                         = 84,          //The third Hu moment.
    IMAQ_MT_HU_MOMENT_4                         = 85,          //The fourth Hu moment.
    IMAQ_MT_HU_MOMENT_5                         = 86,          //The fifth Hu moment.
    IMAQ_MT_HU_MOMENT_6                         = 87,          //The sixth Hu moment.
    IMAQ_MT_HU_MOMENT_7                         = 88,          //The seventh Hu moment.
    IMAQ_MEASUREMENT_TYPE_SIZE_GUARD            = 0xFFFFFFFF   
} MeasurementType;

typedef enum GeometricMatchingMode_enum {
    IMAQ_GEOMETRIC_MATCH_SHIFT_INVARIANT     = 0,           //Searches for occurrences of the pattern in the image, assuming that the pattern is not rotated more than plus or minus 5 degrees.
    IMAQ_GEOMETRIC_MATCH_ROTATION_INVARIANT  = 1,           //Searches for occurrences of the pattern in the image with reduced restriction on the rotation of the pattern.
    IMAQ_GEOMETRIC_MATCH_SCALE_INVARIANT     = 2,           //Searches for occurrences of the pattern in the image with reduced restriction on the size of the pattern.
    IMAQ_GEOMETRIC_MATCH_OCCLUSION_INVARIANT = 4,           //Searches for occurrences of the pattern in the image, allowing for a specified percentage of the pattern to be occluded.
    IMAQ_GEOMETRIC_MATCHING_MODE_SIZE_GUARD  = 0xFFFFFFFF   
} GeometricMatchingMode;

typedef enum ButtonLabel_enum {
    IMAQ_BUTTON_OK               = 0,           //The label "OK".
    IMAQ_BUTTON_SAVE             = 1,           //The label "Save".
    IMAQ_BUTTON_SELECT           = 2,           //The label "Select".
    IMAQ_BUTTON_LOAD             = 3,           //The label "Load".
    IMAQ_BUTTON_LABEL_SIZE_GUARD = 0xFFFFFFFF   
} ButtonLabel;

typedef enum NearestNeighborMethod_enum {
    IMAQ_MINIMUM_MEAN_DISTANCE              = 0,           //The minimum mean distance method.
    IMAQ_K_NEAREST_NEIGHBOR                 = 1,           //The k-nearest neighbor method.
    IMAQ_NEAREST_PROTOTYPE                  = 2,           //The nearest prototype method.
    IMAQ_NEAREST_NEIGHBOR_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} NearestNeighborMethod;

typedef enum QRMirrorMode_enum {
    IMAQ_QR_MIRROR_MODE_AUTO_DETECT = -2,          //The function should determine if the QR code is mirrored.
    IMAQ_QR_MIRROR_MODE_MIRRORED    = 1,           //The function should expect the QR code to appear mirrored.
    IMAQ_QR_MIRROR_MODE_NORMAL      = 0,           //The function should expect the QR code to appear normal.
    IMAQ_QR_MIRROR_MODE_SIZE_GUARD  = 0xFFFFFFFF   
} QRMirrorMode;

typedef enum ColumnProcessingMode_enum {
    IMAQ_AVERAGE_COLUMNS                   = 0,           //Averages the data extracted for edge detection.
    IMAQ_MEDIAN_COLUMNS                    = 1,           //Takes the median of the data extracted for edge detection.
    IMAQ_COLUMN_PROCESSING_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ColumnProcessingMode;

typedef enum FindReferenceDirection_enum {
    IMAQ_LEFT_TO_RIGHT_DIRECT          = 0,           //Searches from the left side of the search area to the right side of the search area for a direct axis.
    IMAQ_LEFT_TO_RIGHT_INDIRECT        = 1,           //Searches from the left side of the search area to the right side of the search area for an indirect axis.
    IMAQ_TOP_TO_BOTTOM_DIRECT          = 2,           //Searches from the top of the search area to the bottom of the search area for a direct axis.
    IMAQ_TOP_TO_BOTTOM_INDIRECT        = 3,           //Searches from the top of the search area to the bottom of the search area for an indirect axis.
    IMAQ_RIGHT_TO_LEFT_DIRECT          = 4,           //Searches from the right side of the search area to the left side of the search area for a direct axis.
    IMAQ_RIGHT_TO_LEFT_INDIRECT        = 5,           //Searches from the right side of the search area to the left side of the search area for an indirect axis.
    IMAQ_BOTTOM_TO_TOP_DIRECT          = 6,           //Searches from the bottom of the search area to the top of the search area for a direct axis.
    IMAQ_BOTTOM_TO_TOP_INDIRECT        = 7,           //Searches from the bottom of the search area to the top of the search area for an indirect axis.
    IMAQ_FIND_COORD_SYS_DIR_SIZE_GUARD = 0xFFFFFFFF   
} FindReferenceDirection;

typedef enum MulticoreOperation_enum {
    IMAQ_GET_CORES                      = 0,           //The number of processor cores NI Vision is currently using.
    IMAQ_SET_CORES                      = 1,           //The number of processor cores for NI Vision to use.
    IMAQ_USE_MAX_AVAILABLE              = 2,           //Use the maximum number of available processor cores.
    IMAQ_MULTICORE_OPERATION_SIZE_GUARD = 0xFFFFFFFF   
} MulticoreOperation;

typedef enum GroupBehavior_enum {
    IMAQ_GROUP_CLEAR               = 0,           //Sets the behavior of the overlay group to clear the current settings when an image is transformed.
    IMAQ_GROUP_KEEP                = 1,           //Sets the behavior of the overlay group to keep the current settings when an image is transformed.
    IMAQ_GROUP_TRANSFORM           = 2,           //Sets the behavior of the overlay group to transform with the image.
    IMAQ_GROUP_BEHAVIOR_SIZE_GUARD = 0xFFFFFFFF   
} GroupBehavior;

typedef enum QRDimensions_enum {
    IMAQ_QR_DIMENSIONS_AUTO_DETECT = 0,           //The function will automatically determine the dimensions of the QR code.
    IMAQ_QR_DIMENSIONS_11x11       = 11,          //Specifies the dimensions of the QR code as 11 x 11.
    IMAQ_QR_DIMENSIONS_13x13       = 13,          //Specifies the dimensions of the QR code as 13 x 13.
    IMAQ_QR_DIMENSIONS_15x15       = 15,          //Specifies the dimensions of the QR code as 15 x 15.
    IMAQ_QR_DIMENSIONS_17x17       = 17,          //Specifies the dimensions of the QR code as 17 x 17.
    IMAQ_QR_DIMENSIONS_21x21       = 21,          //Specifies the dimensions of the QR code as 21 x 21.
    IMAQ_QR_DIMENSIONS_25x25       = 25,          //Specifies the dimensions of the QR code as 25 x 25.
    IMAQ_QR_DIMENSIONS_29x29       = 29,          //Specifies the dimensions of the QR code as 29 x 29.
    IMAQ_QR_DIMENSIONS_33x33       = 33,          //Specifies the dimensions of the QR code as 33 x 33.
    IMAQ_QR_DIMENSIONS_37x37       = 37,          //Specifies the dimensions of the QR code as 37 x 37.
    IMAQ_QR_DIMENSIONS_41x41       = 41,          //Specifies the dimensions of the QR code as 41 x 41.
    IMAQ_QR_DIMENSIONS_45x45       = 45,          //Specifies the dimensions of the QR code as 45 x 45.
    IMAQ_QR_DIMENSIONS_49x49       = 49,          //Specifies the dimensions of the QR code as 49 x 49.
    IMAQ_QR_DIMENSIONS_53x53       = 53,          //Specifies the dimensions of the QR code as 53 x 53.
    IMAQ_QR_DIMENSIONS_57x57       = 57,          //Specifies the dimensions of the QR code as 57 x 57.
    IMAQ_QR_DIMENSIONS_61x61       = 61,          //Specifies the dimensions of the QR code as 61 x 61.
    IMAQ_QR_DIMENSIONS_65x65       = 65,          //Specifies the dimensions of the QR code as 65 x 65.
    IMAQ_QR_DIMENSIONS_69x69       = 69,          //Specifies the dimensions of the QR code as 69 x 69.
    IMAQ_QR_DIMENSIONS_73x73       = 73,          //Specifies the dimensions of the QR code as 73 x 73.
    IMAQ_QR_DIMENSIONS_77x77       = 77,          //Specifies the dimensions of the QR code as 77 x 77.
    IMAQ_QR_DIMENSIONS_81x81       = 81,          //Specifies the dimensions of the QR code as 81 x 81.
    IMAQ_QR_DIMENSIONS_85x85       = 85,          //Specifies the dimensions of the QR code as 85 x 85.
    IMAQ_QR_DIMENSIONS_89x89       = 89,          //Specifies the dimensions of the QR code as 89 x 89.
    IMAQ_QR_DIMENSIONS_93x93       = 93,          //Specifies the dimensions of the QR code as 93 x 93.
    IMAQ_QR_DIMENSIONS_97x97       = 97,          //Specifies the dimensions of the QR code as 97 x 97.
    IMAQ_QR_DIMENSIONS_101x101     = 101,         //Specifies the dimensions of the QR code as 101 x 101.
    IMAQ_QR_DIMENSIONS_105x105     = 105,         //Specifies the dimensions of the QR code as 105 x 105.
    IMAQ_QR_DIMENSIONS_109x109     = 109,         //Specifies the dimensions of the QR code as 109 x 109.
    IMAQ_QR_DIMENSIONS_113x113     = 113,         //Specifies the dimensions of the QR code as 113 x 113.
    IMAQ_QR_DIMENSIONS_117x117     = 117,         //Specifies the dimensions of the QR code as 117 x 117.
    IMAQ_QR_DIMENSIONS_121x121     = 121,         //Specifies the dimensions of the QR code as 121 x 121.
    IMAQ_QR_DIMENSIONS_125x125     = 125,         //Specifies the dimensions of the QR code as 125 x 125.
    IMAQ_QR_DIMENSIONS_129x129     = 129,         //Specifies the dimensions of the QR code as 129 x 129.
    IMAQ_QR_DIMENSIONS_133x133     = 133,         //Specifies the dimensions of the QR code as 133 x 133.
    IMAQ_QR_DIMENSIONS_137x137     = 137,         //Specifies the dimensions of the QR code as 137 x 137.
    IMAQ_QR_DIMENSIONS_141x141     = 141,         //Specifies the dimensions of the QR code as 141 x 141.
    IMAQ_QR_DIMENSIONS_145x145     = 145,         //Specifies the dimensions of the QR code as 145 x 145.
    IMAQ_QR_DIMENSIONS_149x149     = 149,         //Specifies the dimensions of the QR code as 149 x 149.
    IMAQ_QR_DIMENSIONS_153x153     = 153,         //Specifies the dimensions of the QR code as 153 x 153.
    IMAQ_QR_DIMENSIONS_157x157     = 157,         //Specifies the dimensions of the QR code as 157 x 1537.
    IMAQ_QR_DIMENSIONS_161x161     = 161,         //Specifies the dimensions of the QR code as 161 x 161.
    IMAQ_QR_DIMENSIONS_165x165     = 165,         //Specifies the dimensions of the QR code as 165 x 165.
    IMAQ_QR_DIMENSIONS_169x169     = 169,         //Specifies the dimensions of the QR code as 169 x 169.
    IMAQ_QR_DIMENSIONS_173x173     = 173,         //Specifies the dimensions of the QR code as 173 x 173.
    IMAQ_QR_DIMENSIONS_177x177     = 177,         //Specifies the dimensions of the QR code as 177 x 177.
    IMAQ_QR_DIMENSIONS_SIZE_GUARD  = 0xFFFFFFFF   
} QRDimensions;

typedef enum QRCellFilterMode_enum {
    IMAQ_QR_CELL_FILTER_MODE_AUTO_DETECT       = -2,          //The function will try all filter modes and uses the one that decodes the QR code within the fewest iterations and utilizing the least amount of error correction.
    IMAQ_QR_CELL_FILTER_MODE_AVERAGE           = 0,           //The function sets the pixel value for the cell to the average of the sampled pixels.
    IMAQ_QR_CELL_FILTER_MODE_MEDIAN            = 1,           //The function sets the pixel value for the cell to the median of the sampled pixels.
    IMAQ_QR_CELL_FILTER_MODE_CENTRAL_AVERAGE   = 2,           //The function sets the pixel value for the cell to the average of the pixels in the center of the cell sample.
    IMAQ_QR_CELL_FILTER_MODE_HIGH_AVERAGE      = 3,           //The function sets the pixel value for the cell to the average value of the half of the sampled pixels with the highest pixel values.
    IMAQ_QR_CELL_FILTER_MODE_LOW_AVERAGE       = 4,           //The function sets the pixel value for the cell to the average value of the half of the sampled pixels with the lowest pixel values.
    IMAQ_QR_CELL_FILTER_MODE_VERY_HIGH_AVERAGE = 5,           //The function sets the pixel value for the cell to the average value of the ninth of the sampled pixels with the highest pixel values.
    IMAQ_QR_CELL_FILTER_MODE_VERY_LOW_AVERAGE  = 6,           //The function sets the pixel value for the cell to the average value of the ninth of the sampled pixels with the lowest pixel values.
    IMAQ_QR_CELL_FILTER_MODE_ALL               = 8,           //The function tries each filter mode, starting with IMAQ_QR_CELL_FILTER_MODE_AVERAGE and ending with IMAQ_QR_CELL_FILTER_MODE_VERY_LOW_AVERAGE, stopping once a filter mode decodes correctly.
    IMAQ_QR_CELL_FILTER_MODE_SIZE_GUARD        = 0xFFFFFFFF   
} QRCellFilterMode;

typedef enum RoundingMode_enum {
    IMAQ_ROUNDING_MODE_OPTIMIZE   = 0,           //Rounds the result of a division using the best available method.
    IMAQ_ROUNDING_MODE_TRUNCATE   = 1,           //Truncates the result of a division.
    IMAQ_ROUNDING_MODE_SIZE_GUARD = 0xFFFFFFFF   
} RoundingMode;

typedef enum QRDemodulationMode_enum {
    IMAQ_QR_DEMODULATION_MODE_AUTO_DETECT    = -2,          //The function will try each demodulation mode and use the one which decodes the QR code within the fewest iterations and utilizing the least amount of error correction.
    IMAQ_QR_DEMODULATION_MODE_HISTOGRAM      = 0,           //The function uses a histogram of all of the QR cells to calculate a threshold.
    IMAQ_QR_DEMODULATION_MODE_LOCAL_CONTRAST = 1,           //The function examines each of the cell's neighbors to determine if the cell is on or off.
    IMAQ_QR_DEMODULATION_MODE_COMBINED       = 2,           //The function uses the histogram of the QR code to calculate a threshold.
    IMAQ_QR_DEMODULATION_MODE_ALL            = 3,           //The function tries IMAQ_QR_DEMODULATION_MODE_HISTOGRAM, then IMAQ_QR_DEMODULATION_MODE_LOCAL_CONTRAST and then IMAQ_QR_DEMODULATION_MODE_COMBINED, stopping once one mode is successful.
    IMAQ_QR_DEMODULATION_MODE_SIZE_GUARD     = 0xFFFFFFFF   
} QRDemodulationMode;

typedef enum ContrastMode_enum {
    IMAQ_ORIGINAL_CONTRAST = 0,  //Instructs the geometric matching algorithm to find matches with the same contrast as the template.
    IMAQ_REVERSED_CONTRAST = 1,  //Instructs the geometric matching algorithm to find matches with the inverted contrast of the template.
    IMAQ_BOTH_CONTRASTS    = 2,  //Instructs the geometric matching algorithm to find matches with the same and inverted contrast of the template.
} ContrastMode;

typedef enum QRPolarities_enum {
    IMAQ_QR_POLARITY_AUTO_DETECT     = -2,          //The function should determine the polarity of the QR code.
    IMAQ_QR_POLARITY_BLACK_ON_WHITE  = 0,           //The function should search for a QR code with dark data on a bright background.
    IMAQ_QR_POLARITY_WHITE_ON_BLACK  = 1,           //The function should search for a QR code with bright data on a dark background.
    IMAQ_QR_POLARITY_MODE_SIZE_GUARD = 0xFFFFFFFF   
} QRPolarities;

typedef enum QRRotationMode_enum {
    IMAQ_QR_ROTATION_MODE_UNLIMITED   = 0,           //The function allows for unlimited rotation.
    IMAQ_QR_ROTATION_MODE_0_DEGREES   = 1,           //The function allows for ??? 5 degrees of rotation.
    IMAQ_QR_ROTATION_MODE_90_DEGREES  = 2,           //The function allows for between 85 and 95 degrees of rotation.
    IMAQ_QR_ROTATION_MODE_180_DEGREES = 3,           //The function allows for between 175 and 185 degrees of rotation.
    IMAQ_QR_ROTATION_MODE_270_DEGREES = 4,           //The function allows for between 265 and 275 degrees of rotation.
    IMAQ_QR_ROTATION_MODE_SIZE_GUARD  = 0xFFFFFFFF   
} QRRotationMode;

typedef enum QRGradingMode_enum {
    IMAQ_QR_NO_GRADING              = 0,           //The function does not make any preparatory calculations.
    IMAQ_QR_GRADING_MODE_SIZE_GUARD = 0xFFFFFFFF   
} QRGradingMode;

typedef enum StraightEdgeSearchMode_enum {
    IMAQ_USE_FIRST_RAKE_EDGES            = 0,           //Fits a straight edge on the first points detected using a rake.
    IMAQ_USE_BEST_RAKE_EDGES             = 1,           //Fits a straight edge on the best points detected using a rake.
    IMAQ_USE_BEST_HOUGH_LINE             = 2,           //Finds the strongest straight edge using all points detected on a rake.
    IMAQ_USE_FIRST_PROJECTION_EDGE       = 3,           //Uses the location of the first projected edge as the straight edge.
    IMAQ_USE_BEST_PROJECTION_EDGE        = 4,           //Finds the strongest projected edge location to determine the straight edge.
    IMAQ_STRAIGHT_EDGE_SEARCH_SIZE_GUARD = 0xFFFFFFFF   
} StraightEdgeSearchMode;

typedef enum SearchDirection_enum {
    IMAQ_SEARCH_DIRECTION_LEFT_TO_RIGHT = 0,           //Searches from the left side of the search area to the right side of the search area.
    IMAQ_SEARCH_DIRECTION_RIGHT_TO_LEFT = 1,           //Searches from the right side of the search area to the left side of the search area.
    IMAQ_SEARCH_DIRECTION_TOP_TO_BOTTOM = 2,           //Searches from the top side of the search area to the bottom side of the search area.
    IMAQ_SEARCH_DIRECTION_BOTTOM_TO_TOP = 3,           //Searches from the bottom side of the search area to the top side of the search area.
    IMAQ_SEARCH_DIRECTION_SIZE_GUARD    = 0xFFFFFFFF   
} SearchDirection;

typedef enum QRStreamMode_enum {
    IMAQ_QR_MODE_NUMERIC      = 0,           //Specifies that the data was encoded using numeric mode.
    IMAQ_QR_MODE_ALPHANUMERIC = 1,           //Specifies that the data was encoded using alpha-numeric mode.
    IMAQ_QR_MODE_RAW_BYTE     = 2,           //Specifies that the data was not encoded but is only raw binary bytes, or encoded in JIS-8.
    IMAQ_QR_MODE_EAN128_TOKEN = 3,           //Specifies that the data has a special meaning represented by the application ID.
    IMAQ_QR_MODE_EAN128_DATA  = 4,           //Specifies that the data has a special meaning represented by the application ID.
    IMAQ_QR_MODE_ECI          = 5,           //Specifies that the data was meant to be read using the language represented in the language ID.
    IMAQ_QR_MODE_KANJI        = 6,           //Specifies that the data was encoded in Shift-JIS16 Japanese.
    IMAQ_QR_MODE_SIZE_GUARD   = 0xFFFFFFFF   
} QRStreamMode;

typedef enum ParticleClassifierType_enum {
    IMAQ_PARTICLE_LARGEST                    = 0,           //Use only the largest particle in the image.
    IMAQ_PARTICLE_ALL                        = 1,           //Use all particles in the image.
    IMAQ_PARTICLE_CLASSIFIER_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} ParticleClassifierType;

typedef enum QRCellSampleSize_enum {
    IMAQ_QR_CELL_SAMPLE_SIZE_AUTO_DETECT = -2,          //The function will try each sample size and use the one which decodes the QR code within the fewest iterations and utilizing the least amount of error correction.
    IMAQ_QR_CELL_SAMPLE_SIZE1X1          = 1,           //The function will use a 1x1 sized sample from each cell.
    IMAQ_QR_CELL_SAMPLE_SIZE2X2          = 2,           //The function will use a 2x2 sized sample from each cell.
    IMAQ_QR_CELL_SAMPLE_SIZE3X3          = 3,           //The function will use a 3x3 sized sample from each cell.
    IMAQ_QR_CELL_SAMPLE_SIZE4X4          = 4,           //The function will use a 4x4 sized sample from each cell.
    IMAQ_QR_CELL_SAMPLE_SIZE5X5          = 5,           //The function will use a 5x5 sized sample from each cell.
    IMAQ_QR_CELL_SAMPLE_SIZE6X6          = 6,           //The function will use a 6x6 sized sample from each cell.
    IMAQ_QR_CELL_SAMPLE_SIZE7X7          = 7,           //The function will use a 7x7 sized sample from each cell.
    IMAQ_QR_CELL_SAMPLE_TYPE_SIZE_GUARD  = 0xFFFFFFFF   
} QRCellSampleSize;

typedef enum RakeProcessType_enum {
    IMAQ_GET_FIRST_EDGES              = 0,           
    IMAQ_GET_FIRST_AND_LAST_EDGES     = 1,           
    IMAQ_GET_ALL_EDGES                = 2,           
    IMAQ_GET_BEST_EDGES               = 3,           
    IMAQ_RAKE_PROCESS_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} RakeProcessType;

typedef enum GeometricSetupDataItem_enum {
    IMAQ_CURVE_EXTRACTION_MODE             = 0,   //Specifies how the function identifies curves in the image.
    IMAQ_CURVE_EDGE_THRSHOLD               = 1,   //Specifies the minimum contrast an edge pixel must have for it to be considered part of a curve.
    IMAQ_CURVE_EDGE_FILTER                 = 2,   //Specifies the width of the edge filter that the function uses to identify curves in the image.
    IMAQ_MINIMUM_CURVE_LENGTH              = 3,   //Specifies the length, in pixels, of the smallest curve that you want the function to identify.
    IMAQ_CURVE_ROW_SEARCH_STEP_SIZE        = 4,   //Specifies the distance, in the y direction, between the image rows that the algorithm inspects for curve seed points.
    IMAQ_CURVE_COL_SEARCH_STEP_SIZE        = 5,   //Specifies the distance, in the x direction, between the image columns that the algorithm inspects for curve seed points.
    IMAQ_CURVE_MAX_END_POINT_GAP           = 6,   //Specifies the maximum gap, in pixels, between the endpoints of a curve that the function identifies as a closed curve.
    IMAQ_EXTRACT_CLOSED_CURVES             = 7,   //Specifies whether to identify only closed curves in the image.
    IMAQ_ENABLE_SUBPIXEL_CURVE_EXTRACTION  = 8,   //The function ignores this option.
    IMAQ_ENABLE_CORRELATION_SCORE          = 9,   //Specifies that the function should calculate the Correlation Score and return it for each match result.
    IMAQ_ENABLE_SUBPIXEL_ACCURACY          = 10,  //Determines whether to return the match results with subpixel accuracy.
    IMAQ_SUBPIXEL_ITERATIONS               = 11,  //Specifies the maximum number of incremental improvements used to refine matches using subpixel information.
    IMAQ_SUBPIXEL_TOLERANCE                = 12,  //Specifies the maximum amount of change, in pixels, between consecutive incremental improvements in the match position before the function stops refining the match position.
    IMAQ_INITIAL_MATCH_LIST_LENGTH         = 13,  //Specifies the maximum size of the match list.
    IMAQ_ENABLE_TARGET_TEMPLATE_CURVESCORE = 14,  //Specifies whether the function should calculate the match curve to template curve score and return it for each match result.
    IMAQ_MINIMUM_MATCH_SEPARATION_DISTANCE = 15,  //Specifies the minimum separation distance, in pixels, between the origins of two matches that have unique positions.
    IMAQ_MINIMUM_MATCH_SEPARATION_ANGLE    = 16,  //Specifies the minimum angular difference, in degrees, between two matches that have unique angles.
    IMAQ_MINIMUM_MATCH_SEPARATION_SCALE    = 17,  //Specifies the minimum difference in scale, expressed as a percentage, between two matches that have unique scales.
    IMAQ_MAXIMUM_MATCH_OVERLAP             = 18,  //Specifies whether you want the algorithm to spend less time accurately estimating the location of a match.
    IMAQ_ENABLE_COARSE_RESULT              = 19,  //Specifies whether you want the algorithm to spend less time accurately estimating the location of a match.
    IMAQ_ENABLE_CALIBRATION_SUPPORT        = 20,  //Specifies whether or not the algorithm treat the inspection image as a calibrated image.
    IMAQ_ENABLE_CONTRAST_REVERSAL          = 21,  //Specifies the contrast of the matches to search for.
    IMAQ_SEARCH_STRATEGY                   = 22,  //Specifies the aggressiveness of the strategy used to find matches in the image.
    IMAQ_REFINEMENT_MATCH_FACTOR           = 23,  //Specifies the factor applied to the number of matches requested to determine how many matches are refined in the pyramid stage.
    IMAQ_SUBPIXEL_MATCH_FACTOR             = 24,  //Specifies the factor applied to the number for matches requested to determine how many matches are used for the final (subpixel) stage.
    IMAQ_MAX_REFINEMENT_ITERATIONS         = 25,  //Specifies maximum refinement iteration.
} GeometricSetupDataItem;

typedef enum DistortionModel_enum {
    IMAQ_POLYNOMIAL_MODEL    = 0,   //Polynomial model.
    IMAQ_DIVISION_MODEL      = 1,   //Division Model.
    IMAQ_NO_DISTORTION_MODEL = -1,  //Not a distortion model.
} DistortionModel;

typedef enum CalibrationThumbnailType_enum {
    IMAQ_CAMARA_MODEL_TYPE                     = 0,           //Camara model thumbnail type.
    IMAQ_PERSPECTIVE_TYPE                      = 1,           //Perspective thumbnail type.
    IMAQ_MICRO_PLANE_TYPE                      = 2,           //Micro Plane thumbnail type.
    IMAQ_CALIBRATION_THUMBNAIL_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} CalibrationThumbnailType;

typedef enum SettingType_enum {
    IMAQ_ROTATION_ANGLE_RANGE    = 0,           //Set a range for this option to specify the angles at which you expect the Function to find template matches in the inspection image.
    IMAQ_SCALE_RANGE             = 1,           //Set a range for this option to specify the sizes at which you expect the Function to find template matches in the inspection image.
    IMAQ_OCCLUSION_RANGE         = 2,           //Set a range for this option to specify the amount of occlusion you expect for a match in the inspection image.
    IMAQ_SETTING_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} SettingType;

typedef enum SegmentationDistanceLevel_enum {
    IMAQ_SEGMENTATION_LEVEL_CONSERVATIVE = 0,           //Uses extensive criteria to determine the Maximum Distance.
    IMAQ_SEGMENTATION_LEVEL_AGGRESSIVE   = 1,           //Uses few criteria to determine the Maximum Distance.
    IMAQ_SEGMENTATION_LEVEL_SIZE_GUARD   = 0xFFFFFFFF   
} SegmentationDistanceLevel;

typedef enum ExtractContourSelection_enum {
    IMAQ_CLOSEST                              = 0,           //Selects the curve closest to the ROI.
    IMAQ_LONGEST                              = 1,           //Selects the longest curve.
    IMAQ_STRONGEST                            = 2,           //Selects the curve with the highest edge strength averaged from each point on the curve.
    IMAQ_EXTRACT_CONTOUR_SELECTION_SIZE_GUARD = 0xFFFFFFFF   
} ExtractContourSelection;

typedef enum FindTransformMode_enum {
    IMAQ_FIND_REFERENCE                 = 0,           //Update both parts of the coordinate system.
    IMAQ_UPDATE_TRANSFORM               = 1,           //Update only the new reference system.
    IMAQ_FIND_TRANSFORM_MODE_SIZE_GUARD = 0xFFFFFFFF   
} FindTransformMode;

typedef enum ExtractContourDirection_enum {
    IMAQ_RECT_LEFT_RIGHT                      = 0,           //Searches the ROI from left to right.
    IMAQ_RECT_RIGHT_LEFT                      = 1,           //Searches the ROI from right to left.
    IMAQ_RECT_TOP_BOTTOM                      = 2,           //Searches the ROI from top to bottom.
    IMAQ_RECT_BOTTOM_TOP                      = 3,           //Searches the ROI from bottom to top.
    IMAQ_ANNULUS_INNER_OUTER                  = 4,           //Searches the ROI from the inner radius to the outer radius.
    IMAQ_ANNULUS_OUTER_INNER                  = 5,           //Searches the ROI from the outer radius to the inner radius.
    IMAQ_ANNULUS_START_STOP                   = 6,           //Searches the ROI from start angle to end angle.
    IMAQ_ANNULUS_STOP_START                   = 7,           //Searches the ROI from end angle to start angle.
    IMAQ_EXTRACT_CONTOUR_DIRECTION_SIZE_GUARD = 0xFFFFFFFF   
} ExtractContourDirection;

typedef enum EdgePolaritySearchMode_enum {
    IMAQ_SEARCH_FOR_ALL_EDGES          = 0,           //Searches for all edges.
    IMAQ_SEARCH_FOR_RISING_EDGES       = 1,           //Searches for rising edges only.
    IMAQ_SEARCH_FOR_FALLING_EDGES      = 2,           //Searches for falling edges only.
    IMAQ_EDGE_POLARITY_MODE_SIZE_GUARD = 0xFFFFFFFF   
} EdgePolaritySearchMode;

typedef enum Connectivity_enum {
    IMAQ_FOUR_CONNECTED          = 0,           //Morphological reconstruction is performed in connectivity mode 4.
    IMAQ_EIGHT_CONNECTED         = 1,           //Morphological reconstruction is performed in connectivity mode 8.
    IMAQ_CONNECTIVITY_SIZE_GUARD = 0xFFFFFFFF   
} Connectivity;

typedef enum MorphologyReconstructOperation_enum {
    IMAQ_DILATE_RECONSTRUCT                          = 0,           //Performs Reconstruction by dilation.
    IMAQ_ERODE_RECONSTRUCT                           = 1,           //Performs Reconstruction by erosion.
    IMAQ_MORPHOLOGY_RECONSTRUCT_OPERATION_SIZE_GUARD = 0xFFFFFFFF   
} MorphologyReconstructOperation;

typedef enum WaveletType_enum {
    IMAQ_DB02                 = 0,           
    IMAQ_DB03                 = 1,           
    IMAQ_DB04                 = 2,           //Specifies the Wavelet Type as DB02.
    IMAQ_DB05                 = 3,           
    IMAQ_DB06                 = 4,           
    IMAQ_DB07                 = 5,           
    IMAQ_DB08                 = 6,           
    IMAQ_DB09                 = 7,           
    IMAQ_DB10                 = 8,           
    IMAQ_DB11                 = 9,           
    IMAQ_DB12                 = 10,          
    IMAQ_DB13                 = 11,          
    IMAQ_DB14                 = 12,          
    IMAQ_HAAR                 = 13,          
    IMAQ_BIOR1_3              = 14,          
    IMAQ_BIOR1_5              = 15,          
    IMAQ_BIOR2_2              = 16,          
    IMAQ_BIOR2_4              = 17,          
    IMAQ_BIOR2_6              = 18,          
    IMAQ_BIOR2_8              = 19,          
    IMAQ_BIOR3_1              = 20,          
    IMAQ_BIOR3_3              = 21,          
    IMAQ_BIOR3_5              = 22,          
    IMAQ_BIOR3_7              = 23,          
    IMAQ_BIOR3_9              = 24,          
    IMAQ_BIOR4_4              = 25,          
    IMAQ_COIF1                = 26,          
    IMAQ_COIF2                = 27,          
    IMAQ_COIF3                = 28,          
    IMAQ_COIF4                = 29,          
    IMAQ_COIF5                = 30,          
    IMAQ_SYM2                 = 31,          
    IMAQ_SYM3                 = 32,          
    IMAQ_SYM4                 = 33,          
    IMAQ_SYM5                 = 34,          
    IMAQ_SYM6                 = 35,          
    IMAQ_SYM7                 = 36,          
    IMAQ_SYM8                 = 37,          
    IMAQ_BIOR5_5              = 38,          
    IMAQ_BIOR6_8              = 39,          
    IMAQ_WAVE_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} WaveletType;

typedef enum ParticleClassifierThresholdType_enum {
    IMAQ_THRESHOLD_MANUAL = 0,  //The classifier performs a manual threshold on the image during preprocessing.
    IMAQ_THRESHOLD_AUTO   = 1,  //The classifier performs an auto threshold on the image during preprocessing.
    IMAQ_THRESHOLD_LOCAL  = 2,  //The classifier performs a local threshold on the image during preprocessing.
} ParticleClassifierThresholdType;

typedef enum MeasureParticlesCalibrationMode_enum {
    IMAQ_CALIBRATION_MODE_PIXEL                        = 0,           //The function takes only pixel measurements on the particles in the image.
    IMAQ_CALIBRATION_MODE_CALIBRATED                   = 1,           //The function takes only calibrated measurements on the particles in the image.
    IMAQ_CALIBRATION_MODE_BOTH                         = 2,           //The function takes both pixel and calibrated measurements on the particles in the image.
    IMAQ_MEASURE_PARTICLES_CALIBRATION_MODE_SIZE_GUARD = 0xFFFFFFFF   
} MeasureParticlesCalibrationMode;

typedef enum GeometricMatchingSearchStrategy_enum {
    IMAQ_GEOMETRIC_MATCHING_CONSERVATIVE               = 0,           //Instructs the pattern matching algorithm to use the largest possible amount of information from the image at the expense of slowing down the speed of the algorithm.
    IMAQ_GEOMETRIC_MATCHING_BALANCED                   = 1,           //Instructs the pattern matching algorithm to balance the amount of information from the image it uses with the speed of the algorithm.
    IMAQ_GEOMETRIC_MATCHING_AGGRESSIVE                 = 2,           //Instructs the pattern matching algorithm to use a lower amount of information from the image, which allows the algorithm to run quickly but at the expense of accuracy.
    IMAQ_GEOMETRIC_MATCHING_SEARCH_STRATEGY_SIZE_GUARD = 0xFFFFFFFF   
} GeometricMatchingSearchStrategy;

typedef enum ColorClassificationResolution_enum {
    IMAQ_CLASSIFIER_LOW_RESOLUTION        = 0,           //Low resolution version of the color classifier.
    IMAQ_CLASSIFIER_MEDIUM_RESOLUTION     = 1,           //Medium resolution version of the color classifier.
    IMAQ_CLASSIFIER_HIGH_RESOLUTION       = 2,           //High resolution version of the color classifier.
    IMAQ_CLASSIFIER_RESOLUTION_SIZE_GUARD = 0xFFFFFFFF   
} ColorClassificationResolution;

typedef enum ConnectionConstraintType_enum {
    IMAQ_DISTANCE_CONSTRAINT              = 0,           //Specifies the distance, in pixels, within which the end points of two curves must lie in order to be considered part of a contour.
    IMAQ_ANGLE_CONSTRAINT                 = 1,           //Specifies the range, in degrees, within which the difference between the angle of two curves, measured at the end points, must lie in order for the two curves to be considered part of a contour.
    IMAQ_CONNECTIVITY_CONSTRAINT          = 2,           //Specifies the distance, in pixels, within which a line extended from the end point of a curve must pass the end point of another curve in order for the two curves to be considered part of a contour.
    IMAQ_GRADIENT_CONSTRAINT              = 3,           //Specifies the range, in degrees, within which the gradient angles of two curves, measured at the end points, must lie in order for the two curves to be considered part of a contour.
    IMAQ_NUM_CONNECTION_CONSTRAINT_TYPES  = 4,           //.
    IMAQ_CONNECTION_CONSTRAINT_SIZE_GUARD = 0xFFFFFFFF   
} ConnectionConstraintType;

typedef enum Barcode2DContrast_enum {
    IMAQ_ALL_BARCODE_2D_CONTRASTS       = 0,           //The function searches for barcodes of each contrast type.
    IMAQ_BLACK_ON_WHITE_BARCODE_2D      = 1,           //The function searches for 2D barcodes containing black data on a white background.
    IMAQ_WHITE_ON_BLACK_BARCODE_2D      = 2,           //The function searches for 2D barcodes containing white data on a black background.
    IMAQ_BARCODE_2D_CONTRAST_SIZE_GUARD = 0xFFFFFFFF   
} Barcode2DContrast;

typedef enum QRModelType_enum {
    IMAQ_QR_MODELTYPE_AUTO_DETECT = 0,           //Specifies that the function will auto-detect the type of QR code.
    IMAQ_QR_MODELTYPE_MICRO       = 1,           //Specifies the QR code is of a micro type.
    IMAQ_QR_MODELTYPE_MODEL1      = 2,           //Specifies the QR code is of a model1 type.
    IMAQ_QR_MODELTYPE_MODEL2      = 3,           //Specifies the QR code is of a model2 type.
    IMAQ_QR_MODEL_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} QRModelType;

typedef enum WindowBackgroundFillStyle_enum {
    IMAQ_FILL_STYLE_SOLID      = 0,           //Fill the display window with a solid color.
    IMAQ_FILL_STYLE_HATCH      = 2,           //Fill the display window with a pattern defined by WindowBackgroundHatchStyle.
    IMAQ_FILL_STYLE_DEFAULT    = 3,           //Fill the display window with the NI Vision default pattern.
    IMAQ_FILL_STYLE_SIZE_GUARD = 0xFFFFFFFF   
} WindowBackgroundFillStyle;

typedef enum ExtractionMode_enum {
    IMAQ_NORMAL_IMAGE               = 0,           //Specifies that the function makes no assumptions about the uniformity of objects in the image or the image background.
    IMAQ_UNIFORM_REGIONS            = 1,           //Specifies that the function assumes that either the objects in the image or the image background consists of uniform pixel values.
    IMAQ_EXTRACTION_MODE_SIZE_GUARD = 0xFFFFFFFF   
} ExtractionMode;

typedef enum EdgeFilterSize_enum {
    IMAQ_FINE                        = 0,           //Specifies that the function uses a fine (narrow) edge filter.
    IMAQ_NORMAL                      = 1,           //Specifies that the function uses a normal edge filter.
    IMAQ_CONTOUR_TRACING             = 2,           //Sets the Edge Filter Size to contour tracing, which provides the best results for contour extraction but increases the time required to process the image.
    IMAQ_EDGE_FILTER_SIZE_SIZE_GUARD = 0xFFFFFFFF   
} EdgeFilterSize;

typedef enum Barcode2DSearchMode_enum {
    IMAQ_SEARCH_MULTIPLE                   = 0,           //The function searches for multiple 2D barcodes.
    IMAQ_SEARCH_SINGLE_CONSERVATIVE        = 1,           //The function searches for 2D barcodes using the same searching algorithm as IMAQ_SEARCH_MULTIPLE but stops searching after locating one valid barcode.
    IMAQ_SEARCH_SINGLE_AGGRESSIVE          = 2,           //The function searches for a single 2D barcode using a method that assumes the barcode occupies a majority of the search region.
    IMAQ_BARCODE_2D_SEARCH_MODE_SIZE_GUARD = 0xFFFFFFFF   
} Barcode2DSearchMode;

typedef enum DataMatrixSubtype_enum {
    IMAQ_ALL_DATA_MATRIX_SUBTYPES             = 0,           //The function searches for Data Matrix barcodes of all subtypes.
    IMAQ_DATA_MATRIX_SUBTYPES_ECC_000_ECC_140 = 1,           //The function searches for Data Matrix barcodes of subtypes ECC 000, ECC 050, ECC 080, ECC 100 and ECC 140.
    IMAQ_DATA_MATRIX_SUBTYPE_ECC_200          = 2,           //The function searches for Data Matrix ECC 200 barcodes.
    IMAQ_DATA_MATRIX_SUBTYPE_SIZE_GUARD       = 0xFFFFFFFF   
} DataMatrixSubtype;

typedef enum FeatureType_enum {
    IMAQ_NOT_FOUND_FEATURE                   = 0,           //Specifies the feature is not found.
    IMAQ_CIRCLE_FEATURE                      = 1,           //Specifies the feature is a circle.
    IMAQ_ELLIPSE_FEATURE                     = 2,           //Specifies the feature is an ellipse.
    IMAQ_CONST_CURVE_FEATURE                 = 3,           //Specifies the features is a constant curve.
    IMAQ_RECTANGLE_FEATURE                   = 4,           //Specifies the feature is a rectangle.
    IMAQ_LEG_FEATURE                         = 5,           //Specifies the feature is a leg.
    IMAQ_CORNER_FEATURE                      = 6,           //Specifies the feature is a corner.
    IMAQ_PARALLEL_LINE_PAIR_FEATURE          = 7,           //Specifies the feature is a parallel line pair.
    IMAQ_PAIR_OF_PARALLEL_LINE_PAIRS_FEATURE = 8,           //Specifies the feature is a pair of parallel line pairs.
    IMAQ_LINE_FEATURE                        = 9,           //Specifies the feature is a line.
    IMAQ_CLOSED_CURVE_FEATURE                = 10,          //Specifies the feature is a closed curve.
    IMAQ_FEATURE_TYPE_SIZE_GUARD             = 0xFFFFFFFF   
} FeatureType;

typedef enum Barcode2DCellShape_enum {
    IMAQ_SQUARE_CELLS                     = 0,           //The function uses an algorithm for decoding the 2D barcode that works with square data cells.
    IMAQ_ROUND_CELLS                      = 1,           //The function uses an algorithm for decoding the 2D barcode that works with round data cells.
    IMAQ_BARCODE_2D_CELL_SHAPE_SIZE_GUARD = 0xFFFFFFFF   
} Barcode2DCellShape;

typedef enum LocalThresholdMethod_enum {
    IMAQ_NIBLACK                           = 0,           //The function computes thresholds for each pixel based on its local statistics using the Niblack local thresholding algorithm.
    IMAQ_BACKGROUND_CORRECTION             = 1,           //The function performs background correction first to eliminate non-uniform lighting effects, then performs thresholding using the Otsu thresholding algorithm.
    IMAQ_LOCAL_THRESHOLD_METHOD_SIZE_GUARD = 0xFFFFFFFF   
} LocalThresholdMethod;

typedef enum Barcode2DType_enum {
    IMAQ_PDF417                     = 0,           //The 2D barcode is of type PDF417.
    IMAQ_DATA_MATRIX_ECC_000        = 1,           //The 2D barcode is of type Data Matrix ECC 000.
    IMAQ_DATA_MATRIX_ECC_050        = 2,           //The 2D barcode is of type Data Matrix ECC 050.
    IMAQ_DATA_MATRIX_ECC_080        = 3,           //The 2D barcode is of type Data Matrix ECC 080.
    IMAQ_DATA_MATRIX_ECC_100        = 4,           //The 2D barcode is of type Data Matrix ECC 100.
    IMAQ_DATA_MATRIX_ECC_140        = 5,           //The 2D barcode is of type Data Matrix ECC 140.
    IMAQ_DATA_MATRIX_ECC_200        = 6,           //The 2D barcode is of type Data Matrix ECC 200.
    IMAQ_BARCODE_2D_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} Barcode2DType;

typedef enum ClassifierEngineType_enum {
    IMAQ_ENGINE_NONE                       = 0,           //No engine has been set on this classifier session.
    IMAQ_ENGINE_NEAREST_NEIGHBOR           = 1,           //Nearest neighbor engine.
    IMAQ_ENGINE_SUPPORT_VECTOR_MACHINE     = 2,           
    IMAQ_CLASSIFIER_ENGINE_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} ClassifierEngineType;

typedef enum ClassifierType_enum {
    IMAQ_CLASSIFIER_CUSTOM          = 0,           //The classifier session classifies vectors of doubles.
    IMAQ_CLASSIFIER_PARTICLE        = 1,           //The classifier session classifies particles in binary images.
    IMAQ_CLASSIFIER_COLOR           = 2,           //The classifier session classifies an image based on its color.
    IMAQ_CLASSIFIER_TEXTURE         = 3,           //The classifier session classifies an image based on its texture.
    IMAQ_CLASSIFIER_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} ClassifierType;

typedef enum ParticleType_enum {
    IMAQ_PARTICLE_BRIGHT          = 0,           //Bright particles.
    IMAQ_PARTICLE_DARK            = 1,           //Dark particles.
    IMAQ_PARTICLE_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} ParticleType;

typedef enum VisionInfoType2_enum {
    IMAQ_VISIONINFO_CALIBRATION        = 0x01,        //Used to indicate interaction with the Calibration information in an image.
    IMAQ_VISIONINFO_OVERLAY            = 0x02,        //Used to indicate interaction with the Overlay information in an image.
    IMAQ_VISIONINFO_GRAYTEMPLATE       = 0x04,        //Used to indicate interaction with the grayscale template information in an image.
    IMAQ_VISIONINFO_COLORTEMPLATE      = 0x08,        //Used to indicate interaction with the color template information in an image.
    IMAQ_VISIONINFO_GEOMETRICTEMPLATE  = 0x10,        //Used to indicate interaction with the geometric template information in an image.
    IMAQ_VISIONINFO_CUSTOMDATA         = 0x20,        //Used to indicate interaction with the binary or text Custom Data in an image.
    IMAQ_VISIONINFO_GOLDENTEMPLATE     = 0x40,        //Used to indicate interaction with the golden template information in an image.
    IMAQ_VISIONINFO_GEOMETRICTEMPLATE2 = 0x80,        //Used to indicate interaction with the geometric template 2 information in an image.
    IMAQ_VISIONINFO_ALL                = 0xFFFFFFFF,  //Removes, checks for, or indicates the presence of all types of extra information in an image.
} VisionInfoType2;

typedef enum ReadClassifierFileMode_enum {
    IMAQ_CLASSIFIER_READ_ALL                   = 0,           //Read all information from the classifier file.
    IMAQ_CLASSIFIER_READ_SAMPLES               = 1,           //Read only the samples from the classifier file.
    IMAQ_CLASSIFIER_READ_PROPERTIES            = 2,           //Read only the properties from the classifier file.
    IMAQ_READ_CLASSIFIER_FILE_MODES_SIZE_GUARD = 0xFFFFFFFF   
} ReadClassifierFileMode;

typedef enum WriteClassifierFileMode_enum {
    IMAQ_CLASSIFIER_WRITE_ALL                   = 0,           //Writes all information to the classifier file.
    IMAQ_CLASSIFIER_WRITE_CLASSIFY_ONLY         = 1,           //Write only the information needed to classify to the classifier file.
    IMAQ_WRITE_CLASSIFIER_FILE_MODES_SIZE_GUARD = 0xFFFFFFFF   
} WriteClassifierFileMode;

typedef enum Barcode2DShape_enum {
    IMAQ_SQUARE_BARCODE_2D           = 0,           //The function searches for square 2D barcodes.
    IMAQ_RECTANGULAR_BARCODE_2D      = 1,           //The function searches for rectangular 2D barcodes.
    IMAQ_BARCODE_2D_SHAPE_SIZE_GUARD = 0xFFFFFFFF   
} Barcode2DShape;

typedef enum DataMatrixRotationMode_enum {
    IMAQ_UNLIMITED_ROTATION                   = 0,           //The function allows for unlimited rotation.
    IMAQ_0_DEGREES                            = 1,           //The function allows for between -5 and 5 degrees of rotation.
    IMAQ_90_DEGREES                           = 2,           //The function allows for between 85 and 95 degrees of rotation.
    IMAQ_180_DEGREES                          = 3,           //The function allows for between 175 and 185 degrees of rotation.
    IMAQ_270_DEGREES                          = 4,           //The function allows for between 265 and 275 degrees of rotation.
    IMAQ_DATA_MATRIX_ROTATION_MODE_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixRotationMode;

typedef enum AIMGrade_enum {
    IMAQ_AIM_GRADE_F                      = 0,           //The Data Matrix barcode received a grade of F.
    IMAQ_AIM_GRADE_D                      = 1,           //The Data Matrix barcode received a grade of D.
    IMAQ_AIM_GRADE_C                      = 2,           //The Data Matrix barcode received a grade of C.
    IMAQ_AIM_GRADE_B                      = 3,           //The Data Matrix barcode received a grade of B.
    IMAQ_AIM_GRADE_A                      = 4,           //The Data Matrix barcode received a grade of A.
    IMAQ_DATA_MATRIX_AIM_GRADE_SIZE_GUARD = 0xFFFFFFFF   
} AIMGrade;

typedef enum DataMatrixCellFillMode_enum {
    IMAQ_AUTO_DETECT_CELL_FILL_MODE            = -2,          //Sets the function to determine the Data Matrix barcode cell fill percentage automatically.
    IMAQ_LOW_FILL                              = 0,           //Sets the function to read Data Matrix barcodes with a cell fill percentage of less than 30 percent.
    IMAQ_NORMAL_FILL                           = 1,           //Sets the function to read Data Matrix barcodes with a cell fill percentage greater than or equal to 30 percent.
    IMAQ_DATA_MATRIX_CELL_FILL_MODE_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixCellFillMode;

typedef enum DataMatrixDemodulationMode_enum {
    IMAQ_AUTO_DETECT_DEMODULATION_MODE            = -2,          //The function will try each demodulation mode and use the one which decodes the Data Matrix barcode within the fewest iterations and utilizing the least amount of error correction.
    IMAQ_HISTOGRAM                                = 0,           //The function uses a histogram of all of the Data Matrix cells to calculate a threshold.
    IMAQ_LOCAL_CONTRAST                           = 1,           //The function examines each of the cell's neighbors to determine if the cell is on or off.
    IMAQ_COMBINED                                 = 2,           //The function uses the histogram of the Data Matrix barcode to calculate a threshold.
    IMAQ_ALL_DEMODULATION_MODES                   = 3,           //The function tries IMAQ_HISTOGRAM, then IMAQ_LOCAL_CONTRAST and then IMAQ_COMBINATION, stopping once one mode is successful.
    IMAQ_DATA_MATRIX_DEMODULATION_MODE_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixDemodulationMode;

typedef enum DataMatrixECC_enum {
    IMAQ_AUTO_DETECT_ECC            = -2,          //Sets the function to determine the Data Matrix barcode ECC automatically.
    IMAQ_ECC_000                    = 0,           //Sets the function to read Data Matrix barcodes of ECC 000 only.
    IMAQ_ECC_050                    = 50,          //Sets the function to read Data Matrix barcodes of ECC 050 only.
    IMAQ_ECC_080                    = 80,          //Sets the function to read Data Matrix barcodes of ECC 080 only.
    IMAQ_ECC_100                    = 100,         //Sets the function to read Data Matrix barcodes of ECC 100 only.
    IMAQ_ECC_140                    = 140,         //Sets the function to read Data Matrix barcodes of ECC 140 only.
    IMAQ_ECC_000_140                = 190,         //Sets the function to read Data Matrix barcodes of ECC 000, ECC 050, ECC 080, ECC 100, and ECC 140 only.
    IMAQ_ECC_200                    = 200,         //Sets the function to read Data Matrix barcodes of ECC 200 only.
    IMAQ_DATA_MATRIX_ECC_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixECC;

typedef enum DataMatrixPolarity_enum {
    IMAQ_AUTO_DETECT_POLARITY            = -2,          //Sets the function to determine the Data Matrix barcode polarity automatically.
    IMAQ_BLACK_DATA_ON_WHITE_BACKGROUND  = 0,           //Sets the function to read Data Matrix barcodes with dark data on a bright background.
    IMAQ_WHITE_DATA_ON_BLACK_BACKGROUND  = 1,           //Sets the function to read Data Matrix barcodes with bright data on a dark background.
    IMAQ_DATA_MATRIX_POLARITY_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixPolarity;

typedef enum DataMatrixCellFilterMode_enum {
    IMAQ_AUTO_DETECT_CELL_FILTER_MODE            = -2,          //The function will try all filter modes and uses the one that decodes the Data Matrix barcode within the fewest iterations and utilizing the least amount of error correction.
    IMAQ_AVERAGE_FILTER                          = 0,           //The function sets the pixel value for the cell to the average of the sampled pixels.
    IMAQ_MEDIAN_FILTER                           = 1,           //The function sets the pixel value for the cell to the median of the sampled pixels.
    IMAQ_CENTRAL_AVERAGE_FILTER                  = 2,           //The function sets the pixel value for the cell to the average of the pixels in the center of the cell sample.
    IMAQ_HIGH_AVERAGE_FILTER                     = 3,           //The function sets the pixel value for the cell to the average value of the half of the sampled pixels with the highest pixel values.
    IMAQ_LOW_AVERAGE_FILTER                      = 4,           //The function sets the pixel value for the cell to the average value of the half of the sampled pixels with the lowest pixel values.
    IMAQ_VERY_HIGH_AVERAGE_FILTER                = 5,           //The function sets the pixel value for the cell to the average value of the ninth of the sampled pixels with the highest pixel values.
    IMAQ_VERY_LOW_AVERAGE_FILTER                 = 6,           //The function sets the pixel value for the cell to the average value of the ninth of the sampled pixels with the lowest pixel values.
    IMAQ_ALL_CELL_FILTERS                        = 8,           //The function tries each filter mode, starting with IMAQ_AVERAGE_FILTER and ending with IMAQ_VERY_LOW_AVERAGE_FILTER, stopping once a filter mode decodes correctly.
    IMAQ_DATA_MATRIX_CELL_FILTER_MODE_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixCellFilterMode;

typedef enum WindowBackgroundHatchStyle_enum {
    IMAQ_HATCH_STYLE_HORIZONTAL        = 0,           //The background of the display window will be horizontal bars.
    IMAQ_HATCH_STYLE_VERTICAL          = 1,           //The background of the display window will be vertical bars.
    IMAQ_HATCH_STYLE_FORWARD_DIAGONAL  = 2,           //The background of the display window will be diagonal bars.
    IMAQ_HATCH_STYLE_BACKWARD_DIAGONAL = 3,           //The background of the display window will be diagonal bars.
    IMAQ_HATCH_STYLE_CROSS             = 4,           //The background of the display window will be intersecting horizontal and vertical bars.
    IMAQ_HATCH_STYLE_CROSS_HATCH       = 5,           //The background of the display window will be intersecting forward and backward diagonal bars.
    IMAQ_HATCH_STYLE_SIZE_GUARD        = 0xFFFFFFFF   
} WindowBackgroundHatchStyle;

typedef enum DataMatrixMirrorMode_enum {
    IMAQ_AUTO_DETECT_MIRROR                 = -2,          //Specifies that the function should determine if the Data Matrix barcode is mirrored.
    IMAQ_APPEARS_NORMAL                     = 0,           //Specifies that the function should expect the Data Matrix barcode to appear normal.
    IMAQ_APPEARS_MIRRORED                   = 1,           //Specifies that the function should expect the Data Matrix barcode to appear mirrored.
    IMAQ_DATA_MATRIX_MIRROR_MODE_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixMirrorMode;

typedef enum CalibrationMode2_enum {
    IMAQ_PERSPECTIVE_MODE             = 0,           //Functions correct for distortion caused by the camera's perspective.
    IMAQ_MICROPLANE_MODE              = 1,           //Functions correct for distortion caused by the camera's lens.
    IMAQ_SIMPLE_CALIBRATION_MODE      = 2,           //Functions do not correct for distortion.
    IMAQ_CORRECTED_IMAGE_MODE         = 3,           //The image is already corrected.
    IMAQ_NO_CALIBRATION_MODE          = 4,           //Image with No calibration.
    IMAQ_CALIBRATION_MODE2_SIZE_GUARD = 0xFFFFFFFF   
} CalibrationMode2;

typedef enum DataMatrixGradingMode_enum {
    IMAQ_NO_GRADING                          = 0,           //The function does not make any preparatory calculations.
    IMAQ_PREPARE_FOR_AIM                     = 1,           //The function prepares the image for grading using the AIM Print Quality metrics.
    IMAQ_DATA_MATRIX_GRADING_MODE_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixGradingMode;

typedef enum WaveletTransformMode_enum {
    IMAQ_WAVELET_TRANSFORM_INTEGER         = 0,           //Uses a 5-3 reversible integer transform.
    IMAQ_WAVELET_TRANSFORM_FLOATING_POINT  = 1,           //Performs a 9-7 irreversible floating-point transform.
    IMAQ_WAVELET_TRANSFORM_MODE_SIZE_GUARD = 0xFFFFFFFF   
} WaveletTransformMode;

typedef enum NormalizationMethod_enum {
    IMAQ_NORMALIZATION_NONE               = 0,           //No normalization.
    IMAQ_NORMALIZATION_HISTOGRAM_MATCHING = 1,           //Adjust image so its histogram is similar to the golden template's histogram.
    IMAQ_NORMALIZATION_AVERAGE_MATCHING   = 2,           //Adjust image so its mean pixel value equals the golden template's mean pixel value.
    IMAQ_NORMALIZATION_SIZE_GUARD         = 0xFFFFFFFF   
} NormalizationMethod;

typedef enum RegistrationMethod_enum {
    IMAQ_REGISTRATION_NONE        = 0,           //No registration.
    IMAQ_REGISTRATION_PERSPECTIVE = 1,           //Adjust image to correct for minor variations in alignment or perspective.
    IMAQ_REGISTRATION_SIZE_GUARD  = 0xFFFFFFFF   
} RegistrationMethod;

typedef enum LinearAveragesMode_enum {
    IMAQ_COLUMN_AVERAGES                 = 1,           //Specifies that the function calculates the mean pixel value of each column.
    IMAQ_ROW_AVERAGES                    = 2,           //Specifies that the function calculates the mean pixel value of each row.
    IMAQ_RISING_DIAGONAL_AVERAGES        = 4,           //Specifies that the function calculates the mean pixel value of each diagonal running from the lower left to the upper right of the inspected area of the image.
    IMAQ_FALLING_DIAGONAL_AVERAGES       = 8,           //Specifies that the function calculates the mean pixel value of each diagonal running from the upper left to the lower right of the inspected area of the image.
    IMAQ_ALL_LINEAR_AVERAGES             = 15,          //Specifies that the function calculates all four linear mean pixel values.
    IMAQ_LINEAR_AVERAGES_MODE_SIZE_GUARD = 0xFFFFFFFF   
} LinearAveragesMode;

typedef enum CompressionType_enum {
    IMAQ_COMPRESSION_NONE            = 0,           //Specifies that the function should not compress the image.
    IMAQ_COMPRESSION_JPEG            = 1,           //Specifies that the function should use lossy JPEG compression on the image.
    IMAQ_COMPRESSION_PACKED_BINARY   = 2,           //Specifies that the function should use lossless binary packing on the image.
    IMAQ_COMPRESSION_TYPE_SIZE_GUARD = 0xFFFFFFFF   
} CompressionType;

typedef enum FlattenType_enum {
    IMAQ_FLATTEN_IMAGE                 = 0,           //Flattens just the image data.
    IMAQ_FLATTEN_IMAGE_AND_VISION_INFO = 1,           //Flattens the image data and any Vision information associated with the image.
    IMAQ_FLATTEN_TYPE_SIZE_GUARD       = 0xFFFFFFFF   
} FlattenType;

typedef enum DataMatrixCellSampleSize_enum {
    IMAQ_AUTO_DETECT_CELL_SAMPLE_SIZE            = -2,          //The function will try each sample size and use the one which decodes the Data Matrix barcode within the fewest iterations and utilizing the least amount of error correction.
    IMAQ_1x1                                     = 1,           //The function will use a 1x1 sized sample from each cell.
    IMAQ_2x2                                     = 2,           //The function will use a 2x2 sized sample from each cell.
    IMAQ_3x3                                     = 3,           //The function will use a 3x3 sized sample from each cell.
    IMAQ_4x4                                     = 4,           //The function will use a 4x4 sized sample from each cell.
    IMAQ_5x5                                     = 5,           //The function will use a 5x5 sized sample from each cell.
    IMAQ_6x6                                     = 6,           //The function will use a 6x6 sized sample from each cell.
    IMAQ_7x7                                     = 7,           //The function will use a 7x7 sized sample from each cell.
    IMAQ_DATA_MATRIX_CELL_SAMPLE_SIZE_SIZE_GUARD = 0xFFFFFFFF   
} DataMatrixCellSampleSize;


//============================================================================
//  Forward Declare Data Structures
//============================================================================
typedef struct Image_struct Image;
typedef struct ROI_struct ROI;
typedef struct Overlay_struct Overlay;
typedef struct ClassifierSession_struct ClassifierSession;
typedef struct MultipleGeometricPattern_struct MultipleGeometricPattern;
typedef int ContourID;
typedef unsigned long SESSION_ID;
typedef int	AVISession;
typedef char* FilterName;
typedef char String255[256];
typedef struct CharSet_struct CharSet;
typedef struct OCRSpacingOptions_struct OCRSpacingOptions;
typedef struct OCRProcessingOptions_struct OCRProcessingOptions;
typedef struct ReadTextOptions_struct ReadTextOptions;
typedef struct CharInfo_struct CharInfo;
typedef struct CharReport_struct CharReport;
typedef struct ReadTextReport_struct ReadTextReport;
typedef struct DivisionModel_struct DivisionModel;
typedef struct FocalLength_struct FocalLength;
typedef struct PolyModel_struct PolyModel;
typedef struct DistortionModelParams_struct DistortionModelParams;
typedef struct PointFloat_struct PointFloat;
typedef struct InternalParameters_struct InternalParameters;
typedef struct MaxGridSize_struct MaxGridSize;
typedef struct ImageSize_struct ImageSize;
typedef struct CalibrationReferencePoints_struct CalibrationReferencePoints;
typedef struct GetCameraParametersReport_struct GetCameraParametersReport;
typedef struct CalibrationAxisInfo_struct CalibrationAxisInfo;
typedef struct CalibrationLearnSetupInfo_struct CalibrationLearnSetupInfo;
typedef struct GridDescriptor_struct GridDescriptor;
typedef struct ErrorStatistics_struct ErrorStatistics;
typedef struct GetCalibrationInfoReport_struct GetCalibrationInfoReport;
typedef struct EdgePolarity_struct EdgePolarity;
typedef struct ClampSettings_struct ClampSettings;
typedef struct PointDouble_struct PointDouble;
typedef struct PointDoublePair_struct PointDoublePair;
typedef struct ClampResults_struct ClampResults;
typedef struct ClampPoints_struct ClampPoints;
typedef struct RGBValue_struct RGBValue;
typedef struct ClampOverlaySettings_struct ClampOverlaySettings;
typedef struct ClampMax2Report_struct ClampMax2Report;
typedef struct ContourFitSplineReport_struct ContourFitSplineReport;
typedef struct LineFloat_struct LineFloat;
typedef struct LineEquation_struct LineEquation;
typedef struct ContourFitLineReport_struct ContourFitLineReport;
typedef struct ContourFitPolynomialReport_struct ContourFitPolynomialReport;
typedef struct PartialCircle_struct PartialCircle;
typedef struct PartialEllipse_struct PartialEllipse;
typedef struct SetupMatchPatternData_struct SetupMatchPatternData;
typedef struct RangeSettingDouble_struct RangeSettingDouble;
typedef struct GeometricAdvancedSetupDataOption_struct GeometricAdvancedSetupDataOption;
typedef struct ContourInfoReport_struct ContourInfoReport;
typedef struct ROILabel_struct ROILabel;
typedef struct SupervisedColorSegmentationReport_struct SupervisedColorSegmentationReport;
typedef struct LabelToROIReport_struct LabelToROIReport;
typedef struct ColorSegmenationOptions_struct ColorSegmenationOptions;
typedef struct ClassifiedCurve_struct ClassifiedCurve;
typedef struct RangeDouble_struct RangeDouble;
typedef struct RangeLabel_struct RangeLabel;
typedef struct CurvatureAnalysisReport_struct CurvatureAnalysisReport;
typedef struct Disparity_struct Disparity;
typedef struct ComputeDistancesReport_struct ComputeDistancesReport;
typedef struct MatchMode_struct MatchMode;
typedef struct ClassifiedDisparity_struct ClassifiedDisparity;
typedef struct ClassifyDistancesReport_struct ClassifyDistancesReport;
typedef struct ContourComputeCurvatureReport_struct ContourComputeCurvatureReport;
typedef struct ContourOverlaySettings_struct ContourOverlaySettings;
typedef struct CurveParameters_struct CurveParameters;
typedef struct ExtractContourReport_struct ExtractContourReport;
typedef struct ConnectionConstraint_struct ConnectionConstraint;
typedef struct ExtractTextureFeaturesReport_struct ExtractTextureFeaturesReport;
typedef struct WaveletBandsReport_struct WaveletBandsReport;
typedef struct CircleFitOptions_struct CircleFitOptions;
typedef struct EdgeOptions2_struct EdgeOptions2;
typedef struct FindCircularEdgeOptions_struct FindCircularEdgeOptions;
typedef struct FindConcentricEdgeOptions_struct FindConcentricEdgeOptions;
typedef struct ConcentricEdgeFitOptions_struct ConcentricEdgeFitOptions;
typedef struct FindConcentricEdgeReport_struct FindConcentricEdgeReport;
typedef struct FindCircularEdgeReport_struct FindCircularEdgeReport;
typedef struct WindowSize_struct WindowSize;
typedef struct DisplacementVector_struct DisplacementVector;
typedef struct WaveletOptions_struct WaveletOptions;
typedef struct CooccurrenceOptions_struct CooccurrenceOptions;
typedef struct ParticleClassifierLocalThresholdOptions_struct ParticleClassifierLocalThresholdOptions;
typedef struct RangeFloat_struct RangeFloat;
typedef struct ParticleClassifierAutoThresholdOptions_struct ParticleClassifierAutoThresholdOptions;
typedef struct ParticleClassifierPreprocessingOptions2_struct ParticleClassifierPreprocessingOptions2;
typedef struct MeasureParticlesReport_struct MeasureParticlesReport;
typedef struct GeometricPatternMatch3_struct GeometricPatternMatch3;
typedef struct MatchGeometricPatternAdvancedOptions3_struct MatchGeometricPatternAdvancedOptions3;
typedef struct ColorOptions_struct ColorOptions;
typedef struct SampleScore_struct SampleScore;
typedef struct ClassifierReportAdvanced_struct ClassifierReportAdvanced;
typedef struct LearnGeometricPatternAdvancedOptions2_struct LearnGeometricPatternAdvancedOptions2;
typedef struct ParticleFilterOptions2_struct ParticleFilterOptions2;
typedef struct FindEdgeOptions2_struct FindEdgeOptions2;
typedef struct FindEdgeReport_struct FindEdgeReport;
typedef struct FindTransformRectOptions2_struct FindTransformRectOptions2;
typedef struct FindTransformRectsOptions2_struct FindTransformRectsOptions2;
typedef struct ReadTextReport3_struct ReadTextReport3;
typedef struct CharacterStatistics_struct CharacterStatistics;
typedef struct CharReport3_struct CharReport3;
typedef struct ArcInfo2_struct ArcInfo2;
typedef struct EdgeReport2_struct EdgeReport2;
typedef struct SearchArcInfo_struct SearchArcInfo;
typedef struct ConcentricRakeReport2_struct ConcentricRakeReport2;
typedef struct SpokeReport2_struct SpokeReport2;
typedef struct EdgeInfo_struct EdgeInfo;
typedef struct SearchLineInfo_struct SearchLineInfo;
typedef struct RakeReport2_struct RakeReport2;
typedef struct TransformBehaviors_struct TransformBehaviors;
typedef struct QRCodeDataToken_struct QRCodeDataToken;
typedef struct ParticleFilterOptions_struct ParticleFilterOptions;
typedef struct StraightEdgeReport2_struct StraightEdgeReport2;
typedef struct StraightEdgeOptions_struct StraightEdgeOptions;
typedef struct StraightEdge_struct StraightEdge;
typedef struct QRCodeSearchOptions_struct QRCodeSearchOptions;
typedef struct QRCodeSizeOptions_struct QRCodeSizeOptions;
typedef struct QRCodeDescriptionOptions_struct QRCodeDescriptionOptions;
typedef struct QRCodeReport_struct QRCodeReport;
typedef struct AIMGradeReport_struct AIMGradeReport;
typedef struct DataMatrixSizeOptions_struct DataMatrixSizeOptions;
typedef struct DataMatrixDescriptionOptions_struct DataMatrixDescriptionOptions;
typedef struct DataMatrixSearchOptions_struct DataMatrixSearchOptions;
typedef struct DataMatrixReport_struct DataMatrixReport;
typedef struct JPEG2000FileAdvancedOptions_struct JPEG2000FileAdvancedOptions;
typedef struct MatchGeometricPatternAdvancedOptions2_struct MatchGeometricPatternAdvancedOptions2;
typedef struct InspectionAlignment_struct InspectionAlignment;
typedef struct InspectionOptions_struct InspectionOptions;
typedef struct CharReport2_struct CharReport2;
typedef struct CharInfo2_struct CharInfo2;
typedef struct ReadTextReport2_struct ReadTextReport2;
typedef struct EllipseFeature_struct EllipseFeature;
typedef struct CircleFeature_struct CircleFeature;
typedef struct ConstCurveFeature_struct ConstCurveFeature;
typedef struct RectangleFeature_struct RectangleFeature;
typedef struct LegFeature_struct LegFeature;
typedef struct CornerFeature_struct CornerFeature;
typedef struct LineFeature_struct LineFeature;
typedef struct ParallelLinePairFeature_struct ParallelLinePairFeature;
typedef struct PairOfParallelLinePairsFeature_struct PairOfParallelLinePairsFeature;
typedef union GeometricFeature_union GeometricFeature;
typedef struct FeatureData_struct FeatureData;
typedef struct GeometricPatternMatch2_struct GeometricPatternMatch2;
typedef struct ClosedCurveFeature_struct ClosedCurveFeature;
typedef struct LineMatch_struct LineMatch;
typedef struct LineDescriptor_struct LineDescriptor;
typedef struct RectangleDescriptor_struct RectangleDescriptor;
typedef struct RectangleMatch_struct RectangleMatch;
typedef struct EllipseDescriptor_struct EllipseDescriptor;
typedef struct EllipseMatch_struct EllipseMatch;
typedef struct CircleMatch_struct CircleMatch;
typedef struct CircleDescriptor_struct CircleDescriptor;
typedef struct ShapeDetectionOptions_struct ShapeDetectionOptions;
typedef struct Curve_struct Curve;
typedef struct CurveOptions_struct CurveOptions;
typedef struct Barcode2DInfo_struct Barcode2DInfo;
typedef struct DataMatrixOptions_struct DataMatrixOptions;
typedef struct ClassifierAccuracyReport_struct ClassifierAccuracyReport;
typedef struct NearestNeighborClassResult_struct NearestNeighborClassResult;
typedef struct NearestNeighborTrainingReport_struct NearestNeighborTrainingReport;
typedef struct ParticleClassifierPreprocessingOptions_struct ParticleClassifierPreprocessingOptions;
typedef struct ClassifierSampleInfo_struct ClassifierSampleInfo;
typedef struct ClassScore_struct ClassScore;
typedef struct ClassifierReport_struct ClassifierReport;
typedef struct NearestNeighborOptions_struct NearestNeighborOptions;
typedef struct ParticleClassifierOptions_struct ParticleClassifierOptions;
typedef struct RGBU64Value_struct RGBU64Value;
typedef struct GeometricPatternMatch_struct GeometricPatternMatch;
typedef struct MatchGeometricPatternAdvancedOptions_struct MatchGeometricPatternAdvancedOptions;
typedef struct MatchGeometricPatternOptions_struct MatchGeometricPatternOptions;
typedef struct LearnGeometricPatternAdvancedOptions_struct LearnGeometricPatternAdvancedOptions;
typedef struct FitEllipseOptions_struct FitEllipseOptions;
typedef struct FitCircleOptions_struct FitCircleOptions;
typedef struct ConstructROIOptions2_struct ConstructROIOptions2;
typedef struct HSLValue_struct HSLValue;
typedef struct HSVValue_struct HSVValue;
typedef struct HSIValue_struct HSIValue;
typedef struct CIELabValue_struct CIELabValue;
typedef struct CIEXYZValue_struct CIEXYZValue;
typedef union Color2_union Color2;
typedef struct BestEllipse2_struct BestEllipse2;
typedef struct LearnPatternAdvancedOptions_struct LearnPatternAdvancedOptions;
typedef struct AVIInfo_struct AVIInfo;
typedef struct LearnPatternAdvancedShiftOptions_struct LearnPatternAdvancedShiftOptions;
typedef struct LearnPatternAdvancedRotationOptions_struct LearnPatternAdvancedRotationOptions;
typedef struct MatchPatternAdvancedOptions_struct MatchPatternAdvancedOptions;
typedef struct ParticleFilterCriteria2_struct ParticleFilterCriteria2;
typedef struct BestCircle2_struct BestCircle2;
typedef struct OCRSpacingOptions_struct OCRSpacingOptions;
typedef struct OCRProcessingOptions_struct OCRProcessingOptions;
typedef struct ReadTextOptions_struct ReadTextOptions;
typedef struct CharInfo_struct CharInfo;
#if !defined(USERINT_HEADER) && !defined(_CVI_RECT_DEFINED)
typedef struct Rect_struct Rect;
#endif
typedef struct CharReport_struct CharReport;
typedef struct ReadTextReport_struct ReadTextReport;
#if !defined(USERINT_HEADER) && !defined(_CVI_POINT_DEFINED)
typedef struct Point_struct Point;
#endif
typedef struct Annulus_struct Annulus;
typedef struct EdgeLocationReport_struct EdgeLocationReport;
typedef struct EdgeOptions_struct EdgeOptions;
typedef struct EdgeReport_struct EdgeReport;
typedef struct ExtremeReport_struct ExtremeReport;
typedef struct FitLineOptions_struct FitLineOptions;
typedef struct DisplayMapping_struct DisplayMapping;
typedef struct DetectExtremesOptions_struct DetectExtremesOptions;
typedef struct ImageInfo_struct ImageInfo;
typedef struct LCDOptions_struct LCDOptions;
typedef struct LCDReport_struct LCDReport;
typedef struct LCDSegments_struct LCDSegments;
typedef struct LearnCalibrationOptions_struct LearnCalibrationOptions;
typedef struct LearnColorPatternOptions_struct LearnColorPatternOptions;
typedef struct Line_struct Line;
typedef struct LinearAverages_struct LinearAverages;
typedef struct LineProfile_struct LineProfile;
typedef struct MatchColorPatternOptions_struct MatchColorPatternOptions;
typedef struct HistogramReport_struct HistogramReport;
typedef struct ArcInfo_struct ArcInfo;
typedef struct AxisReport_struct AxisReport;
typedef struct BarcodeInfo_struct BarcodeInfo;
typedef struct BCGOptions_struct BCGOptions;
typedef struct BestCircle_struct BestCircle;
typedef struct BestEllipse_struct BestEllipse;
typedef struct BestLine_struct BestLine;
typedef struct BrowserOptions_struct BrowserOptions;
typedef struct CoordinateSystem_struct CoordinateSystem;
typedef struct CalibrationInfo_struct CalibrationInfo;
typedef struct CalibrationPoints_struct CalibrationPoints;
typedef struct CaliperOptions_struct CaliperOptions;
typedef struct CaliperReport_struct CaliperReport;
typedef struct DrawTextOptions_struct DrawTextOptions;
typedef struct CircleReport_struct CircleReport;
typedef struct ClosedContour_struct ClosedContour;
typedef struct ColorHistogramReport_struct ColorHistogramReport;
typedef struct ColorInformation_struct ColorInformation;
typedef struct Complex_struct Complex;
typedef struct ConcentricRakeReport_struct ConcentricRakeReport;
typedef struct ConstructROIOptions_struct ConstructROIOptions;
typedef struct ContourInfo_struct ContourInfo;
typedef union ContourUnion_union ContourUnion;
typedef struct ContourInfo2_struct ContourInfo2;
typedef struct ContourPoint_struct ContourPoint;
typedef struct CoordinateTransform_struct CoordinateTransform;
typedef struct CoordinateTransform2_struct CoordinateTransform2;
typedef struct CannyOptions_struct CannyOptions;
typedef struct Range_struct Range;
typedef struct UserPointSymbol_struct UserPointSymbol;
typedef struct View3DOptions_struct View3DOptions;
typedef struct MatchPatternOptions_struct MatchPatternOptions;
typedef struct TIFFFileOptions_struct TIFFFileOptions;
typedef union Color_union Color;
typedef union PixelValue_union PixelValue;
typedef struct OpenContour_struct OpenContour;
typedef struct OverlayTextOptions_struct OverlayTextOptions;
typedef struct ParticleFilterCriteria_struct ParticleFilterCriteria;
typedef struct ParticleReport_struct ParticleReport;
typedef struct PatternMatch_struct PatternMatch;
typedef struct QuantifyData_struct QuantifyData;
typedef struct QuantifyReport_struct QuantifyReport;
typedef struct RakeOptions_struct RakeOptions;
typedef struct RakeReport_struct RakeReport;
typedef struct TransformReport_struct TransformReport;
typedef struct ShapeReport_struct ShapeReport;
typedef struct MeterArc_struct MeterArc;
typedef struct ThresholdData_struct ThresholdData;
typedef struct StructuringElement_struct StructuringElement;
typedef struct SpokeReport_struct SpokeReport;
typedef struct SimpleEdgeOptions_struct SimpleEdgeOptions;
typedef struct SelectParticleCriteria_struct SelectParticleCriteria;
typedef struct SegmentInfo_struct SegmentInfo;
typedef struct RotationAngleRange_struct RotationAngleRange;
typedef struct RotatedRect_struct RotatedRect;
typedef struct ROIProfile_struct ROIProfile;
typedef struct ToolWindowOptions_struct ToolWindowOptions;
typedef struct SpokeOptions_struct SpokeOptions;

//============================================================================
// Data Structures
//============================================================================
#if !defined __GNUC__ && !defined _M_X64
#pragma pack(push,1)
#endif
typedef struct DivisionModel_struct {
    float kappa; //The learned kappa coefficient of division model.
} DivisionModel;

typedef struct FocalLength_struct {
    float fx; //Focal length in X direction.
    float fy; //Focal length in Y direction.
} FocalLength;

typedef struct PolyModel_struct {
    float*       kCoeffs;    //The learned radial coefficients of polynomial model.
    unsigned int numKCoeffs; //Number of K coefficients.
    float        p1;         //The P1(learned tangential coefficients of polynomial model).
    float        p2;         //The P2(learned tangential coefficients of polynomial model).
} PolyModel;

typedef struct DistortionModelParams_struct {
    DistortionModel distortionModel; //Type of learned distortion model.
    PolyModel       polyModel;       //The learned coefficients of polynomial model.
    DivisionModel   divisionModel;   //The learned coefficient of division model.
} DistortionModelParams;

typedef struct PointFloat_struct {
    float x; //The x-coordinate of the point.
    float y; //The y-coordinate of the point.
} PointFloat;

typedef struct InternalParameters_struct {
    char        isInsufficientData; 
    FocalLength focalLength;        
    PointFloat  opticalCenter;      
} InternalParameters;

typedef struct MaxGridSize_struct {
    unsigned int xMax; //Maximum x limit for the grid size.
    unsigned int yMax; //Maximum y limit for the grid size.
} MaxGridSize;

typedef struct ImageSize_struct {
    unsigned int xRes; //X resolution of the image.
    unsigned int yRes; //Y resolution of the image.
} ImageSize;

typedef struct CalibrationReferencePoints_struct {
    PointDouble*    pixelCoords;    //Specifies the coordinates of the pixel reference points.
    unsigned int    numPixelCoords; //Number of pixel coordinates.
    PointDouble*    realCoords;     //Specifies the measuring unit associated with the image.
    unsigned int    numRealCoords;  //Number of real coordinates.
    CalibrationUnit units;          //Specifies the units of X Step and Y Step.
    ImageSize       imageSize;      //Specifies the size of calibration template image.
} CalibrationReferencePoints;

typedef struct GetCameraParametersReport_struct {
    double*               projectionMatrix;     //The projection(homography) matrix of working plane.
    unsigned int          projectionMatrixRows; //Number of rows in projection matrix.
    unsigned int          projectionMatrixCols; //Number of columns in projection matrix.
    DistortionModelParams distortion;           //Distortion model Coefficients.
    InternalParameters    internalParams;       //The learned internal paramters of camera model such as focal length and optical center.
} GetCameraParametersReport;

typedef struct CalibrationAxisInfo_struct {
    PointFloat      center;        //The origin of the reference coordinate system, expressed in pixel units.
    float           rotationAngle; //The angle of the x-axis of the real-world coordinate system, in relation to the horizontal.
    AxisOrientation axisDirection; //Specifies the direction of the calibraiton axis which is either Direct or Indirect.
} CalibrationAxisInfo;

typedef struct CalibrationLearnSetupInfo_struct {
    CalibrationMode2 calibrationMethod;    //Type of calibration method used.
    DistortionModel  distortionModel;      //Type of learned distortion model.
    ScalingMethod    scaleMode;            //The aspect scaling to use when correcting an image.
    CalibrationROI   roiMode;              //The ROI to use when correcting an image.
    char             learnCorrectionTable; //Set this input to true value if you want the correction table to be determined and stored.
} CalibrationLearnSetupInfo;

typedef struct GridDescriptor_struct {
    float           xStep; //The distance in the x direction between two adjacent pixels in units specified by unit.
    float           yStep; //The distance in the y direction between two adjacent pixels in units specified by unit.
    CalibrationUnit unit;  //The unit of measure for the image.
} GridDescriptor;

typedef struct ErrorStatistics_struct {
    double mean;              //Mean error statistics value.
    double maximum;           //Maximum value of error.
    double standardDeviation; //The standard deviation error statistiscs value.
    double distortion;        //The distortion error statistics value.
} ErrorStatistics;

typedef struct GetCalibrationInfoReport_struct {
    ROI*                      userRoi;         //Specifies the ROI the user provided when learning the calibration.
    ROI*                      calibrationRoi;  //Specifies the ROI that corresponds to the region of the image where the calibration information is accurate.
    CalibrationAxisInfo       axisInfo;        //Reference Coordinate System for the real-world coordinates.
    CalibrationLearnSetupInfo learnSetupInfo;  //Calibration learn setup information.
    GridDescriptor            gridDescriptor;  //Specifies scaling constants used to calibrate the image.
    float*                    errorMap;        //The the error map of calibration template image.
    unsigned int              errorMapRows;    //Number of rows in error map.
    unsigned int              errorMapCols;    //Number of Columns in error map.
    ErrorStatistics           errorStatistics; //Error statistics of the calibration.
} GetCalibrationInfoReport;

typedef struct EdgePolarity_struct {
    EdgePolaritySearchMode start; 
    EdgePolaritySearchMode end;   
} EdgePolarity;

typedef struct ClampSettings_struct {
    double       angleRange;   //Specifies the angle range.
    EdgePolarity edgePolarity; //Specifies the edge polarity.
} ClampSettings;

typedef struct PointDouble_struct {
    double x; //The x-coordinate of the point.
    double y; //The y-coordinate of the point.
} PointDouble;

typedef struct PointDoublePair_struct {
    PointDouble start; //The Start co-ordinate of the pair.
    PointDouble end;   //The End co-ordinate of the pair.
} PointDoublePair;

typedef struct ClampResults_struct {
    double distancePix;       //Defines the Pixel world distance.
    double distanceRealWorld; //Defines the real world distance.
    double angleAbs;          //Defines the absolute angle.
    double angleRelative;     //Defines the relative angle.
} ClampResults;

typedef struct ClampPoints_struct {
    PointDoublePair pixel;     //Specifies the pixel world point pair for clamp.
    PointDoublePair realWorld; //Specifies the real world point pair for clamp.
} ClampPoints;

typedef struct RGBValue_struct {
    unsigned char B;     //The blue value of the color.
    unsigned char G;     //The green value of the color.
    unsigned char R;     //The red value of the color.
    unsigned char alpha; //The alpha value of the color, which represents extra information about a color image, such as gamma correction.
} RGBValue;

typedef struct ClampOverlaySettings_struct {
    int      showSearchArea;      //If TRUE, the function overlays the search area on the image.
    int      showCurves;          //If TRUE, the function overlays the curves on the image.
    int      showClampLocation;   //If TRUE, the function overlays the clamp location on the image.
    int      showResult;          //If TRUE, the function overlays the hit lines to the object and the edge used to generate the hit line on the result image.
    RGBValue searchAreaColor;     //Specifies the RGB color value to use to overlay the search area.
    RGBValue curvesColor;         //Specifies the RGB color value to use to overlay the curves.
    RGBValue clampLocationsColor; //Specifies the RGB color value to use to overlay the clamp locations.
    RGBValue resultColor;         //Specifies the RGB color value to use to overlay the results.
    char*    overlayGroupName;    //Specifies the group overlay name for the step overlays.
} ClampOverlaySettings;

typedef struct ClampMax2Report_struct {
    ClampResults clampResults;     //Specifies the Clamp results information returned by the function.
    ClampPoints  clampPoints;      //Specifies the clamp points information returned by the function.
    unsigned int calibrationValid; //Specifies if the calibration information is valid or not.
} ClampMax2Report;

typedef struct ContourFitSplineReport_struct {
    PointDouble* points;         //It returns the points of the best-fit B-spline curve.
    int          numberOfPoints; //Number of Best fit points returned.
} ContourFitSplineReport;

typedef struct LineFloat_struct {
    PointFloat start; //The coordinate location of the start of the line.
    PointFloat end;   //The coordinate location of the end of the line.
} LineFloat;

typedef struct LineEquation_struct {
    double a; //The a coefficient of the line equation.
    double b; //The b coefficient of the line equation.
    double c; //The c coefficient of the line equation.
} LineEquation;

typedef struct ContourFitLineReport_struct {
    LineFloat    lineSegment;  //Line Segment represents the intersection of the line equation and the contour.
    LineEquation lineEquation; //Line Equation is a structure of three coefficients A, B, and C of the equation in the normal form (Ax + By + C=0) of the best fit line.
} ContourFitLineReport;

typedef struct ContourFitPolynomialReport_struct {
    PointDouble* bestFit;                //It returns the points of the best-fit polynomial.
    int          numberOfPoints;         //Number of Best fit points returned.
    double*      polynomialCoefficients; //Polynomial Coefficients returns the coefficients of the polynomial equation.
    int          numberOfCoefficients;   //Number of Coefficients returned in the polynomial coefficients array.
} ContourFitPolynomialReport;

typedef struct PartialCircle_struct {
    PointFloat center;     //Center of the circle.
    double     radius;     //Radius of the circle.
    double     startAngle; //Start angle of the fitted structure.
    double     endAngle;   //End angle of the fitted structure.
} PartialCircle;

typedef struct PartialEllipse_struct {
    PointFloat center;      //Center of the Ellipse.
    double     angle;       //Angle of the ellipse.
    double     majorRadius; //The length of the semi-major axis of the ellipse.
    double     minorRadius; //The length of the semi-minor axis of the ellipse.
    double     startAngle;  //Start angle of the fitted structure.
    double     endAngle;    //End angle of the fitted structure.
} PartialEllipse;

typedef struct SetupMatchPatternData_struct {
    unsigned char* matchSetupData;    //String containing the match setup data.
    int            numMatchSetupData; //Number of match setup data.
} SetupMatchPatternData;

typedef struct RangeSettingDouble_struct {
    SettingType settingType; //Match Constraints specifies the match option whose values you want to constrain by the given range.
    double      min;         //Min is the minimum value of the range for a given Match Constraint.
    double      max;         //Max is the maximum value of the range for a given Match Constraint.
} RangeSettingDouble;

typedef struct GeometricAdvancedSetupDataOption_struct {
    GeometricSetupDataItem type;  //It determines the option you want to use during the matching phase.
    double                 value; //Value is the value for the option you want to use during the matching phase.
} GeometricAdvancedSetupDataOption;

typedef struct ContourInfoReport_struct {
    PointDouble* pointsPixel;       //Points (pixel) specifies the location of every point detected on the curve, in pixels.
    unsigned int numPointsPixel;    //Number of points pixel elements.
    PointDouble* pointsReal;        //Points (real) specifies the location of every point detected on the curve, in calibrated units.
    unsigned int numPointsReal;     //Number of points real elements.
    double*      curvaturePixel;    //Curvature Pixel displays the curvature profile for the selected contour, in pixels.
    unsigned int numCurvaturePixel; //Number of curvature pixels.
    double*      curvatureReal;     //Curvature Real displays the curvature profile for the selected contour, in calibrated units.
    unsigned int numCurvatureReal;  //Number of curvature Real elements.
    double       length;            //Length (pixel) specifies the length, in pixels, of the curves in the image.
    double       lengthReal;        //Length (real) specifies the length, in calibrated units, of the curves within the curvature range.
    unsigned int hasEquation;       //Has Equation specifies whether the contour has a fitted equation.
} ContourInfoReport;

typedef struct ROILabel_struct {
    char*        className; //Specifies the classname you want to segment.
    unsigned int label;     //Label is the label number associated with the Class Name.
} ROILabel;

typedef struct SupervisedColorSegmentationReport_struct {
    ROILabel*    labelOut;    //The Roi labels array.
    unsigned int numLabelOut; //The number of elements in labelOut array.
} SupervisedColorSegmentationReport;

typedef struct LabelToROIReport_struct {
    ROI**         roiArray;                  //Array of ROIs.
    unsigned int  numOfROIs;                 //Number of ROIs in the roiArray.
    unsigned int* labelsOutArray;            //Array of labels.
    unsigned int  numOfLabels;               //Number of labels.
    int*          isTooManyVectorsArray;     //isTooManyVectorsArray array.
    unsigned int  isTooManyVectorsArraySize; //Number of elements in isTooManyVectorsArray.
} LabelToROIReport;

typedef struct ColorSegmenationOptions_struct {
    unsigned int windowX;         //X is the window size in x direction.
    unsigned int windowY;         //Y is the window size in y direction.
    unsigned int stepSize;        //Step Size is the distance between two windows.
    unsigned int minParticleArea; //Min Particle Area is the minimum number of allowed pixels.
    unsigned int maxParticleArea; //Max Particle Area is the maximum number of allowed pixels.
    short        isFineSegment;   //When enabled, the step processes the boundary pixels of each segmentation cluster using a step size of 1.
} ColorSegmenationOptions;

typedef struct ClassifiedCurve_struct {
    double       length;           //Specifies the length, in pixels, of the curves within the curvature range.
    double       lengthReal;       //specifies the length, in calibrated units, of the curves within the curvature range.
    double       maxCurvature;     //specifies the maximum curvature, in pixels, for the selected curvature range.
    double       maxCurvatureReal; //specifies the maximum curvature, in calibrated units, for the selected curvature range.
    unsigned int label;            //specifies the class to which the the sample belongs.
    PointDouble* curvePoints;      //Curve Points is a point-coordinate cluster that defines the points of the curve.
    unsigned int numCurvePoints;   //Number of curve points.
} ClassifiedCurve;

typedef struct RangeDouble_struct {
    double minValue; //The minimum value of the range.
    double maxValue; //The maximum value of the range.
} RangeDouble;

typedef struct RangeLabel_struct {
    RangeDouble  range; //Specifies the range of curvature values.
    unsigned int label; //Class Label specifies the class to which the the sample belongs.
} RangeLabel;

typedef struct CurvatureAnalysisReport_struct {
    ClassifiedCurve* curves;    
    unsigned int     numCurves; 
} CurvatureAnalysisReport;

typedef struct Disparity_struct {
    PointDouble current;   //Current is a array of points that defines the target contour.
    PointDouble reference; //reference is a array of points that defines the template contour.
    double      distance;  //Specifies the distance, in pixels, between the template contour point and the target contour point.
} Disparity;

typedef struct ComputeDistancesReport_struct {
    Disparity*   distances;        //Distances is an array containing the computed distances.
    unsigned int numDistances;     //Number elements in the distances array.
    Disparity*   distancesReal;    //Distances Real is an array containing the computed distances in calibrated units.
    unsigned int numDistancesReal; //Number of elements in real distances array.
} ComputeDistancesReport;

typedef struct MatchMode_struct {
    unsigned int rotation;  //Rotation When enabled, the Function searches for occurrences of the template in the inspection image, allowing for template matches to be rotated.
    unsigned int scale;     //Rotation When enabled, the Function searches for occurrences of the template in the inspection image, allowing for template matches to be rotated.
    unsigned int occlusion; //Occlusion specifies whether or not to search for occluded versions of the shape.
} MatchMode;

typedef struct ClassifiedDisparity_struct {
    double       length;                //Length (pixel) specifies the length, in pixels, of the curves within the curvature range.
    double       lengthReal;            //Length (real) specifies the length, in calibrated units, of the curves within the curvature range.
    double       maxDistance;           //Maximum Distance (pixel) specifies the maximum distance, in pixels, between points along the selected contour and the template contour.
    double       maxDistanceReal;       //Maximum Distance (real) specifies the maximum distance, in calibrated units, between points along the selected contour and the template contour.
    unsigned int label;                 //Class Label specifies the class to which the the sample belongs.
    PointDouble* templateSubsection;    //Template subsection points is an array of points that defines the boundary of the template.
    unsigned int numTemplateSubsection; //Number of reference points.
    PointDouble* targetSubsection;      //Current Points(Target subsection points) is an array of points that defines the boundary of the target.
    unsigned int numTargetSubsection;   //Number of current points.
} ClassifiedDisparity;

typedef struct ClassifyDistancesReport_struct {
    ClassifiedDisparity* classifiedDistances;    //Disparity array containing the classified distances.
    unsigned int         numClassifiedDistances; //Number of elements in the disparity array.
} ClassifyDistancesReport;

typedef struct ContourComputeCurvatureReport_struct {
    double*      curvaturePixel;    //Curvature Pixel displays the curvature profile for the selected contour, in pixels.
    unsigned int numCurvaturePixel; //Number of curvature pixels.
    double*      curvatureReal;     //Curvature Real displays the curvature profile for the selected contour, in calibrated units.
    unsigned int numCurvatureReal;  //Number of curvature Real elements.
} ContourComputeCurvatureReport;

typedef struct ContourOverlaySettings_struct {
    unsigned int overlay;       //Overlay specifies whether to display the overlay on the image.
    RGBValue     color;         //Color is the color of the overlay.
    unsigned int width;         //Width specifies the width of the overlay in pixels.
    unsigned int maintainWidth; //Maintain Width? specifies whether you want the overlay measured in screen pixels or image pixels.
} ContourOverlaySettings;

typedef struct CurveParameters_struct {
    ExtractionMode extractionMode; //Specifies the method the function uses to identify curves in the image.
    int            threshold;      //Specifies the minimum contrast a seed point must have in order to begin a curve.
    EdgeFilterSize filterSize;     //Specifies the width of the edge filter the function uses to identify curves in the image.
    int            minLength;      //Specifies the length, in pixels, of the smallest curve the function will extract.
    int            searchStep;     //Search Step Size specifies the distance, in the y direction, between the image rows that the algorithm inspects for curve seed points.
    int            maxEndPointGap; //Specifies the maximum gap, in pixels, between the endpoints of a curve that the function identifies as a closed curve.
    int            subpixel;       //Subpixel specifies whether to detect curve points with subpixel accuracy.
} CurveParameters;

typedef struct ExtractContourReport_struct {
    PointDouble* contourPoints;    //Contour Points specifies every point found on the contour.
    int          numContourPoints; //Number of contour points.
    PointDouble* sourcePoints;     //Source Image Points specifies every point found on the contour in the source image.
    int          numSourcePoints;  //Number of source points.
} ExtractContourReport;

typedef struct ConnectionConstraint_struct {
    ConnectionConstraintType constraintType; //Constraint Type specifies what criteria to use to consider two curves part of a contour.
    RangeDouble              range;          //Specifies range for a given Match Constraint.
} ConnectionConstraint;

typedef struct ExtractTextureFeaturesReport_struct {
    int*     waveletBands;        //The array having all the Wavelet Banks used for extraction.
    int      numWaveletBands;     //Number of wavelet banks in the Array.
    double** textureFeatures;     //2-D array to store all the Texture features extracted.
    int      textureFeaturesRows; //Number of Rows in the Texture Features array.
    int      textureFeaturesCols; //Number of Cols in Texture Features array.
} ExtractTextureFeaturesReport;

typedef struct WaveletBandsReport_struct {
    float** LLBand;  //2-D array for LL Band.
    float** LHBand;  //2-D array for LH Band.
    float** HLBand;  //2-D array for HL Band.
    float** HHBand;  //2-D array for HH Band.
    float** LLLBand; //2-D array for LLL Band.
    float** LLHBand; //2-D array for LLH Band.
    float   LHLBand; //2-D array for LHL Band.
    float** LHHBand; //2-D array for LHH Band.
    int     rows;    //Number of Rows for each of the 2-D arrays.
    int     cols;    //Number of Columns for each of the 2-D arrays.
} WaveletBandsReport;

typedef struct CircleFitOptions_struct {
    int             maxRadius;   //Specifies the acceptable distance, in pixels, that a point determined to belong to the circle can be from the perimeter of the circle.
    double          stepSize;    //Step Size is the angle, in degrees, between each radial line in the annular region.
    RakeProcessType processType; //Method used to process the data extracted for edge detection.
} CircleFitOptions;

typedef struct EdgeOptions2_struct {
    EdgePolaritySearchMode polarity;             //Specifies the polarity of the edges to be found.
    unsigned int           kernelSize;           //Specifies the size of the edge detection kernel.
    unsigned int           width;                //Specifies the number of pixels averaged perpendicular to the search direction to compute the edge profile strength at each point along the search ROI.
    float                  minThreshold;         //Specifies the minimum edge strength (gradient magnitude) required for a detected edge.
    InterpolationMethod    interpolationType;    //Specifies the interpolation method used to locate the edge position.
    ColumnProcessingMode   columnProcessingMode; //Specifies the method used to find the straight edge.
} EdgeOptions2;

typedef struct FindCircularEdgeOptions_struct {
    SpokeDirection direction;        //Specifies the Spoke direction to search in the ROI.
    int            showSearchArea;   //If TRUE, the function overlays the search area on the image.
    int            showSearchLines;  //If TRUE, the function overlays the search lines used to locate the edges on the image.
    int            showEdgesFound;   //If TRUE, the function overlays the locations of the edges found on the image.
    int            showResult;       //If TRUE, the function overlays the hit lines to the object and the edge used to generate the hit line on the result image.
    RGBValue       searchAreaColor;  //Specifies the RGB color value to use to overlay the search area.
    RGBValue       searchLinesColor; //Specifies the RGB color value to use to overlay the search lines.
    RGBValue       searchEdgesColor; //Specifies the RGB color value to use to overlay the search edges.
    RGBValue       resultColor;      //Specifies the RGB color value to use to overlay the results.
    char*          overlayGroupName; //Specifies the overlay group name to assign to the overlays.
    EdgeOptions2   edgeOptions;      //Specifies the edge detection options along a single search line.
} FindCircularEdgeOptions;

typedef struct FindConcentricEdgeOptions_struct {
    ConcentricRakeDirection direction;        //Specifies the Concentric Rake direction.
    int                     showSearchArea;   //If TRUE, the function overlays the search area on the image.
    int                     showSearchLines;  //If TRUE, the function overlays the search lines used to locate the edges on the image.
    int                     showEdgesFound;   //If TRUE, the function overlays the locations of the edges found on the image.
    int                     showResult;       //If TRUE, the function overlays the hit lines to the object and the edge used to generate the hit line on the result image.
    RGBValue                searchAreaColor;  //Specifies the RGB color value to use to overlay the search area.
    RGBValue                searchLinesColor; //Specifies the RGB color value to use to overlay the search lines.
    RGBValue                searchEdgesColor; //Specifies the RGB color value to use to overlay the search edges.
    RGBValue                resultColor;      //Specifies the RGB color value to use to overlay the results.
    char*                   overlayGroupName; //Specifies the overlay group name to assign to the overlays.
    EdgeOptions2            edgeOptions;      //Specifies the edge detection options along a single search line.
} FindConcentricEdgeOptions;

typedef struct ConcentricEdgeFitOptions_struct {
    int             maxRadius;   //Specifies the acceptable distance, in pixels, that a point determined to belong to the circle can be from the perimeter of the circle.
    double          stepSize;    //The sampling factor that determines the gap between the rake lines.
    RakeProcessType processType; //Method used to process the data extracted for edge detection.
} ConcentricEdgeFitOptions;

typedef struct FindConcentricEdgeReport_struct {
    PointFloat startPt;           //Pixel Coordinates for starting point of the edge.
    PointFloat endPt;             //Pixel Coordinates for end point of the edge.
    PointFloat startPtCalibrated; //Real world Coordinates for starting point of the edge.
    PointFloat endPtCalibrated;   //Real world Coordinates for end point of the edge.
    double     angle;             //Angle of the edge found.
    double     angleCalibrated;   //Calibrated angle of the edge found.
    double     straightness;      //The straightness value of the detected straight edge.
    double     avgStrength;       //Average strength of the egde found.
    double     avgSNR;            //Average SNR(Signal to Noise Ratio) for the edge found.
    int        lineFound;         //If the edge is found or not.
} FindConcentricEdgeReport;

typedef struct FindCircularEdgeReport_struct {
    PointFloat centerCalibrated; //Real world Coordinates of the Center.
    double     radiusCalibrated; //Real world radius of the Circular Edge found.
    PointFloat center;           //Pixel Coordinates of the Center.
    double     radius;           //Radius in pixels of the Circular Edge found.
    double     roundness;        //The roundness of the calculated circular edge.
    double     avgStrength;      //Average strength of the egde found.
    double     avgSNR;           //Average SNR(Signal to Noise Ratio) for the edge found.
    int        circleFound;      //If the circlular edge is found or not.
} FindCircularEdgeReport;

typedef struct WindowSize_struct {
    int x;        //Window lenght on X direction.
    int y;        //Window lenght on Y direction.
    int stepSize; //Distance between windows.
} WindowSize;

typedef struct DisplacementVector_struct {
    int x; //length on X direction.
    int y; //length on Y direction.
} DisplacementVector;

typedef struct WaveletOptions_struct {
    WaveletType typeOfWavelet; //Type of wavelet(db, bior.
    float       minEnergy;     //Minimum Energy in the bands to consider for texture defect detection.
} WaveletOptions;

typedef struct CooccurrenceOptions_struct {
    int                level;        //Level/size of matrix.
    DisplacementVector displacement; //Displacemnet between pixels to accumulate the matrix.
} CooccurrenceOptions;

typedef struct ParticleClassifierLocalThresholdOptions_struct {
    LocalThresholdMethod method;          //Specifies the local thresholding method the function uses.
    ParticleType         particleType;    //Specifies what kind of particles to look for.
    unsigned int         windowWidth;     //The width of the rectangular window around the pixel on which the function performs the local threshold.
    unsigned int         windowHeight;    //The height of the rectangular window around the pixel on which the function performs the local threshold.
    double               deviationWeight; //Specifies the k constant used in the Niblack local thresholding algorithm, which determines the weight applied to the variance calculation.
} ParticleClassifierLocalThresholdOptions;

typedef struct RangeFloat_struct {
    float minValue; //The minimum value of the range.
    float maxValue; //The maximum value of the range.
} RangeFloat;

typedef struct ParticleClassifierAutoThresholdOptions_struct {
    ThresholdMethod method;       //The method for binary thresholding, which specifies how to calculate the classes.
    ParticleType    particleType; //Specifies what kind of particles to look for.
    RangeFloat      limits;       //The limits on the automatic threshold range.
} ParticleClassifierAutoThresholdOptions;

typedef struct ParticleClassifierPreprocessingOptions2_struct {
    ParticleClassifierThresholdType         thresholdType;         //The type of threshold to perform on the image.
    RangeFloat                              manualThresholdRange;  //The range of pixels to keep if manually thresholding the image.
    ParticleClassifierAutoThresholdOptions  autoThresholdOptions;  //The options used to auto threshold the image.
    ParticleClassifierLocalThresholdOptions localThresholdOptions; //The options used to local threshold the image.
    int                                     rejectBorder;          //Set this element to TRUE to reject border particles.
    int                                     numErosions;           //The number of erosions to perform.
} ParticleClassifierPreprocessingOptions2;

typedef struct MeasureParticlesReport_struct {
    double** pixelMeasurements;      //The measurements on the particles in the image, in pixel coordinates.
    double** calibratedMeasurements; //The measurements on the particles in the image, in real-world coordinates.
    size_t   numParticles;           //The number of particles on which measurements were taken.
    size_t   numMeasurements;        //The number of measurements taken.
} MeasureParticlesReport;

typedef struct GeometricPatternMatch3_struct {
    PointFloat position;                //The location of the origin of the template in the match.
    float      rotation;                //The rotation of the match relative to the template image, in degrees.
    float      scale;                   //The size of the match relative to the size of the template image, expressed as a percentage.
    float      score;                   //The accuracy of the match.
    PointFloat corner[4];               //An array of four points describing the rectangle surrounding the template image.
    int        inverse;                 //This element is TRUE if the match is an inverse of the template image.
    float      occlusion;               //The percentage of the match that is occluded.
    float      templateMatchCurveScore; //The accuracy of the match obtained by comparing the template curves to the curves in the match region.
    float      matchTemplateCurveScore; //The accuracy of the match obtained by comparing the curves in the match region to the template curves.
    float      correlationScore;        //The accuracy of the match obtained by comparing the template image to the match region using a correlation metric that compares the two regions as a function of their pixel values.
    PointFloat calibratedPosition;      //The location of the origin of the template in the match.
    float      calibratedRotation;      //The rotation of the match relative to the template image, in degrees.
    PointFloat calibratedCorner[4];     //An array of four points describing the rectangle surrounding the template image.
} GeometricPatternMatch3;

typedef struct MatchGeometricPatternAdvancedOptions3_struct {
    unsigned int                    subpixelIterations;         //Specifies the maximum number of incremental improvements used to refine matches with subpixel information.
    double                          subpixelTolerance;          //Specifies the maximum amount of change, in pixels, between consecutive incremental improvements in the match position before the function stops refining the match position.
    unsigned int                    initialMatchListLength;     //Specifies the maximum size of the match list.
    int                             targetTemplateCurveScore;   //Set this element to TRUE to specify that the function should calculate the match curve to template curve score and return it for each match result.
    int                             correlationScore;           //Set this element to TRUE to specify that the function should calculate the correlation score and return it for each match result.
    double                          minMatchSeparationDistance; //Specifies the minimum separation distance, in pixels, between the origins of two matches that have unique positions.
    double                          minMatchSeparationAngle;    //Specifies the minimum angular difference, in degrees, between two matches that have unique angles.
    double                          minMatchSeparationScale;    //Specifies the minimum difference in scale, expressed as a percentage, between two matches that have unique scales.
    double                          maxMatchOverlap;            //Specifies the maximum amount of overlap, expressed as a percentage, allowed between the bounding rectangles of two unique matches.
    int                             coarseResult;               //Specifies whether you want the function to spend less time accurately estimating the location of a match.
    int                             enableCalibrationSupport;   //Set this element to TRUE to specify the algorithm treat the inspection image as a calibrated image.
    ContrastMode                    enableContrastReversal;     //Use this element to specify the contrast of the matches to search for in the image.
    GeometricMatchingSearchStrategy matchStrategy;              //Specifies the aggressiveness of the search strategy.
    unsigned int                    refineMatchFactor;          //Specifies the factor that is applied to the number of matches requested by the user to determine the number of matches that are refined at the initial matching stage.
    unsigned int                    subpixelMatchFactor;        //Specifies the factor that is applied to the number of matches requested by the user to determine the number of matches that are evaluated at the final subpixel matching stage.
} MatchGeometricPatternAdvancedOptions3;

typedef struct ColorOptions_struct {
    ColorClassificationResolution colorClassificationResolution; //Specifies the color resolution of the classifier.
    unsigned int                  useLuminance;                  //Specifies if the luminance band is going to be used in the feature vector.
    ColorMode                     colorMode;                     //Specifies the color mode of the classifier.
} ColorOptions;

typedef struct SampleScore_struct {
    char*        className; //The name of the class.
    float        distance;  //The distance from the item to this class.
    unsigned int index;     //index of this sample.
} SampleScore;

typedef struct ClassifierReportAdvanced_struct {
    char*        bestClassName;       //The name of the best class for the sample.
    float        classificationScore; //The similarity of the sample and the two closest classes in the classifier.
    float        identificationScore; //The similarity of the sample and the assigned class.
    ClassScore*  allScores;           //All classes and their scores.
    int          allScoresSize;       //The number of entries in allScores.
    SampleScore* sampleScores;        //All samples and their scores.
    int          sampleScoresSize;    //The number of entries in sampleScores.
} ClassifierReportAdvanced;

typedef struct LearnGeometricPatternAdvancedOptions2_struct {
    double       minScaleFactor;        //Specifies the minimum scale factor that the template is learned for.
    double       maxScaleFactor;        //Specifies the maximum scale factor the template is learned for.
    double       minRotationAngleValue; //Specifies the minimum rotation angle the template is learned for.
    double       maxRotationAngleValue; //Specifies the maximum rotation angle the template is learned for.
    unsigned int imageSamplingFactor;   //Specifies the factor that is used to subsample the template and the image for the initial matching phase.
} LearnGeometricPatternAdvancedOptions2;

typedef struct ParticleFilterOptions2_struct {
    int rejectMatches; //Set this parameter to TRUE to transfer only those particles that do not meet all the criteria.
    int rejectBorder;  //Set this element to TRUE to reject border particles.
    int fillHoles;     //Set this element to TRUE to fill holes in particles.
    int connectivity8; //Set this parameter to TRUE to use connectivity-8 to determine whether particles are touching.
} ParticleFilterOptions2;

typedef struct FindEdgeOptions2_struct {
    RakeDirection direction;        //The direction to search in the ROI.
    int           showSearchArea;   //If TRUE, the function overlays the search area on the image.
    int           showSearchLines;  //If TRUE, the function overlays the search lines used to locate the edges on the image.
    int           showEdgesFound;   //If TRUE, the function overlays the locations of the edges found on the image.
    int           showResult;       //If TRUE, the function overlays the hit lines to the object and the edge used to generate the hit line on the result image.
    RGBValue      searchAreaColor;  //Specifies the RGB color value to use to overlay the search area.
    RGBValue      searchLinesColor; //Specifies the RGB color value to use to overlay the search lines.
    RGBValue      searchEdgesColor; //Specifies the RGB color value to use to overlay the search edges.
    RGBValue      resultColor;      //Specifies the RGB color value to use to overlay the results.
    char*         overlayGroupName; //Specifies the overlay group name to assign to the overlays.
    EdgeOptions2  edgeOptions;      //Specifies the edge detection options along a single search line.
} FindEdgeOptions2;

typedef struct FindEdgeReport_struct {
    StraightEdge* straightEdges;    //An array of straight edges detected.
    unsigned int  numStraightEdges; //Indicates the number of straight edges found.
} FindEdgeReport;

typedef struct FindTransformRectOptions2_struct {
    FindReferenceDirection direction;        //Specifies the direction and orientation in which the function searches for the primary axis.
    int                    showSearchArea;   //If TRUE, the function overlays the search area on the image.
    int                    showSearchLines;  //If TRUE, the function overlays the search lines used to locate the edges on the image.
    int                    showEdgesFound;   //If TRUE, the function overlays the locations of the edges found on the image.
    int                    showResult;       //If TRUE, the function overlays the hit lines to the object and the edge used to generate the hit line on the result image.
    RGBValue               searchAreaColor;  //Specifies the RGB color value to use to overlay the search area.
    RGBValue               searchLinesColor; //Specifies the RGB color value to use to overlay the search lines.
    RGBValue               searchEdgesColor; //Specifies the RGB color value to use to overlay the search edges.
    RGBValue               resultColor;      //Specifies the RGB color value to use to overlay the results.
    char*                  overlayGroupName; //Specifies the overlay group name to assign to the overlays.
    EdgeOptions2           edgeOptions;      //Specifies the edge detection options along a single search line.
} FindTransformRectOptions2;

typedef struct FindTransformRectsOptions2_struct {
    FindReferenceDirection direction;            //Specifies the direction and orientation in which the function searches for the primary axis.
    int                    showSearchArea;       //If TRUE, the function overlays the search area on the image.
    int                    showSearchLines;      //If TRUE, the function overlays the search lines used to locate the edges on the image.
    int                    showEdgesFound;       //If TRUE, the function overlays the locations of the edges found on the image.
    int                    showResult;           //If TRUE, the function overlays the hit lines to the object and the edge used to generate the hit line on the result image.
    RGBValue               searchAreaColor;      //Specifies the RGB color value to use to overlay the search area.
    RGBValue               searchLinesColor;     //Specifies the RGB color value to use to overlay the search lines.
    RGBValue               searchEdgesColor;     //Specifies the RGB color value to use to overlay the search edges.
    RGBValue               resultColor;          //Specifies the RGB color value to use to overlay the results.
    char*                  overlayGroupName;     //Specifies the overlay group name to assign to the overlays.
    EdgeOptions2           primaryEdgeOptions;   //Specifies the parameters used to compute the edge gradient information and detect the edges for the primary ROI.
    EdgeOptions2           secondaryEdgeOptions; //Specifies the parameters used to compute the edge gradient information and detect the edges for the secondary ROI.
} FindTransformRectsOptions2;

typedef struct ReadTextReport3_struct {
    const char*  readString;            //The read string.
    CharReport3* characterReport;       //An array of reports describing the properties of each identified character.
    int          numCharacterReports;   //The number of identified characters.
    ROI*         roiBoundingCharacters; //An array specifying the coordinates of the character bounding ROI.
} ReadTextReport3;

typedef struct CharacterStatistics_struct {
    int left;          //The left offset of the character bounding rectangles in the current ROI.
    int top;           //The top offset of the character bounding rectangles in the current ROI.
    int width;         //The width of each of the characters you trained in the current ROI.
    int height;        //The height of each trained character in the current ROI.
    int characterSize; //The size of the character in pixels.
} CharacterStatistics;

typedef struct CharReport3_struct {
    const char*         character;           //The character value.
    int                 classificationScore; //The degree to which the assigned character class represents the object better than the other character classes in the character set.
    int                 verificationScore;   //The similarity of the character and the reference character for the character class.
    int                 verified;            //This element is TRUE if a reference character was found for the character class and FALSE if a reference character was not found.
    int                 lowThreshold;        //The minimum value of the threshold range used for this character.
    int                 highThreshold;       //The maximum value of the threshold range used for this character.
    CharacterStatistics characterStats;      //Describes the characters segmented in the ROI.
} CharReport3;

typedef struct ArcInfo2_struct {
    PointFloat center;     //The center point of the arc.
    double     radius;     //The radius of the arc.
    double     startAngle; //The starting angle of the arc, specified counter-clockwise from the x-axis.
    double     endAngle;   //The ending angle of the arc, specified counter-clockwise from the x-axis.
} ArcInfo2;

typedef struct EdgeReport2_struct {
    EdgeInfo*    edges;            //An array of edges detected.
    unsigned int numEdges;         //Indicates the number of edges detected.
    double*      gradientInfo;     //An array that contains the calculated edge strengths along the user-defined search area.
    unsigned int numGradientInfo;  //Indicates the number of elements contained in gradientInfo.
    int          calibrationValid; //Indicates if the calibration data corresponding to the location of the edges is correct.
} EdgeReport2;

typedef struct SearchArcInfo_struct {
    ArcInfo2    arcCoordinates; //Describes the arc used for edge detection.
    EdgeReport2 edgeReport;     //Describes the edges found in this search line.
} SearchArcInfo;

typedef struct ConcentricRakeReport2_struct {
    EdgeInfo*      firstEdges;    //The first edge point detected along each search line in the ROI.
    unsigned int   numFirstEdges; //The number of points in the firstEdges array.
    EdgeInfo*      lastEdges;     //The last edge point detected along each search line in the ROI.
    unsigned int   numLastEdges;  //The number of points in the lastEdges array.
    SearchArcInfo* searchArcs;    //Contains the arcs used for edge detection and the edge information for each arc.
    unsigned int   numSearchArcs; //The number of arcs in the searchArcs array.
} ConcentricRakeReport2;

typedef struct SpokeReport2_struct {
    EdgeInfo*       firstEdges;     //The first edge point detected along each search line in the ROI.
    unsigned int    numFirstEdges;  //The number of points in the firstEdges array.
    EdgeInfo*       lastEdges;      //The last edge point detected along each search line in the ROI.
    unsigned int    numLastEdges;   //The number of points in the lastEdges array.
    SearchLineInfo* searchLines;    //The search lines used for edge detection.
    unsigned int    numSearchLines; //The number of search lines used in the edge detection.
} SpokeReport2;

typedef struct EdgeInfo_struct {
    PointFloat position;           //The location of the edge in the image.
    PointFloat calibratedPosition; //The position of the edge in the image in real-world coordinates.
    double     distance;           //The location of the edge from the first point along the boundary of the input ROI.
    double     calibratedDistance; //The location of the edge from the first point along the boundary of the input ROI in real-world coordinates.
    double     magnitude;          //The intensity contrast at the edge.
    double     noisePeak;          //The strength of the noise associated with the current edge.
    int        rising;             //Indicates the polarity of the edge.
} EdgeInfo;

typedef struct SearchLineInfo_struct {
    LineFloat   lineCoordinates; //The endpoints of the search line.
    EdgeReport2 edgeReport;      //Describes the edges found in this search line.
} SearchLineInfo;

typedef struct RakeReport2_struct {
    EdgeInfo*       firstEdges;     //The first edge point detected along each search line in the ROI.
    unsigned int    numFirstEdges;  //The number of points in the firstEdges array.
    EdgeInfo*       lastEdges;      //The last edge point detected along each search line in the ROI.
    unsigned int    numLastEdges;   //The number of points in the lastEdges array.
    SearchLineInfo* searchLines;    //The search lines used for edge detection.
    unsigned int    numSearchLines; //The number of search lines used in the edge detection.
} RakeReport2;

typedef struct TransformBehaviors_struct {
    GroupBehavior ShiftBehavior;    //Specifies the behavior of an overlay group when a shift operation is applied to an image.
    GroupBehavior ScaleBehavior;    //Specifies the behavior of an overlay group when a scale operation is applied to an image.
    GroupBehavior RotateBehavior;   //Specifies the behavior of an overlay group when a rotate operation is applied to an image.
    GroupBehavior SymmetryBehavior; //Specifies the behavior of an overlay group when a symmetry operation is applied to an image.
} TransformBehaviors;

typedef struct QRCodeDataToken_struct {
    QRStreamMode   mode;       //Specifies the stream mode or the format of the data that is encoded in the QR code.
    unsigned int   modeData;   //Indicates specifiers used by the user to postprocess the data if it requires it.
    unsigned char* data;       //Shows the encoded data in the QR code.
    unsigned int   dataLength; //Specifies the length of the data found in the QR code.
} QRCodeDataToken;

typedef struct ParticleFilterOptions_struct {
    int rejectMatches; //Set this parameter to TRUE to transfer only those particles that do not meet all the criteria.
    int rejectBorder;  //Set this element to TRUE to reject border particles.
    int connectivity8; //Set this parameter to TRUE to use connectivity-8 to determine whether particles are touching.
} ParticleFilterOptions;

typedef struct StraightEdgeReport2_struct {
    StraightEdge*   straightEdges;    //Contains an array of found straight edges.
    unsigned int    numStraightEdges; //Indicates the number of straight edges found.
    SearchLineInfo* searchLines;      //Contains an array of all search lines used in the detection.
    unsigned int    numSearchLines;   //The number of search lines used in the edge detection.
} StraightEdgeReport2;

typedef struct StraightEdgeOptions_struct {
    unsigned int           numLines;              //Specifies the number of straight edges to find.
    StraightEdgeSearchMode searchMode;            //Specifies the method used to find the straight edge.
    double                 minScore;              //Specifies the minimum score of a detected straight edge.
    double                 maxScore;              //Specifies the maximum score of a detected edge.
    double                 orientation;           //Specifies the angle at which the straight edge is expected to be found.
    double                 angleRange;            //Specifies the +/- range around the orientation within which the straight edge is expected to be found.
    double                 angleTolerance;        //Specifies the expected angular accuracy of the straight edge.
    unsigned int           stepSize;              //Specifies the gap in pixels between the search lines used with the rake-based methods.
    double                 minSignalToNoiseRatio; //Specifies the minimum signal to noise ratio (SNR) of the edge points used to fit the straight edge.
    double                 minCoverage;           //Specifies the minimum number of points as a percentage of the number of search lines that need to be included in the detected straight edge.
    unsigned int           houghIterations;       //Specifies the number of iterations used in the Hough-based method.
} StraightEdgeOptions;

typedef struct StraightEdge_struct {
    LineFloat    straightEdgeCoordinates;           //End points of the detected straight edge in pixel coordinates.
    LineFloat    calibratedStraightEdgeCoordinates; //End points of the detected straight edge in real-world coordinates.
    double       angle;                             //Angle of the found edge using the pixel coordinates.
    double       calibratedAngle;                   //Angle of the found edge using the real-world coordinates.
    double       score;                             //Describes the score of the detected edge.
    double       straightness;                      //The straightness value of the detected straight edge.
    double       averageSignalToNoiseRatio;         //Describes the average signal to noise ratio (SNR) of the detected edge.
    int          calibrationValid;                  //Indicates if the calibration data for the straight edge is valid.
    EdgeInfo*    usedEdges;                         //An array of edges that were used to determine this straight line.
    unsigned int numUsedEdges;                      //Indicates the number of edges in the usedEdges array.
} StraightEdge;

typedef struct QRCodeSearchOptions_struct {
    QRRotationMode     rotationMode;       //Specifies the amount of QR code rotation the function should allow for.
    unsigned int       skipLocation;       //If set to TRUE, specifies that the function should assume that the QR code occupies the entire image (or the entire search region).
    unsigned int       edgeThreshold;      //The strength of the weakest edge the function uses to find the coarse location of the QR code in the image.
    QRDemodulationMode demodulationMode;   //The demodulation mode the function uses to locate the QR code.
    QRCellSampleSize   cellSampleSize;     //The cell sample size the function uses to locate the QR code.
    QRCellFilterMode   cellFilterMode;     //The cell filter mode the function uses to locate the QR code.
    unsigned int       skewDegreesAllowed; //Specifies the amount of skew in the QR code the function should allow for.
} QRCodeSearchOptions;

typedef struct QRCodeSizeOptions_struct {
    unsigned int minSize; //Specifies the minimum size (in pixels) of the QR code in the image.
    unsigned int maxSize; //Specifies the maximum size (in pixels) of the QR code in the image.
} QRCodeSizeOptions;

typedef struct QRCodeDescriptionOptions_struct {
    QRDimensions dimensions; //The number of rows and columns that are populated for the QR code, measured in cells.
    QRPolarities polarity;   //The polarity of the QR code.
    QRMirrorMode mirror;     //This element is TRUE if the QR code appears mirrored in the image and FALSE if the QR code appears normally in the image.
    QRModelType  modelType;  //This option allows you to specify the type of QR code.
} QRCodeDescriptionOptions;

typedef struct QRCodeReport_struct {
    unsigned int       found;                    //This element is TRUE if the function located and decoded a QR code and FALSE if the function failed to locate and decode a QR code.
    unsigned char*     data;                     //The data encoded in the QR code.
    unsigned int       dataLength;               //The length of the data array.
    PointFloat         boundingBox[4];           //An array of four points describing the rectangle surrounding the QR code.
    QRCodeDataToken*   tokenizedData;            //Contains the data tokenized in exactly the way it was encoded in the code.
    unsigned int       sizeOfTokenizedData;      //Size of the tokenized data.
    unsigned int       numErrorsCorrected;       //The number of errors the function corrected when decoding the QR code.
    unsigned int       dimensions;               //The number of rows and columns that are populated for the QR code, measured in cells.
    unsigned int       version;                  //The version of the QR code.
    QRModelType        modelType;                //This option allows you to specify what type of QR code this is.
    QRStreamMode       streamMode;               //The format of the data encoded in the stream.
    QRPolarities       matrixPolarity;           //The polarity of the QR code.
    unsigned int       mirrored;                 //This element is TRUE if the QR code appears mirrored in the image and FALSE if the QR code appears normally in the image.
    unsigned int       positionInAppendStream;   //Indicates what position the QR code is in with respect to the stream of data in all codes.
    unsigned int       sizeOfAppendStream;       //Specifies how many QR codes are part of a larger array of codes.
    int                firstEAN128ApplicationID; //The first EAN-128 Application ID encountered in the stream.
    int                firstECIDesignator;       //The first Regional Language Designator encountered in the stream.
    unsigned int       appendStreamIdentifier;   //Specifies what stream the QR code is in relation to when the code is part of a larger array of codes.
    unsigned int       minimumEdgeStrength;      //The strength of the weakest edge the function used to find the coarse location of the QR code in the image.
    QRDemodulationMode demodulationMode;         //The demodulation mode the function used to locate the QR code.
    QRCellSampleSize   cellSampleSize;           //The cell sample size the function used to locate the QR code.
    QRCellFilterMode   cellFilterMode;           //The cell filter mode the function used to locate the QR code.
} QRCodeReport;

typedef struct AIMGradeReport_struct {
    AIMGrade overallGrade;               //The overall letter grade, which is equal to the lowest of the other five letter grades.
    AIMGrade decodingGrade;              //The letter grade assigned to a Data Matrix barcode based on the success of the function in decoding the Data Matrix barcode.
    AIMGrade symbolContrastGrade;        //The letter grade assigned to a Data Matrix barcode based on the symbol contrast raw score.
    float    symbolContrast;             //The symbol contrast raw score representing the percentage difference between the mean of the reflectance of the darkest 10 percent and lightest 10 percent of the Data Matrix barcode.
    AIMGrade printGrowthGrade;           //The print growth letter grade for the Data Matrix barcode.
    float    printGrowth;                //The print growth raw score for the barcode, which is based on the extent to which dark or light markings appropriately fill their module boundaries.
    AIMGrade axialNonuniformityGrade;    //The axial nonuniformity grade for the Data Matrix barcode.
    float    axialNonuniformity;         //The axial nonuniformity raw score for the barcode, which is based on how much the sampling point spacing differs from one axis to another.
    AIMGrade unusedErrorCorrectionGrade; //The unused error correction letter grade for the Data Matrix barcode.
    float    unusedErrorCorrection;      //The unused error correction raw score for the Data Matrix barcode, which is based on the extent to which regional or spot damage in the Data Matrix barcode has eroded the reading safety margin provided by the error correction.
} AIMGradeReport;

typedef struct DataMatrixSizeOptions_struct {
    unsigned int minSize;        //Specifies the minimum size (in pixels) of the Data Matrix barcode in the image.
    unsigned int maxSize;        //Specifies the maximum size (in pixels) of the Data Matrix barcode in the image.
    unsigned int quietZoneWidth; //Specifies the expected minimum size of the quiet zone, in pixels.
} DataMatrixSizeOptions;

typedef struct DataMatrixDescriptionOptions_struct {
    float                  aspectRatio;        //Specifies the ratio of the width of each Data Matrix barcode cell (in pixels) to the height of the Data Matrix barcode (in pixels).
    unsigned int           rows;               //Specifies the number of rows in the Data Matrix barcode.
    unsigned int           columns;            //Specifies the number of columns in the Data Matrix barcode.
    int                    rectangle;          //Set this element to TRUE to specify that the Data Matrix barcode is rectangular.
    DataMatrixECC          ecc;                //Specifies the ECC used for this Data Matrix barcode.
    DataMatrixPolarity     polarity;           //Specifies the data-to-background contrast for the Data Matrix barcode.
    DataMatrixCellFillMode cellFill;           //Specifies the fill percentage for a cell of the Data Matrix barcode that is in the "ON" state.
    float                  minBorderIntegrity; //Specifies the minimum percentage of the border (locator pattern and timing pattern) the function should expect in the Data Matrix barcode.
    DataMatrixMirrorMode   mirrorMode;         //Specifies if the Data Matrix barcode appears normally in the image or if the barcode appears mirrored in the image.
} DataMatrixDescriptionOptions;

typedef struct DataMatrixSearchOptions_struct {
    DataMatrixRotationMode     rotationMode;             //Specifies the amount of Data Matrix barcode rotation the function should allow for.
    int                        skipLocation;             //If set to TRUE, specifies that the function should assume that the Data Matrix barcode occupies the entire image (or the entire search region).
    unsigned int               edgeThreshold;            //Specifies the minimum contrast a pixel must have in order to be considered part of a matrix cell edge.
    DataMatrixDemodulationMode demodulationMode;         //Specifies the mode the function should use to demodulate (determine which cells are on and which cells are off) the Data Matrix barcode.
    DataMatrixCellSampleSize   cellSampleSize;           //Specifies the sample size, in pixels, the function should take to determine if each cell is on or off.
    DataMatrixCellFilterMode   cellFilterMode;           //Specifies the mode the function uses to determine the pixel value for each cell.
    unsigned int               skewDegreesAllowed;       //Specifies the amount of skew in the Data Matrix barcode the function should allow for.
    unsigned int               maxIterations;            //Specifies the maximum number of iterations before the function stops looking for the Data Matrix barcode.
    unsigned int               initialSearchVectorWidth; //Specifies the number of pixels the function should average together to determine the location of an edge.
} DataMatrixSearchOptions;

typedef struct DataMatrixReport_struct {
    int                        found;                //This element is TRUE if the function located and decoded a Data Matrix barcode and FALSE if the function failed to locate and decode a Data Matrix barcode.
    int                        binary;               //This element is TRUE if the Data Matrix barcode contains binary data and FALSE if the Data Matrix barcode contains text data.
    unsigned char*             data;                 //The data encoded in the Data Matrix barcode.
    unsigned int               dataLength;           //The length of the data array.
    PointFloat                 boundingBox[4];       //An array of four points describing the rectangle surrounding the Data Matrix barcode.
    unsigned int               numErrorsCorrected;   //The number of errors the function corrected when decoding the Data Matrix barcode.
    unsigned int               numErasuresCorrected; //The number of erasures the function corrected when decoding the Data Matrix barcode.
    float                      aspectRatio;          //Specifies the aspect ratio of the Data Matrix barcode in the image, which equals the ratio of the width of a Data Matrix barcode cell (in pixels) to the height of a Data Matrix barcode cell (in pixels).
    unsigned int               rows;                 //The number of rows in the Data Matrix barcode.
    unsigned int               columns;              //The number of columns in the Data Matrix barcode.
    DataMatrixECC              ecc;                  //The Error Correction Code (ECC) used by the Data Matrix barcode.
    DataMatrixPolarity         polarity;             //The polarity of the Data Matrix barcode.
    DataMatrixCellFillMode     cellFill;             //The cell fill percentage of the Data Matrix barcode.
    float                      borderIntegrity;      //The percentage of the Data Matrix barcode border that appears correctly in the image.
    int                        mirrored;             //This element is TRUE if the Data Matrix barcode appears mirrored in the image and FALSE if the Data Matrix barcode appears normally in the image.
    unsigned int               minimumEdgeStrength;  //The strength of the weakest edge the function used to find the coarse location of the Data Matrix barcode in the image.
    DataMatrixDemodulationMode demodulationMode;     //The demodulation mode the function used to locate the Data Matrix barcode.
    DataMatrixCellSampleSize   cellSampleSize;       //The cell sample size the function used to locate the Data Matrix barcode.
    DataMatrixCellFilterMode   cellFilterMode;       //The cell filter mode the function used to locate the Data Matrix barcode.
    unsigned int               iterations;           //The number of iterations the function took in attempting to locate the Data Matrix barcode.
} DataMatrixReport;

typedef struct JPEG2000FileAdvancedOptions_struct {
    WaveletTransformMode waveletMode;                //Determines which wavelet transform to use when writing the file.
    int                  useMultiComponentTransform; //Set this parameter to TRUE to use an additional transform on RGB images.
    unsigned int         maxWaveletTransformLevel;   //Specifies the maximum allowed level of wavelet transform.
    float                quantizationStepSize;       //Specifies the absolute base quantization step size for derived quantization mode.
} JPEG2000FileAdvancedOptions;

typedef struct MatchGeometricPatternAdvancedOptions2_struct {
    int    minFeaturesUsed;            //Specifies the minimum number of features the function uses when matching.
    int    maxFeaturesUsed;            //Specifies the maximum number of features the function uses when matching.
    int    subpixelIterations;         //Specifies the maximum number of incremental improvements used to refine matches with subpixel information.
    double subpixelTolerance;          //Specifies the maximum amount of change, in pixels, between consecutive incremental improvements in the match position before the function stops refining the match position.
    int    initialMatchListLength;     //Specifies the maximum size of the match list.
    float  matchTemplateCurveScore;    //Set this element to TRUE to specify that the function should calculate the match curve to template curve score and return it for each match result.
    int    correlationScore;           //Set this element to TRUE to specify that the function should calculate the correlation score and return it for each match result.
    double minMatchSeparationDistance; //Specifies the minimum separation distance, in pixels, between the origins of two matches that have unique positions.
    double minMatchSeparationAngle;    //Specifies the minimum angular difference, in degrees, between two matches that have unique angles.
    double minMatchSeparationScale;    //Specifies the minimum difference in scale, expressed as a percentage, between two matches that have unique scales.
    double maxMatchOverlap;            //Specifies the maximum amount of overlap, expressed as a percentage, allowed between the bounding rectangles of two unique matches.
    int    coarseResult;               //Specifies whether you want the function to spend less time accurately estimating the location of a match.
    int    smoothContours;             //Set this element to TRUE to specify smoothing be done on the contours of the inspection image before feature extraction.
    int    enableCalibrationSupport;   //Set this element to TRUE to specify the algorithm treat the inspection image as a calibrated image.
} MatchGeometricPatternAdvancedOptions2;

typedef struct InspectionAlignment_struct {
    PointFloat position; //The location of the center of the golden template in the image under inspection.
    float      rotation; //The rotation of the golden template in the image under inspection, in degrees.
    float      scale;    //The percentage of the size of the area under inspection compared to the size of the golden template.
} InspectionAlignment;

typedef struct InspectionOptions_struct {
    RegistrationMethod  registrationMethod;    //Specifies how the function registers the golden template and the target image.
    NormalizationMethod normalizationMethod;   //Specifies how the function normalizes the golden template to the target image.
    int                 edgeThicknessToIgnore; //Specifies desired thickness of edges to be ignored.
    float               brightThreshold;       //Specifies the threshold for areas where the target image is brighter than the golden template.
    float               darkThreshold;         //Specifies the threshold for areas where the target image is darker than the golden template.
    int                 binary;                //Specifies whether the function should return a binary image giving the location of defects, or a grayscale image giving the intensity of defects.
} InspectionOptions;

typedef struct CharReport2_struct {
    const char* character;           //The character value.
    PointFloat  corner[4];           //An array of four points that describes the rectangle that surrounds the character.
    int         lowThreshold;        //The minimum value of the threshold range used for this character.
    int         highThreshold;       //The maximum value of the threshold range used for this character.
    int         classificationScore; //The degree to which the assigned character class represents the object better than the other character classes in the character set.
    int         verificationScore;   //The similarity of the character and the reference character for the character class.
    int         verified;            //This element is TRUE if a reference character was found for the character class and FALSE if a reference character was not found.
} CharReport2;

typedef struct CharInfo2_struct {
    const char*  charValue;       //Retrieves the character value of the corresponding character in the character set.
    const Image* charImage;       //The image you used to train this character.
    const Image* internalImage;   //The internal representation that NI Vision uses to match objects to this character.
    int          isReferenceChar; //This element is TRUE if the character is the reference character for the character class.
} CharInfo2;

typedef struct ReadTextReport2_struct {
    const char*  readString;          //The read string.
    CharReport2* characterReport;     //An array of reports describing the properties of each identified character.
    int          numCharacterReports; //The number of identified characters.
} ReadTextReport2;

typedef struct EllipseFeature_struct {
    PointFloat position;    //The location of the center of the ellipse.
    double     rotation;    //The orientation of the semi-major axis of the ellipse with respect to the horizontal.
    double     minorRadius; //The length of the semi-minor axis of the ellipse.
    double     majorRadius; //The length of the semi-major axis of the ellipse.
} EllipseFeature;

typedef struct CircleFeature_struct {
    PointFloat position; //The location of the center of the circle.
    double     radius;   //The radius of the circle.
} CircleFeature;

typedef struct ConstCurveFeature_struct {
    PointFloat position;   //The center of the circle that this constant curve lies upon.
    double     radius;     //The radius of the circle that this constant curve lies upon.
    double     startAngle; //When traveling along the constant curve from one endpoint to the next in a counterclockwise manner, this is the angular component of the vector originating at the center of the constant curve and pointing towards the first endpoint of the constant curve.
    double     endAngle;   //When traveling along the constant curve from one endpoint to the next in a counterclockwise manner, this is the angular component of the vector originating at the center of the constant curve and pointing towards the second endpoint of the constant curve.
} ConstCurveFeature;

typedef struct RectangleFeature_struct {
    PointFloat position;  //The center of the rectangle.
    PointFloat corner[4]; //The four corners of the rectangle.
    double     rotation;  //The orientation of the rectangle with respect to the horizontal.
    double     width;     //The width of the rectangle.
    double     height;    //The height of the rectangle.
} RectangleFeature;

typedef struct LegFeature_struct {
    PointFloat position;  //The location of the leg feature.
    PointFloat corner[4]; //The four corners of the leg feature.
    double     rotation;  //The orientation of the leg with respect to the horizontal.
    double     width;     //The width of the leg.
    double     height;    //The height of the leg.
} LegFeature;

typedef struct CornerFeature_struct {
    PointFloat position;      //The location of the corner feature.
    double     rotation;      //The angular component of the vector bisecting the corner from position.
    double     enclosedAngle; //The measure of the enclosed angle of the corner.
    int        isVirtual;     
} CornerFeature;

typedef struct LineFeature_struct {
    PointFloat startPoint; //The starting point of the line.
    PointFloat endPoint;   //The ending point of the line.
    double     length;     //The length of the line measured in pixels from the start point to the end point.
    double     rotation;   //The orientation of the line with respect to the horizontal.
} LineFeature;

typedef struct ParallelLinePairFeature_struct {
    PointFloat firstStartPoint;  //The starting point of the first line of the pair.
    PointFloat firstEndPoint;    //The ending point of the first line of the pair.
    PointFloat secondStartPoint; //The starting point of the second line of the pair.
    PointFloat secondEndPoint;   //The ending point of the second line of the pair.
    double     rotation;         //The orientation of the feature with respect to the horizontal.
    double     distance;         //The distance from the first line to the second line.
} ParallelLinePairFeature;

typedef struct PairOfParallelLinePairsFeature_struct {
    ParallelLinePairFeature firstParallelLinePair;  //The first parallel line pair.
    ParallelLinePairFeature secondParallelLinePair; //The second parallel line pair.
    double                  rotation;               //The orientation of the feature with respect to the horizontal.
    double                  distance;               //The distance from the midline of the first parallel line pair to the midline of the second parallel line pair.
} PairOfParallelLinePairsFeature;

typedef union GeometricFeature_union {
    CircleFeature*                  circle;                  //A pointer to a CircleFeature.
    EllipseFeature*                 ellipse;                 //A pointer to an EllipseFeature.
    ConstCurveFeature*              constCurve;              //A pointer to a ConstCurveFeature.
    RectangleFeature*               rectangle;               //A pointer to a RectangleFeature.
    LegFeature*                     leg;                     //A pointer to a LegFeature.
    CornerFeature*                  corner;                  //A pointer to a CornerFeature.
    ParallelLinePairFeature*        parallelLinePair;        //A pointer to a ParallelLinePairFeature.
    PairOfParallelLinePairsFeature* pairOfParallelLinePairs; //A pointer to a PairOfParallelLinePairsFeature.
    LineFeature*                    line;                    //A pointer to a LineFeature.
    ClosedCurveFeature*             closedCurve;             //A pointer to a ClosedCurveFeature.
} GeometricFeature;

typedef struct FeatureData_struct {
    FeatureType      type;             //An enumeration representing the type of the feature.
    PointFloat*      contourPoints;    //A set of points describing the contour of the feature.
    int              numContourPoints; //The number of points in the contourPoints array.
    GeometricFeature feature;          //The feature data specific to this type of feature.
} FeatureData;

typedef struct GeometricPatternMatch2_struct {
    PointFloat   position;                //The location of the origin of the template in the match.
    float        rotation;                //The rotation of the match relative to the template image, in degrees.
    float        scale;                   //The size of the match relative to the size of the template image, expressed as a percentage.
    float        score;                   //The accuracy of the match.
    PointFloat   corner[4];               //An array of four points describing the rectangle surrounding the template image.
    int          inverse;                 //This element is TRUE if the match is an inverse of the template image.
    float        occlusion;               //The percentage of the match that is occluded.
    float        templateMatchCurveScore; //The accuracy of the match obtained by comparing the template curves to the curves in the match region.
    float        matchTemplateCurveScore; //The accuracy of the match obtained by comparing the curves in the match region to the template curves.
    float        correlationScore;        //The accuracy of the match obtained by comparing the template image to the match region using a correlation metric that compares the two regions as a function of their pixel values.
    String255    label;                   //The label corresponding to this match when the match is returned by imaqMatchMultipleGeometricPatterns().
    FeatureData* featureData;             //The features used in this match.
    int          numFeatureData;          //The size of the featureData array.
    PointFloat   calibratedPosition;      //The location of the origin of the template in the match.
    float        calibratedRotation;      //The rotation of the match relative to the template image, in degrees.
    PointFloat   calibratedCorner[4];     //An array of four points describing the rectangle surrounding the template image.
} GeometricPatternMatch2;

typedef struct ClosedCurveFeature_struct {
    PointFloat position;  //The center of the closed curve feature.
    double     arcLength; //The arc length of the closed curve feature.
} ClosedCurveFeature;

typedef struct LineMatch_struct {
    PointFloat startPoint; //The starting point of the matched line.
    PointFloat endPoint;   //The ending point of the matched line.
    double     length;     //The length of the line measured in pixels from the start point to the end point.
    double     rotation;   //The orientation of the matched line.
    double     score;      //The score of the matched line.
} LineMatch;

typedef struct LineDescriptor_struct {
    double minLength; //Specifies the minimum length of a line the function will return.
    double maxLength; //Specifies the maximum length of a line the function will return.
} LineDescriptor;

typedef struct RectangleDescriptor_struct {
    double minWidth;  //Specifies the minimum width of a rectangle the algorithm will return.
    double maxWidth;  //Specifies the maximum width of a rectangle the algorithm will return.
    double minHeight; //Specifies the minimum height of a rectangle the algorithm will return.
    double maxHeight; //Specifies the maximum height of a rectangle the algorithm will return.
} RectangleDescriptor;

typedef struct RectangleMatch_struct {
    PointFloat corner[4]; //The corners of the matched rectangle.
    double     rotation;  //The orientation of the matched rectangle.
    double     width;     //The width of the matched rectangle.
    double     height;    //The height of the matched rectangle.
    double     score;     //The score of the matched rectangle.
} RectangleMatch;

typedef struct EllipseDescriptor_struct {
    double minMajorRadius; //Specifies the minimum length of the semi-major axis of an ellipse the function will return.
    double maxMajorRadius; //Specifies the maximum length of the semi-major axis of an ellipse the function will return.
    double minMinorRadius; //Specifies the minimum length of the semi-minor axis of an ellipse the function will return.
    double maxMinorRadius; //Specifies the maximum length of the semi-minor axis of an ellipse the function will return.
} EllipseDescriptor;

typedef struct EllipseMatch_struct {
    PointFloat position;    //The location of the center of the matched ellipse.
    double     rotation;    //The orientation of the matched ellipse.
    double     majorRadius; //The length of the semi-major axis of the matched ellipse.
    double     minorRadius; //The length of the semi-minor axis of the matched ellipse.
    double     score;       //The score of the matched ellipse.
} EllipseMatch;

typedef struct CircleMatch_struct {
    PointFloat position; //The location of the center of the matched circle.
    double     radius;   //The radius of the matched circle.
    double     score;    //The score of the matched circle.
} CircleMatch;

typedef struct CircleDescriptor_struct {
    double minRadius; //Specifies the minimum radius of a circle the function will return.
    double maxRadius; //Specifies the maximum radius of a circle the function will return.
} CircleDescriptor;

typedef struct ShapeDetectionOptions_struct {
    unsigned int mode;           //Specifies the method used when looking for the shape in the image.
    RangeFloat*  angleRanges;    //An array of angle ranges, in degrees, where each range specifies how much you expect the shape to be rotated in the image.
    int          numAngleRanges; //The size of the orientationRanges array.
    RangeFloat   scaleRange;     //A range that specifies the sizes of the shapes you expect to be in the image, expressed as a ratio percentage representing the size of the pattern in the image divided by size of the original pattern multiplied by 100.
    double       minMatchScore;  
} ShapeDetectionOptions;

typedef struct Curve_struct {
    PointFloat*  points;              //The points on the curve.
    unsigned int numPoints;           //The number of points in the curve.
    int          closed;              //This element is TRUE if the curve is closed and FALSE if the curve is open.
    double       curveLength;         //The length of the curve.
    double       minEdgeStrength;     //The lowest edge strength detected on the curve.
    double       maxEdgeStrength;     //The highest edge strength detected on the curve.
    double       averageEdgeStrength; //The average of all edge strengths detected on the curve.
} Curve;

typedef struct CurveOptions_struct {
    ExtractionMode extractionMode;   //Specifies the method the function uses to identify curves in the image.
    int            threshold;        //Specifies the minimum contrast a seed point must have in order to begin a curve.
    EdgeFilterSize filterSize;       //Specifies the width of the edge filter the function uses to identify curves in the image.
    int            minLength;        //Specifies the length, in pixels, of the smallest curve the function will extract.
    int            rowStepSize;      //Specifies the distance, in the y direction, between lines the function inspects for curve seed points.
    int            columnStepSize;   //Specifies the distance, in the x direction, between columns the function inspects for curve seed points.
    int            maxEndPointGap;   //Specifies the maximum gap, in pixels, between the endpoints of a curve that the function identifies as a closed curve.
    int            onlyClosed;       //Set this element to TRUE to specify that the function should only identify closed curves in the image.
    int            subpixelAccuracy; //Set this element to TRUE to specify that the function identifies the location of curves with subpixel accuracy by interpolating between points to find the crossing of threshold.
} CurveOptions;

typedef struct Barcode2DInfo_struct {
    Barcode2DType  type;                 //The type of the 2D barcode.
    int            binary;               //This element is TRUE if the 2D barcode contains binary data and FALSE if the 2D barcode contains text data.
    unsigned char* data;                 //The data encoded in the 2D barcode.
    unsigned int   dataLength;           //The length of the data array.
    PointFloat     boundingBox[4];       //An array of four points describing the rectangle surrounding the 2D barcode.
    unsigned int   numErrorsCorrected;   //The number of errors the function corrected when decoding the 2D barcode.
    unsigned int   numErasuresCorrected; //The number of erasures the function corrected when decoding the 2D barcode.
    unsigned int   rows;                 //The number of rows in the 2D barcode.
    unsigned int   columns;              //The number of columns in the 2D barcode.
} Barcode2DInfo;

typedef struct DataMatrixOptions_struct {
    Barcode2DSearchMode searchMode;   //Specifies the mode the function uses to search for barcodes.
    Barcode2DContrast   contrast;     //Specifies the contrast of the barcodes that the function searches for.
    Barcode2DCellShape  cellShape;    //Specifies the shape of the barcode data cells, which affects how the function decodes the barcode.
    Barcode2DShape      barcodeShape; //Specifies the shape of the barcodes that the function searches for.
    DataMatrixSubtype   subtype;      //Specifies the Data Matrix subtypes of the barcodes that the function searches for.
} DataMatrixOptions;

typedef struct ClassifierAccuracyReport_struct {
    int     size;                       //The size of the arrays in this structure.
    float   accuracy;                   //The overall accuracy of the classifier, from 0 to 1000.
    char**  classNames;                 //The names of the classes of this classifier.
    double* classAccuracy;              //An array of size elements that contains accuracy information for each class.
    double* classPredictiveValue;       //An array containing size elements that contains the predictive values of each class.
    int**   classificationDistribution; //A two-dimensional array containing information about how the classifier classifies its samples.
} ClassifierAccuracyReport;

typedef struct NearestNeighborClassResult_struct {
    char* className;         //The name of the class.
    float standardDeviation; //The standard deviation of the members of this class.
    int   count;             //The number of samples in this class.
} NearestNeighborClassResult;

typedef struct NearestNeighborTrainingReport_struct {
    float**                     classDistancesTable; //The confidence in the training.
    NearestNeighborClassResult* allScores;           //All classes and their scores.
    int                         allScoresSize;       //The number of entries in allScores.
} NearestNeighborTrainingReport;

typedef struct ParticleClassifierPreprocessingOptions_struct {
    int             manualThreshold;      //Set this element to TRUE to specify the threshold range manually.
    RangeFloat      manualThresholdRange; //If a manual threshold is being done, the range of pixels to keep.
    ThresholdMethod autoThresholdMethod;  //If an automatic threshold is being done, the method used to calculate the threshold range.
    RangeFloat      limits;               //The limits on the automatic threshold range.
    ParticleType    particleType;         //Specifies what kind of particles to look for.
    int             rejectBorder;         //Set this element to TRUE to reject border particles.
    int             numErosions;          //The number of erosions to perform.
} ParticleClassifierPreprocessingOptions;

typedef struct ClassifierSampleInfo_struct {
    char*   className;         //The name of the class this sample is in.
    double* featureVector;     //The feature vector of this sample, or NULL if this is not a custom classifier session.
    int     featureVectorSize; //The number of elements in the feature vector.
    Image*  thumbnail;         //A thumbnail image of this sample, or NULL if no image was specified.
} ClassifierSampleInfo;

typedef struct ClassScore_struct {
    char* className; //The name of the class.
    float distance;  //The distance from the item to this class.
} ClassScore;

typedef struct ClassifierReport_struct {
    char*       bestClassName;       //The name of the best class for the sample.
    float       classificationScore; //The similarity of the sample and the two closest classes in the classifier.
    float       identificationScore; //The similarity of the sample and the assigned class.
    ClassScore* allScores;           //All classes and their scores.
    int         allScoresSize;       //The number of entries in allScores.
} ClassifierReport;

typedef struct NearestNeighborOptions_struct {
    NearestNeighborMethod method; //The method to use.
    NearestNeighborMetric metric; //The metric to use.
    int                   k;      //The value of k, if the IMAQ_K_NEAREST_NEIGHBOR method is used.
} NearestNeighborOptions;

typedef struct ParticleClassifierOptions_struct {
    float scaleDependence;  //The relative importance of scale when classifying particles.
    float mirrorDependence; //The relative importance of mirror symmetry when classifying particles.
} ParticleClassifierOptions;

typedef struct RGBU64Value_struct {
    unsigned short B;     //The blue value of the color.
    unsigned short G;     //The green value of the color.
    unsigned short R;     //The red value of the color.
    unsigned short alpha; //The alpha value of the color, which represents extra information about a color image, such as gamma correction.
} RGBU64Value;

typedef struct GeometricPatternMatch_struct {
    PointFloat position;                //The location of the origin of the template in the match.
    float      rotation;                //The rotation of the match relative to the template image, in degrees.
    float      scale;                   //The size of the match relative to the size of the template image, expressed as a percentage.
    float      score;                   //The accuracy of the match.
    PointFloat corner[4];               //An array of four points describing the rectangle surrounding the template image.
    int        inverse;                 //This element is TRUE if the match is an inverse of the template image.
    float      occlusion;               //The percentage of the match that is occluded.
    float      templateMatchCurveScore; //The accuracy of the match obtained by comparing the template curves to the curves in the match region.
    float      matchTemplateCurveScore; //The accuracy of the match obtained by comparing the curves in the match region to the template curves.
    float      correlationScore;        //The accuracy of the match obtained by comparing the template image to the match region using a correlation metric that compares the two regions as a function of their pixel values.
} GeometricPatternMatch;

typedef struct MatchGeometricPatternAdvancedOptions_struct {
    int    minFeaturesUsed;            //Specifies the minimum number of features the function uses when matching.
    int    maxFeaturesUsed;            //Specifies the maximum number of features the function uses when matching.
    int    subpixelIterations;         //Specifies the maximum number of incremental improvements used to refine matches with subpixel information.
    double subpixelTolerance;          //Specifies the maximum amount of change, in pixels, between consecutive incremental improvements in the match position before the function stops refining the match position.
    int    initialMatchListLength;     //Specifies the maximum size of the match list.
    int    matchTemplateCurveScore;    //Set this element to TRUE to specify that the function should calculate the match curve to template curve score and return it for each match result.
    int    correlationScore;           //Set this element to TRUE to specify that the function should calculate the correlation score and return it for each match result.
    double minMatchSeparationDistance; //Specifies the minimum separation distance, in pixels, between the origins of two matches that have unique positions.
    double minMatchSeparationAngle;    //Specifies the minimum angular difference, in degrees, between two matches that have unique angles.
    double minMatchSeparationScale;    //Specifies the minimum difference in scale, expressed as a percentage, between two matches that have unique scales.
    double maxMatchOverlap;            //Specifies the maximum amount of overlap, expressed as a percentage, allowed between the bounding rectangles of two unique matches.
    int    coarseResult;               //Specifies whether you want the function to spend less time accurately estimating the location of a match.
} MatchGeometricPatternAdvancedOptions;

typedef struct MatchGeometricPatternOptions_struct {
    unsigned int mode;                //Specifies the method imaqMatchGeometricPattern() uses when looking for the pattern in the image.
    int          subpixelAccuracy;    //Set this element to TRUE to specify that the function should calculate match locations with subpixel accuracy.
    RangeFloat*  angleRanges;         //An array of angle ranges, in degrees, where each range specifies how much you expect the template to be rotated in the image.
    int          numAngleRanges;      //Number of angle ranges in the angleRanges array.
    RangeFloat   scaleRange;          //A range that specifies the sizes of the pattern you expect to be in the image, expressed as a ratio percentage representing the size of the pattern in the image divided by size of the original pattern multiplied by 100.
    RangeFloat   occlusionRange;      //A range that specifies the percentage of the pattern you expect to be occluded in the image.
    int          numMatchesRequested; //Number of valid matches expected.
    float        minMatchScore;       //The minimum score a match can have for the function to consider the match valid.
} MatchGeometricPatternOptions;

typedef struct LearnGeometricPatternAdvancedOptions_struct {
    int    minRectLength;            //Specifies the minimum length for each side of a rectangular feature.
    double minRectAspectRatio;       //Specifies the minimum aspect ratio of a rectangular feature.
    int    minRadius;                //Specifies the minimum radius for a circular feature.
    int    minLineLength;            //Specifies the minimum length for a linear feature.
    double minFeatureStrength;       //Specifies the minimum strength for a feature.
    int    maxFeaturesUsed;          //Specifies the maximum number of features the function uses when learning.
    int    maxPixelDistanceFromLine; //Specifies the maximum number of pixels between an edge pixel and a linear feature for the function to consider that edge pixel as part of the linear feature.
} LearnGeometricPatternAdvancedOptions;

typedef struct FitEllipseOptions_struct {
    int    rejectOutliers; //Whether to use every given point or only a subset of the points to fit the ellipse.
    double minScore;       //Specifies the required quality of the fitted ellipse.
    double pixelRadius;    //The acceptable distance, in pixels, that a point determined to belong to the ellipse can be from the circumference of the ellipse.
    int    maxIterations;  //Specifies the number of refinement iterations you allow the function to perform on the initial subset of points.
} FitEllipseOptions;

typedef struct FitCircleOptions_struct {
    int    rejectOutliers; //Whether to use every given point or only a subset of the points to fit the circle.
    double minScore;       //Specifies the required quality of the fitted circle.
    double pixelRadius;    //The acceptable distance, in pixels, that a point determined to belong to the circle can be from the circumference of the circle.
    int    maxIterations;  //Specifies the number of refinement iterations you allow the function to perform on the initial subset of points.
} FitCircleOptions;

typedef struct ConstructROIOptions2_struct {
    int          windowNumber; //The window number of the image window.
    const char*  windowTitle;  //Specifies the message string that the function displays in the title bar of the window.
    PaletteType  type;         //The palette type to use.
    RGBValue*    palette;      //If type is IMAQ_PALETTE_USER, this array is the palette of colors to use with the window.
    int          numColors;    //If type is IMAQ_PALETTE_USER, this element is the number of colors in the palette array.
    unsigned int maxContours;  //The maximum number of contours the user will be able to select.
} ConstructROIOptions2;

typedef struct HSLValue_struct {
    unsigned char L;     //The color luminance.
    unsigned char S;     //The color saturation.
    unsigned char H;     //The color hue.
    unsigned char alpha; //The alpha value of the color, which represents extra information about a color image, such as gamma correction.
} HSLValue;

typedef struct HSVValue_struct {
    unsigned char V;     //The color value.
    unsigned char S;     //The color saturation.
    unsigned char H;     //The color hue.
    unsigned char alpha; //The alpha value of the color, which represents extra information about a color image, such as gamma correction.
} HSVValue;

typedef struct HSIValue_struct {
    unsigned char I;     //The color intensity.
    unsigned char S;     //The color saturation.
    unsigned char H;     //The color hue.
    unsigned char alpha; //The alpha value of the color, which represents extra information about a color image, such as gamma correction.
} HSIValue;

typedef struct CIELabValue_struct {
    double        b;     //The yellow/blue information of the color.
    double        a;     //The red/green information of the color.
    double        L;     //The color lightness.
    unsigned char alpha; //The alpha value of the color, which represents extra information about a color image, such as gamma correction.
} CIELabValue;

typedef struct CIEXYZValue_struct {
    double        Z;     //The Z color information.
    double        Y;     //The color luminance.
    double        X;     //The X color information.
    unsigned char alpha; //The alpha value of the color, which represents extra information about a color image, such as gamma correction.
} CIEXYZValue;

typedef union Color2_union {
    RGBValue    rgb;      //The information needed to describe a color in the RGB (Red, Green, and Blue) color space.
    HSLValue    hsl;      //The information needed to describe a color in the HSL (Hue, Saturation, and Luminance) color space.
    HSVValue    hsv;      //The information needed to describe a color in the HSI (Hue, Saturation, and Value) color space.
    HSIValue    hsi;      //The information needed to describe a color in the HSI (Hue, Saturation, and Intensity) color space.
    CIELabValue cieLab;   //The information needed to describe a color in the CIE L*a*b* (L, a, b) color space.
    CIEXYZValue cieXYZ;   //The information needed to describe a color in the CIE XYZ (X, Y, Z) color space.
    int         rawValue; //The integer value for the data in the color union.
} Color2;

typedef struct BestEllipse2_struct {
    PointFloat center;         //The coordinate location of the center of the ellipse.
    PointFloat majorAxisStart; //The coordinate location of the start of the major axis of the ellipse.
    PointFloat majorAxisEnd;   //The coordinate location of the end of the major axis of the ellipse.
    PointFloat minorAxisStart; //The coordinate location of the start of the minor axis of the ellipse.
    PointFloat minorAxisEnd;   //The coordinate location of the end of the minor axis of the ellipse.
    double     area;           //The area of the ellipse.
    double     perimeter;      //The length of the perimeter of the ellipse.
    double     error;          //Represents the least square error of the fitted ellipse to the entire set of points.
    int        valid;          //This element is TRUE if the function achieved the minimum score within the number of allowed refinement iterations and FALSE if the function did not achieve the minimum score.
    int*       pointsUsed;     //An array of the indexes for the points array indicating which points the function used to fit the ellipse.
    int        numPointsUsed;  //The number of points the function used to fit the ellipse.
} BestEllipse2;

typedef struct LearnPatternAdvancedOptions_struct {
    LearnPatternAdvancedShiftOptions*    shiftOptions;    //Use this element to control the behavior of imaqLearnPattern2() during the shift-invariant learning phase.
    LearnPatternAdvancedRotationOptions* rotationOptions; //Use this element to control the behavior of imaqLearnPattern2()during the rotation-invariant learning phase.
} LearnPatternAdvancedOptions;

typedef struct AVIInfo_struct {
    unsigned int width;           //The width of each frame.
    unsigned int height;          //The height of each frame.
    ImageType    imageType;       //The type of images this AVI contains.
    unsigned int numFrames;       //The number of frames in the AVI.
    unsigned int framesPerSecond; //The number of frames per second this AVI should be shown at.
    char*        filterName;      //The name of the compression filter used to create this AVI.
    int          hasData;         //Specifies whether this AVI has data attached to each frame or not.
    unsigned int maxDataSize;     //If this AVI has data, the maximum size of the data in each frame.
} AVIInfo;

typedef struct LearnPatternAdvancedShiftOptions_struct {
    int    initialStepSize;          //The largest number of image pixels to shift the sample across the inspection image during the initial phase of shift-invariant matching.
    int    initialSampleSize;        //Specifies the number of template pixels that you want to include in a sample for the initial phase of shift-invariant matching.
    double initialSampleSizeFactor;  //Specifies the size of the sample for the initial phase of shift-invariant matching as a percent of the template size, in pixels.
    int    finalSampleSize;          //Specifies the number of template pixels you want to add to initialSampleSize for the final phase of shift-invariant matching.
    double finalSampleSizeFactor;    //Specifies the size of the sample for the final phase of shift-invariant matching as a percent of the edge points in the template, in pixels.
    int    subpixelSampleSize;       //Specifies the number of template pixels that you want to include in a sample for the subpixel phase of shift-invariant matching.
    double subpixelSampleSizeFactor; //Specifies the size of the sample for the subpixel phase of shift-invariant matching as a percent of the template size, in pixels.
} LearnPatternAdvancedShiftOptions;

typedef struct LearnPatternAdvancedRotationOptions_struct {
    SearchStrategy searchStrategySupport;    //Specifies the aggressiveness of the rotation search strategy available during the matching phase.
    int            initialStepSize;          //The largest number of image pixels to shift the sample across the inspection image during the initial phase of matching.
    int            initialSampleSize;        //Specifies the number of template pixels that you want to include in a sample for the initial phase of rotation-invariant matching.
    double         initialSampleSizeFactor;  //Specifies the size of the sample for the initial phase of rotation-invariant matching as a percent of the template size, in pixels.
    int            initialAngularAccuracy;   //Sets the angle accuracy, in degrees, to use during the initial phase of rotation-invariant matching.
    int            finalSampleSize;          //Specifies the number of template pixels you want to add to initialSampleSize for the final phase of rotation-invariant matching.
    double         finalSampleSizeFactor;    //Specifies the size of the sample for the final phase of rotation-invariant matching as a percent of the edge points in the template, in pixels.
    int            finalAngularAccuracy;     //Sets the angle accuracy, in degrees, to use during the final phase of the rotation-invariant matching.
    int            subpixelSampleSize;       //Specifies the number of template pixels that you want to include in a sample for the subpixel phase of rotation-invariant matching.
    double         subpixelSampleSizeFactor; //Specifies the size of the sample for the subpixel phase of rotation-invariant matching as a percent of the template size, in pixels.
} LearnPatternAdvancedRotationOptions;

typedef struct MatchPatternAdvancedOptions_struct {
    int            subpixelIterations;          //Defines the maximum number of incremental improvements used to refine matching using subpixel information.
    double         subpixelTolerance;           //Defines the maximum amount of change, in pixels, between consecutive incremental improvements in the match position that you want to trigger the end of the refinement process.
    int            initialMatchListLength;      //Specifies the maximum size of the match list.
    int            matchListReductionFactor;    //Specifies the reduction of the match list as matches are refined.
    int            initialStepSize;             //Specifies the number of pixels to shift the sample across the inspection image during the initial phase of shift-invariant matching.
    SearchStrategy searchStrategy;              //Specifies the aggressiveness of the rotation search strategy.
    int            intermediateAngularAccuracy; //Specifies the accuracy to use during the intermediate phase of rotation-invariant matching.
} MatchPatternAdvancedOptions;

typedef struct ParticleFilterCriteria2_struct {
    MeasurementType parameter;  //The morphological measurement that the function uses for filtering.
    float           lower;      //The lower bound of the criteria range.
    float           upper;      //The upper bound of the criteria range.
    int             calibrated; //Set this element to TRUE to take calibrated measurements.
    int             exclude;    //Set this element to TRUE to indicate that a match occurs when the measurement is outside the criteria range.
} ParticleFilterCriteria2;

typedef struct BestCircle2_struct {
    PointFloat center;        //The coordinate location of the center of the circle.
    double     radius;        //The radius of the circle.
    double     area;          //The area of the circle.
    double     perimeter;     //The length of the perimeter of the circle.
    double     error;         //Represents the least square error of the fitted circle to the entire set of points.
    int        valid;         //This element is TRUE if the function achieved the minimum score within the number of allowed refinement iterations and FALSE if the function did not achieve the minimum score.
    int*       pointsUsed;    //An array of the indexes for the points array indicating which points the function used to fit the circle.
    int        numPointsUsed; //The number of points the function used to fit the circle.
} BestCircle2;

typedef struct OCRSpacingOptions_struct {
    int minCharSpacing;              //The minimum number of pixels that must be between two characters for NI Vision to train or read the characters separately.
    int minCharSize;                 //The minimum number of pixels required for an object to be a potentially identifiable character.
    int maxCharSize;                 //The maximum number of pixels required for an object to be a potentially identifiable character.
    int maxHorizontalElementSpacing; //The maximum horizontal spacing, in pixels, allowed between character elements to train or read the character elements as a single character.
    int maxVerticalElementSpacing;   //The maximum vertical element spacing in pixels.
    int minBoundingRectWidth;        //The minimum possible width, in pixels, for a character bounding rectangle.
    int maxBoundingRectWidth;        //The maximum possible width, in pixels, for a character bounding rectangle.
    int minBoundingRectHeight;       //The minimum possible height, in pixels, for a character bounding rectangle.
    int maxBoundingRectHeight;       //The maximum possible height, in pixels, for a character bounding rectangle.
    int autoSplit;                   //Set this element to TRUE to automatically adjust the location of the character bounding rectangle when characters overlap vertically.
} OCRSpacingOptions;

typedef struct OCRProcessingOptions_struct {
    ThresholdMode mode;                       //The thresholding mode.
    int           lowThreshold;               //The low threshold value when you set mode to IMAQ_FIXED_RANGE.
    int           highThreshold;              //The high threshold value when you set mode to IMAQ_FIXED_RANGE.
    int           blockCount;                 //The number of blocks for threshold calculation algorithms that require blocks.
    int           fastThreshold;              //Set this element to TRUE to use a faster, less accurate threshold calculation algorithm.
    int           biModalCalculation;         //Set this element to TRUE to calculate both the low and high threshold values when using the fast thresholding method.
    int           darkCharacters;             //Set this element to TRUE to read or train dark characters on a light background.
    int           removeParticlesTouchingROI; //Set this element to TRUE to remove the particles touching the ROI.
    int           erosionCount;               //The number of erosions to perform.
} OCRProcessingOptions;

typedef struct ReadTextOptions_struct {
    String255      validChars[255];  //An array of strings that specifies the valid characters.
    int            numValidChars;    //The number of strings in the validChars array that you have initialized.
    char           substitutionChar; //The character to substitute for objects that the function cannot match with any of the trained characters.
    ReadStrategy   readStrategy;     //The read strategy, which determines how closely the function analyzes images in the reading process to match objects with trained characters.
    int            acceptanceLevel;  //The minimum acceptance level at which an object is considered a trained character.
    int            aspectRatio;      //The maximum aspect ratio variance percentage for valid characters.
    ReadResolution readResolution;   //The read resolution, which determines how much of the trained character data the function uses to match objects to trained characters.
} ReadTextOptions;

typedef struct CharInfo_struct {
    const char*  charValue;     //Retrieves the character value of the corresponding character in the character set.
    const Image* charImage;     //The image you used to train this character.
    const Image* internalImage; //The internal representation that NI Vision uses to match objects to this character.
} CharInfo;

#if !defined(USERINT_HEADER) && !defined(_CVI_RECT_DEFINED)
typedef struct Rect_struct {
    int top;    //Location of the top edge of the rectangle.
    int left;   //Location of the left edge of the rectangle.
    int height; //Height of the rectangle.
    int width;  //Width of the rectangle.
} Rect;
#define _CVI_RECT_DEFINED
#endif

typedef struct CharReport_struct {
    const char* character;     //The character value.
    PointFloat  corner[4];     //An array of four points that describes the rectangle that surrounds the character.
    int         reserved;      //This element is reserved.
    int         lowThreshold;  //The minimum value of the threshold range used for this character.
    int         highThreshold; //The maximum value of the threshold range used for this character.
} CharReport;

typedef struct ReadTextReport_struct {
    const char*       readString;          //The read string.
    const CharReport* characterReport;     //An array of reports describing the properties of each identified character.
    int               numCharacterReports; //The number of identified characters.
} ReadTextReport;

#if !defined(USERINT_HEADER) && !defined(_CVI_POINT_DEFINED)
typedef struct Point_struct {
    int x; //The x-coordinate of the point.
    int y; //The y-coordinate of the point.
} Point;
#define _CVI_POINT_DEFINED
#endif

typedef struct Annulus_struct {
    Point  center;      //The coordinate location of the center of the annulus.
    int    innerRadius; //The internal radius of the annulus.
    int    outerRadius; //The external radius of the annulus.
    double startAngle;  //The start angle, in degrees, of the annulus.
    double endAngle;    //The end angle, in degrees, of the annulus.
} Annulus;

typedef struct EdgeLocationReport_struct {
    PointFloat* edges;    //The coordinate location of all edges detected by the search line.
    int         numEdges; //The number of points in the edges array.
} EdgeLocationReport;

typedef struct EdgeOptions_struct {
    unsigned            threshold;         //Specifies the threshold value for the contrast of the edge.
    unsigned            width;             //The number of pixels that the function averages to find the contrast at either side of the edge.
    unsigned            steepness;         //The span, in pixels, of the slope of the edge projected along the path specified by the input points.
    InterpolationMethod subpixelType;      //The method for interpolating.
    unsigned            subpixelDivisions; //The number of samples the function obtains from a pixel.
} EdgeOptions;

typedef struct EdgeReport_struct {
    float        location;   //The location of the edge from the first point in the points array.
    float        contrast;   //The contrast at the edge.
    PolarityType polarity;   //The polarity of the edge.
    float        reserved;   //This element is reserved.
    PointFloat   coordinate; //The coordinates of the edge.
} EdgeReport;

typedef struct ExtremeReport_struct {
    double location;         //The locations of the extreme.
    double amplitude;        //The amplitude of the extreme.
    double secondDerivative; //The second derivative of the extreme.
} ExtremeReport;

typedef struct FitLineOptions_struct {
    float minScore;       //Specifies the required quality of the fitted line.
    float pixelRadius;    //Specifies the neighborhood pixel relationship for the initial subset of points being used.
    int   numRefinements; //Specifies the number of refinement iterations you allow the function to perform on the initial subset of points.
} FitLineOptions;

typedef struct DisplayMapping_struct {
    MappingMethod method;       //Describes the method for converting 16-bit pixels to 8-bit pixels.
    int           minimumValue; //When method is IMAQ_RANGE, minimumValue represents the value that is mapped to 0.
    int           maximumValue; //When method is IMAQ_RANGE, maximumValue represents the value that is mapped to 255.
    int           shiftCount;   //When method is IMAQ_DOWNSHIFT, shiftCount represents the number of bits the function right-shifts the 16-bit pixel values.
} DisplayMapping;

typedef struct DetectExtremesOptions_struct {
    double threshold; //Defines which extremes are too small.
    int    width;     //Specifies the number of consecutive data points the function uses in the quadratic least-squares fit.
} DetectExtremesOptions;

typedef struct ImageInfo_struct {
    CalibrationUnit imageUnit;     //If you set calibration information with imaqSetSimpleCalibrationInfo(), imageUnit is the calibration unit.
    float           stepX;         //If you set calibration information with imaqSetCalibrationInfo(), stepX is the distance in the calibration unit between two pixels in the x direction.
    float           stepY;         //If you set calibration information with imaqSetCalibrationInfo(), stepY is the distance in the calibration unit between two pixels in the y direction.
    ImageType       imageType;     //The type of the image.
    int             xRes;          //The number of columns in the image.
    int             yRes;          //The number of rows in the image.
    int             xOffset;       //If you set mask offset information with imaqSetMaskOffset(), xOffset is the offset of the mask origin in the x direction.
    int             yOffset;       //If you set mask offset information with imaqSetMaskOffset(), yOffset is the offset of the mask origin in the y direction.
    int             border;        //The number of border pixels around the image.
    int             pixelsPerLine; //The number of pixels stored for each line of the image.
    void*           reserved0;     //This element is reserved.
    void*           reserved1;     //This element is reserved.
    void*           imageStart;    //A pointer to pixel (0,0).
} ImageInfo;

typedef struct LCDOptions_struct {
    int   litSegments;  //Set this parameter to TRUE if the segments are brighter than the background.
    float threshold;    //Determines whether a segment is ON or OFF.
    int   sign;         //Indicates whether the function must read the sign of the indicator.
    int   decimalPoint; //Determines whether to look for a decimal separator after each digit.
} LCDOptions;

typedef struct LCDReport_struct {
    const char*  text;          //A string of the characters of the LCD.
    LCDSegments* segmentInfo;   //An array of LCDSegment structures describing which segments of each digit are on.
    int          numCharacters; //The number of characters that the function reads.
    int          reserved;      //This element is reserved.
} LCDReport;

typedef struct LCDSegments_struct {
    unsigned a:1;         //True if the a segment is on.
    unsigned b:1;         //True if the b segment is on.
    unsigned c:1;         //True if the c segment is on.
    unsigned d:1;         //True if the d segment is on.
    unsigned e:1;         //True if the e segment is on.
    unsigned f:1;         //True if the f segment is on.
    unsigned g:1;         //True if the g segment is on.
    unsigned reserved:25; //This element is reserved.
} LCDSegments;

typedef struct LearnCalibrationOptions_struct {
    CalibrationMode mode;       //Specifies the type of algorithm you want to use to reduce distortion in your image.
    ScalingMethod   method;     //Defines the scaling method correction functions use to correct the image.
    CalibrationROI  roi;        //Specifies the ROI correction functions use when correcting an image.
    int             learnMap;   //Set this element to TRUE if you want the function to calculate and store an error map during the learning process.
    int             learnTable; //Set this element to TRUE if you want the function to calculate and store the correction table.
} LearnCalibrationOptions;

typedef struct LearnColorPatternOptions_struct {
    LearningMode      learnMode;         //Specifies the invariance mode the function uses when learning the pattern.
    ImageFeatureMode  featureMode;       //Specifies the features the function uses when learning the color pattern.
    int               threshold;         //Specifies the saturation threshold the function uses to distinguish between two colors that have the same hue values.
    ColorIgnoreMode   ignoreMode;        //Specifies whether the function excludes certain colors from the color features of the template image.
    ColorInformation* colorsToIgnore;    //An array of ColorInformation structures providing a set of colors to exclude from the color features of the template image.
    int               numColorsToIgnore; //The number of ColorInformation structures in the colorsToIgnore array.
} LearnColorPatternOptions;

typedef struct Line_struct {
    Point start; //The coordinate location of the start of the line.
    Point end;   //The coordinate location of the end of the line.
} Line;

typedef struct LinearAverages_struct {
    float* columnAverages;      //An array containing the mean pixel value of each column.
    int    columnCount;         //The number of elements in the columnAverages array.
    float* rowAverages;         //An array containing the mean pixel value of each row.
    int    rowCount;            //The number of elements in the rowAverages array.
    float* risingDiagAverages;  //An array containing the mean pixel value of each diagonal running from the lower left to the upper right of the inspected area of the image.
    int    risingDiagCount;     //The number of elements in the risingDiagAverages array.
    float* fallingDiagAverages; //An array containing the mean pixel value of each diagonal running from the upper left to the lower right of the inspected area of the image.
    int    fallingDiagCount;    //The number of elements in the fallingDiagAverages array.
} LinearAverages;

typedef struct LineProfile_struct {
    float* profileData; //An array containing the value of each pixel in the line.
    Rect   boundingBox; //The bounding rectangle of the line.
    float  min;         //The smallest pixel value in the line profile.
    float  max;         //The largest pixel value in the line profile.
    float  mean;        //The mean value of the pixels in the line profile.
    float  stdDev;      //The standard deviation of the line profile.
    int    dataCount;   //The size of the profileData array.
} LineProfile;

typedef struct MatchColorPatternOptions_struct {
    MatchingMode        matchMode;           //Specifies the method to use when looking for the color pattern in the image.
    ImageFeatureMode    featureMode;         //Specifies the features to use when looking for the color pattern in the image.
    int                 minContrast;         //Specifies the minimum contrast expected in the image.
    int                 subpixelAccuracy;    //Set this parameter to TRUE to return areas in the image that match the pattern area with subpixel accuracy.
    RotationAngleRange* angleRanges;         //An array of angle ranges, in degrees, where each range specifies how much you expect the pattern to be rotated in the image.
    int                 numRanges;           //Number of angle ranges in the angleRanges array.
    double              colorWeight;         //Determines the percent contribution of the color score to the final color pattern matching score.
    ColorSensitivity    sensitivity;         //Specifies the sensitivity of the color information in the image.
    SearchStrategy      strategy;            //Specifies how the color features of the image are used during the search phase.
    int                 numMatchesRequested; //Number of valid matches expected.
    float               minMatchScore;       //The minimum score a match can have for the function to consider the match valid.
} MatchColorPatternOptions;

typedef struct HistogramReport_struct {
    int*  histogram;      //An array describing the number of pixels that fell into each class.
    int   histogramCount; //The number of elements in the histogram array.
    float min;            //The smallest pixel value that the function classified.
    float max;            //The largest pixel value that the function classified.
    float start;          //The smallest pixel value that fell into the first class.
    float width;          //The size of each class.
    float mean;           //The mean value of the pixels that the function classified.
    float stdDev;         //The standard deviation of the pixels that the function classified.
    int   numPixels;      //The number of pixels that the function classified.
} HistogramReport;

typedef struct ArcInfo_struct {
    Rect   boundingBox; //The coordinate location of the bounding box of the arc.
    double startAngle;  //The counterclockwise angle from the x-axis in degrees to the start of the arc.
    double endAngle;    //The counterclockwise angle from the x-axis in degrees to the end of the arc.
} ArcInfo;

typedef struct AxisReport_struct {
    PointFloat origin;           //The origin of the coordinate system, which is the intersection of the two axes of the coordinate system.
    PointFloat mainAxisEnd;      //The end of the main axis, which is the result of the computation of the intersection of the main axis with the rectangular search area.
    PointFloat secondaryAxisEnd; //The end of the secondary axis, which is the result of the computation of the intersection of the secondary axis with the rectangular search area.
} AxisReport;

typedef struct BarcodeInfo_struct {
    const char* outputString;    //A string containing the decoded barcode data.
    int         size;            //The size of the output string.
    char        outputChar1;     //The contents of this character depend on the barcode type.
    char        outputChar2;     //The contents of this character depend on the barcode type.
    double      confidenceLevel; //A quality measure of the decoded barcode ranging from 0 to 100, with 100 being the best.
    BarcodeType type;            //The type of barcode.
} BarcodeInfo;

typedef struct BCGOptions_struct {
    float brightness; //Adjusts the brightness of the image.
    float contrast;   //Adjusts the contrast of the image.
    float gamma;      //Performs gamma correction.
} BCGOptions;

typedef struct BestCircle_struct {
    PointFloat center;    //The coordinate location of the center of the circle.
    double     radius;    //The radius of the circle.
    double     area;      //The area of the circle.
    double     perimeter; //The length of the perimeter of the circle.
    double     error;     //Represents the least square error of the fitted circle to the entire set of points.
} BestCircle;

typedef struct BestEllipse_struct {
    PointFloat center;         //The coordinate location of the center of the ellipse.
    PointFloat majorAxisStart; //The coordinate location of the start of the major axis of the ellipse.
    PointFloat majorAxisEnd;   //The coordinate location of the end of the major axis of the ellipse.
    PointFloat minorAxisStart; //The coordinate location of the start of the minor axis of the ellipse.
    PointFloat minorAxisEnd;   //The coordinate location of the end of the minor axis of the ellipse.
    double     area;           //The area of the ellipse.
    double     perimeter;      //The length of the perimeter of the ellipse.
} BestEllipse;

typedef struct BestLine_struct {
    PointFloat   start;         //The coordinate location of the start of the line.
    PointFloat   end;           //The coordinate location of the end of the line.
    LineEquation equation;      //Defines the three coefficients of the equation of the best fit line.
    int          valid;         //This element is TRUE if the function achieved the minimum score within the number of allowed refinement iterations and FALSE if the function did not achieve the minimum score.
    double       error;         //Represents the least square error of the fitted line to the entire set of points.
    int*         pointsUsed;    //An array of the indexes for the points array indicating which points the function used to fit the line.
    int          numPointsUsed; //The number of points the function used to fit the line.
} BestLine;

typedef struct BrowserOptions_struct {
    int               width;           //The width to make the browser.
    int               height;          //The height to make the browser image.
    int               imagesPerLine;   //The number of images to place on a single line.
    RGBValue          backgroundColor; //The background color of the browser.
    int               frameSize;       //Specifies the number of pixels with which to border each thumbnail.
    BrowserFrameStyle style;           //The style for the frame around each thumbnail.
    float             ratio;           //Specifies the width to height ratio of each thumbnail.
    RGBValue          focusColor;      //The color to use to display focused cells.
} BrowserOptions;

typedef struct CoordinateSystem_struct {
    PointFloat      origin;          //The origin of the coordinate system.
    float           angle;           //The angle, in degrees, of the x-axis of the coordinate system relative to the image x-axis.
    AxisOrientation axisOrientation; //The direction of the y-axis of the coordinate reference system.
} CoordinateSystem;

typedef struct CalibrationInfo_struct {
    float*                  errorMap;       //The error map for the calibration.
    int                     mapColumns;     //The number of columns in the error map.
    int                     mapRows;        //The number of rows in the error map.
    ROI*                    userRoi;        //Specifies the ROI the user provided when learning the calibration.
    ROI*                    calibrationRoi; //Specifies the ROI that corresponds to the region of the image where the calibration information is accurate.
    LearnCalibrationOptions options;        //Specifies the calibration options the user provided when learning the calibration.
    GridDescriptor          grid;           //Specifies the scaling constants for the image.
    CoordinateSystem        system;         //Specifies the coordinate system for the real world coordinates.
    RangeFloat              range;          //The range of the grayscale the function used to represent the circles in the grid image.
    float                   quality;        //The quality score of the learning process, which is a value between 0-1000.
} CalibrationInfo;

typedef struct CalibrationPoints_struct {
    PointFloat* pixelCoordinates;     //The array of pixel coordinates.
    PointFloat* realWorldCoordinates; //The array of corresponding real-world coordinates.
    int         numCoordinates;       //The number of coordinates in both of the arrays.
} CalibrationPoints;

typedef struct CaliperOptions_struct {
    TwoEdgePolarityType polarity;            //Specifies the edge polarity of the edge pairs.
    float               separation;          //The distance between edge pairs.
    float               separationDeviation; //Sets the range around the separation value.
} CaliperOptions;

typedef struct CaliperReport_struct {
    float      edge1Contrast; //The contrast of the first edge.
    PointFloat edge1Coord;    //The coordinates of the first edge.
    float      edge2Contrast; //The contrast of the second edge.
    PointFloat edge2Coord;    //The coordinates of the second edge.
    float      separation;    //The distance between the two edges.
    float      reserved;      //This element is reserved.
} CaliperReport;

typedef struct DrawTextOptions_struct {
    char          fontName[32];  //The font name to use.
    int           fontSize;      //The size of the font.
    int           bold;          //Set this parameter to TRUE to bold text.
    int           italic;        //Set this parameter to TRUE to italicize text.
    int           underline;     //Set this parameter to TRUE to underline text.
    int           strikeout;     //Set this parameter to TRUE to strikeout text.
    TextAlignment textAlignment; //Sets the alignment of text.
    FontColor     fontColor;     //Sets the font color.
} DrawTextOptions;

typedef struct CircleReport_struct {
    Point center; //The coordinate point of the center of the circle.
    int   radius; //The radius of the circle, in pixels.
    int   area;   //The area of the circle, in pixels.
} CircleReport;

typedef struct ClosedContour_struct {
    Point* points;    //The points that make up the closed contour.
    int    numPoints; //The number of points in the array.
} ClosedContour;

typedef struct ColorHistogramReport_struct {
    HistogramReport plane1; //The histogram report of the first color plane.
    HistogramReport plane2; //The histogram report of the second plane.
    HistogramReport plane3; //The histogram report of the third plane.
} ColorHistogramReport;

typedef struct ColorInformation_struct {
    int     infoCount;  //The size of the info array.
    int     saturation; //The saturation level the function uses to learn the color information.
    double* info;       //An array of color information that represents the color spectrum analysis of a region of an image in a compact form.
} ColorInformation;

typedef struct Complex_struct {
    float r; //The real part of the value.
    float i; //The imaginary part of the value.
} Complex;

typedef struct ConcentricRakeReport_struct {
    ArcInfo*            rakeArcs;          //An array containing the location of each concentric arc line used for edge detection.
    int                 numArcs;           //The number of arc lines in the rakeArcs array.
    PointFloat*         firstEdges;        //The coordinate location of all edges detected as first edges.
    int                 numFirstEdges;     //The number of points in the first edges array.
    PointFloat*         lastEdges;         //The coordinate location of all edges detected as last edges.
    int                 numLastEdges;      //The number of points in the last edges array.
    EdgeLocationReport* allEdges;          //An array of reports describing the location of the edges located by each concentric rake arc line.
    int*                linesWithEdges;    //An array of indices into the rakeArcs array indicating the concentric rake arc lines on which the function detected at least one edge.
    int                 numLinesWithEdges; //The number of concentric rake arc lines along which the function detected edges.
} ConcentricRakeReport;

typedef struct ConstructROIOptions_struct {
    int         windowNumber; //The window number of the image window.
    const char* windowTitle;  //Specifies the message string that the function displays in the title bar of the window.
    PaletteType type;         //The palette type to use.
    RGBValue*   palette;      //If type is IMAQ_PALETTE_USER, this array is the palette of colors to use with the window.
    int         numColors;    //If type is IMAQ_PALETTE_USER, this element is the number of colors in the palette array.
} ConstructROIOptions;

typedef struct ContourInfo_struct {
    ContourType type;         //The contour type.
    unsigned    numPoints;    //The number of points that make up the contour.
    Point*      points;       //The points describing the contour.
    RGBValue    contourColor; //The contour color.
} ContourInfo;

typedef union ContourUnion_union {
    Point*         point;           //Use this member when the contour is of type IMAQ_POINT.
    Line*          line;            //Use this member when the contour is of type IMAQ_LINE.
    Rect*          rect;            //Use this member when the contour is of type IMAQ_RECT.
    Rect*          ovalBoundingBox; //Use this member when the contour is of type IMAQ_OVAL.
    ClosedContour* closedContour;   //Use this member when the contour is of type IMAQ_CLOSED_CONTOUR.
    OpenContour*   openContour;     //Use this member when the contour is of type IMAQ_OPEN_CONTOUR.
    Annulus*       annulus;         //Use this member when the contour is of type IMAQ_ANNULUS.
    RotatedRect*   rotatedRect;     //Use this member when the contour is of type IMAQ_ROTATED_RECT.
} ContourUnion;

typedef struct ContourInfo2_struct {
    ContourType  type;      //The contour type.
    RGBValue     color;     //The contour color.
    ContourUnion structure; //The information necessary to describe the contour in coordinate space.
} ContourInfo2;

typedef struct ContourPoint_struct {
    double x;             //The x-coordinate value in the image.
    double y;             //The y-coordinate value in the image.
    double curvature;     //The change in slope at this edge point of the segment.
    double xDisplacement; //The x displacement of the current edge pixel from a cubic spline fit of the current edge segment.
    double yDisplacement; //The y displacement of the current edge pixel from a cubic spline fit of the current edge segment.
} ContourPoint;

typedef struct CoordinateTransform_struct {
    Point initialOrigin; //The origin of the initial coordinate system.
    float initialAngle;  //The angle, in degrees, of the x-axis of the initial coordinate system relative to the image x-axis.
    Point finalOrigin;   //The origin of the final coordinate system.
    float finalAngle;    //The angle, in degrees, of the x-axis of the final coordinate system relative to the image x-axis.
} CoordinateTransform;

typedef struct CoordinateTransform2_struct {
    CoordinateSystem referenceSystem;   //Defines the coordinate system for input coordinates.
    CoordinateSystem measurementSystem; //Defines the coordinate system in which the function should perform measurements.
} CoordinateTransform2;

typedef struct CannyOptions_struct {
    float sigma;          //The sigma of the Gaussian smoothing filter that the function applies to the image before edge detection.
    float upperThreshold; //The upper fraction of pixel values in the image from which the function chooses a seed or starting point of an edge segment.
    float lowerThreshold; //The function multiplies this value by upperThreshold to determine the lower threshold for all the pixels in an edge segment.
    int   windowSize;     //The window size of the Gaussian filter that the function applies to the image.
} CannyOptions;

typedef struct Range_struct {
    int minValue; //The minimum value of the range.
    int maxValue; //The maximum value of the range.
} Range;

typedef struct UserPointSymbol_struct {
    int  cols;   //Number of columns in the symbol.
    int  rows;   //Number of rows in the symbol.
    int* pixels; //The pixels of the symbol.
} UserPointSymbol;

typedef struct View3DOptions_struct {
    int         sizeReduction; //A divisor the function uses when determining the final height and width of the 3D image.
    int         maxHeight;     //Defines the maximum height of a pixel from the image source drawn in 3D.
    Direction3D direction;     //Defines the 3D orientation.
    float       alpha;         //Determines the angle between the horizontal and the baseline.
    float       beta;          //Determines the angle between the horizontal and the second baseline.
    int         border;        //Defines the border size.
    int         background;    //Defines the background color.
    Plane3D     plane;         //Indicates the view a function uses to show complex images.
} View3DOptions;

typedef struct MatchPatternOptions_struct {
    MatchingMode        mode;                //Specifies the method to use when looking for the pattern in the image.
    int                 minContrast;         //Specifies the minimum contrast expected in the image.
    int                 subpixelAccuracy;    //Set this element to TRUE to return areas in the image that match the pattern area with subpixel accuracy.
    RotationAngleRange* angleRanges;         //An array of angle ranges, in degrees, where each range specifies how much you expect the pattern to be rotated in the image.
    int                 numRanges;           //Number of angle ranges in the angleRanges array.
    int                 numMatchesRequested; //Number of valid matches expected.
    int                 matchFactor;         //Controls the number of potential matches that the function examines.
    float               minMatchScore;       //The minimum score a match can have for the function to consider the match valid.
} MatchPatternOptions;

typedef struct TIFFFileOptions_struct {
    int                 rowsPerStrip;    //Indicates the number of rows that the function writes per strip.
    PhotometricMode     photoInterp;     //Designates which photometric interpretation to use.
    TIFFCompressionType compressionType; //Indicates the type of compression to use on the TIFF file.
} TIFFFileOptions;

typedef union Color_union {
    RGBValue rgb;      //The information needed to describe a color in the RGB (Red, Green, and Blue) color space.
    HSLValue hsl;      //The information needed to describe a color in the HSL (Hue, Saturation, and Luminance) color space.
    HSVValue hsv;      //The information needed to describe a color in the HSI (Hue, Saturation, and Value) color space.
    HSIValue hsi;      //The information needed to describe a color in the HSI (Hue, Saturation, and Intensity) color space.
    int      rawValue; //The integer value for the data in the color union.
} Color;

typedef union PixelValue_union {
    float       grayscale; //A grayscale pixel value.
    RGBValue    rgb;       //A RGB pixel value.
    HSLValue    hsl;       //A HSL pixel value.
    Complex     complex;   //A complex pixel value.
    RGBU64Value rgbu64;    //An unsigned 64-bit RGB pixel value.
} PixelValue;

typedef struct OpenContour_struct {
    Point* points;    //The points that make up the open contour.
    int    numPoints; //The number of points in the array.
} OpenContour;

typedef struct OverlayTextOptions_struct {
    const char*           fontName;                //The name of the font to use.
    int                   fontSize;                //The size of the font.
    int                   bold;                    //Set this element to TRUE to bold the text.
    int                   italic;                  //Set this element to TRUE to italicize the text.
    int                   underline;               //Set this element to TRUE to underline the text.
    int                   strikeout;               //Set this element to TRUE to strikeout the text.
    TextAlignment         horizontalTextAlignment; //Sets the alignment of the text.
    VerticalTextAlignment verticalTextAlignment;   //Sets the vertical alignment for the text.
    RGBValue              backgroundColor;         //Sets the color for the text background pixels.
    double                angle;                   //The counterclockwise angle, in degrees, of the text relative to the x-axis.
} OverlayTextOptions;

typedef struct ParticleFilterCriteria_struct {
    MeasurementValue parameter; //The morphological measurement that the function uses for filtering.
    float            lower;     //The lower bound of the criteria range.
    float            upper;     //The upper bound of the criteria range.
    int              exclude;   //Set this element to TRUE to indicate that a match occurs when the value is outside the criteria range.
} ParticleFilterCriteria;

typedef struct ParticleReport_struct {
    int   area;             //The number of pixels in the particle.
    float calibratedArea;   //The size of the particle, calibrated to the calibration information of the image.
    float perimeter;        //The length of the perimeter, calibrated to the calibration information of the image.
    int   numHoles;         //The number of holes in the particle.
    int   areaOfHoles;      //The total surface area, in pixels, of all the holes in a particle.
    float perimeterOfHoles; //The length of the perimeter of all the holes in the particle calibrated to the calibration information of the image.
    Rect  boundingBox;      //The smallest rectangle that encloses the particle.
    float sigmaX;           //The sum of the particle pixels on the x-axis.
    float sigmaY;           //The sum of the particle pixels on the y-axis.
    float sigmaXX;          //The sum of the particle pixels on the x-axis, squared.
    float sigmaYY;          //The sum of the particle pixels on the y-axis, squared.
    float sigmaXY;          //The sum of the particle pixels on the x-axis and y-axis.
    int   longestLength;    //The length of the longest horizontal line segment.
    Point longestPoint;     //The location of the leftmost pixel of the longest segment in the particle.
    int   projectionX;      //The length of the particle when projected onto the x-axis.
    int   projectionY;      //The length of the particle when projected onto the y-axis.
    int   connect8;         //This element is TRUE if the function used connectivity-8 to determine if particles are touching.
} ParticleReport;

typedef struct PatternMatch_struct {
    PointFloat position;  //The location of the center of the match.
    float      rotation;  //The rotation of the match relative to the template image, in degrees.
    float      scale;     //The size of the match relative to the size of the template image, expressed as a percentage.
    float      score;     //The accuracy of the match.
    PointFloat corner[4]; //An array of four points describing the rectangle surrounding the template image.
} PatternMatch;

typedef struct QuantifyData_struct {
    float mean;           //The mean value of the pixel values.
    float stdDev;         //The standard deviation of the pixel values.
    float min;            //The smallest pixel value.
    float max;            //The largest pixel value.
    float calibratedArea; //The area, calibrated to the calibration information of the image.
    int   pixelArea;      //The area, in number of pixels.
    float relativeSize;   //The proportion, expressed as a percentage, of the associated region relative to the whole image.
} QuantifyData;

typedef struct QuantifyReport_struct {
    QuantifyData  global;      //Statistical data of the whole image.
    QuantifyData* regions;     //An array of QuantifyData structures containing statistical data of each region of the image.
    int           regionCount; //The number of regions.
} QuantifyReport;

typedef struct RakeOptions_struct {
    int                 threshold;         //Specifies the threshold value for the contrast of the edge.
    int                 width;             //The number of pixels that the function averages to find the contrast at either side of the edge.
    int                 steepness;         //The span, in pixels, of the slope of the edge projected along the path specified by the input points.
    int                 subsamplingRatio;  //Specifies the number of pixels that separate two consecutive search lines.
    InterpolationMethod subpixelType;      //The method for interpolating.
    int                 subpixelDivisions; //The number of samples the function obtains from a pixel.
} RakeOptions;

typedef struct RakeReport_struct {
    LineFloat*          rakeLines;         //The coordinate location of each of the rake lines used by the function.
    int                 numRakeLines;      //The number of lines in the rakeLines array.
    PointFloat*         firstEdges;        //The coordinate location of all edges detected as first edges.
    unsigned int        numFirstEdges;     //The number of points in the firstEdges array.
    PointFloat*         lastEdges;         //The coordinate location of all edges detected as last edges.
    unsigned int        numLastEdges;      //The number of points in the lastEdges array.
    EdgeLocationReport* allEdges;          //An array of reports describing the location of the edges located by each rake line.
    int*                linesWithEdges;    //An array of indices into the rakeLines array indicating the rake lines on which the function detected at least one edge.
    int                 numLinesWithEdges; //The number of rake lines along which the function detected edges.
} RakeReport;

typedef struct TransformReport_struct {
    PointFloat* points;      //An array of transformed coordinates.
    int*        validPoints; //An array of values that describe the validity of each of the coordinates according to the region of interest you calibrated using either imaqLearnCalibrationGrid() or imaqLearnCalibrationPoints().
    int         numPoints;   //The length of both the points array and the validPoints array.
} TransformReport;

typedef struct ShapeReport_struct {
    Rect   coordinates; //The bounding rectangle of the object.
    Point  centroid;    //The coordinate location of the centroid of the object.
    int    size;        //The size, in pixels, of the object.
    double score;       //A value ranging between 1 and 1,000 that specifies how similar the object in the image is to the template.
} ShapeReport;

typedef struct MeterArc_struct {
    PointFloat  needleBase;          //The coordinate location of the base of the meter needle.
    PointFloat* arcCoordPoints;      //An array of points describing the coordinate location of the meter arc.
    int         numOfArcCoordPoints; //The number of points in the arcCoordPoints array.
    int         needleColor;         //This element is TRUE when the meter has a light-colored needle on a dark background.
} MeterArc;

typedef struct ThresholdData_struct {
    float rangeMin;    //The lower boundary of the range to keep.
    float rangeMax;    //The upper boundary of the range to keep.
    float newValue;    //If useNewValue is TRUE, newValue is the replacement value for pixels within the range.
    int   useNewValue; //If TRUE, the function sets pixel values within [rangeMin, rangeMax] to the value specified in newValue.
} ThresholdData;

typedef struct StructuringElement_struct {
    int  matrixCols; //Number of columns in the matrix.
    int  matrixRows; //Number of rows in the matrix.
    int  hexa;       //Set this element to TRUE if you specify a hexagonal structuring element in kernel.
    int* kernel;     //The values of the structuring element.
} StructuringElement;

typedef struct SpokeReport_struct {
    LineFloat*          spokeLines;        //The coordinate location of each of the spoke lines used by the function.
    int                 numSpokeLines;     //The number of lines in the spokeLines array.
    PointFloat*         firstEdges;        //The coordinate location of all edges detected as first edges.
    int                 numFirstEdges;     //The number of points in the firstEdges array.
    PointFloat*         lastEdges;         //The coordinate location of all edges detected as last edges.
    int                 numLastEdges;      //The number of points in the lastEdges array.
    EdgeLocationReport* allEdges;          //An array of reports describing the location of the edges located by each spoke line.
    int*                linesWithEdges;    //An array of indices into the spokeLines array indicating the rake lines on which the function detected at least one edge.
    int                 numLinesWithEdges; //The number of spoke lines along which the function detects edges.
} SpokeReport;

typedef struct SimpleEdgeOptions_struct {
    LevelType   type;       //Determines how the function evaluates the threshold and hysteresis values.
    int         threshold;  //The pixel value at which an edge occurs.
    int         hysteresis; //A value that helps determine edges in noisy images.
    EdgeProcess process;    //Determines which edges the function looks for.
    int         subpixel;   //Set this element to TRUE to find edges with subpixel accuracy by interpolating between points to find the crossing of the given threshold.
} SimpleEdgeOptions;

typedef struct SelectParticleCriteria_struct {
    MeasurementValue parameter; //The morphological measurement that the function uses for filtering.
    float            lower;     //The lower boundary of the criteria range.
    float            upper;     //The upper boundary of the criteria range.
} SelectParticleCriteria;

typedef struct SegmentInfo_struct {
    int           numberOfPoints; //The number of points in the segment.
    int           isOpen;         //If TRUE, the contour is open.
    double        weight;         //The significance of the edge in terms of the gray values that constitute the edge.
    ContourPoint* points;         //The points of the segment.
} SegmentInfo;

typedef struct RotationAngleRange_struct {
    float lower; //The lowest amount of rotation, in degrees, a valid pattern can have.
    float upper; //The highest amount of rotation, in degrees, a valid pattern can have.
} RotationAngleRange;

typedef struct RotatedRect_struct {
    int    top;    //Location of the top edge of the rectangle before rotation.
    int    left;   //Location of the left edge of the rectangle before rotation.
    int    height; //Height of the rectangle.
    int    width;  //Width of the rectangle.
    double angle;  //The rotation, in degrees, of the rectangle.
} RotatedRect;

typedef struct ROIProfile_struct {
    LineProfile report; //Quantifying information about the points along the edge of each contour in the ROI.
    Point*      pixels; //An array of the points along the edge of each contour in the ROI.
} ROIProfile;

typedef struct ToolWindowOptions_struct {
    int showSelectionTool;        //If TRUE, the selection tool becomes visible.
    int showZoomTool;             //If TRUE, the zoom tool becomes visible.
    int showPointTool;            //If TRUE, the point tool becomes visible.
    int showLineTool;             //If TRUE, the line tool becomes visible.
    int showRectangleTool;        //If TRUE, the rectangle tool becomes visible.
    int showOvalTool;             //If TRUE, the oval tool becomes visible.
    int showPolygonTool;          //If TRUE, the polygon tool becomes visible.
    int showClosedFreehandTool;   //If TRUE, the closed freehand tool becomes visible.
    int showPolyLineTool;         //If TRUE, the polyline tool becomes visible.
    int showFreehandTool;         //If TRUE, the freehand tool becomes visible.
    int showAnnulusTool;          //If TRUE, the annulus becomes visible.
    int showRotatedRectangleTool; //If TRUE, the rotated rectangle tool becomes visible.
    int showPanTool;              //If TRUE, the pan tool becomes visible.
    int showZoomOutTool;          //If TRUE, the zoom out tool becomes visible.
    int reserved2;                //This element is reserved and should be set to FALSE.
    int reserved3;                //This element is reserved and should be set to FALSE.
    int reserved4;                //This element is reserved and should be set to FALSE.
} ToolWindowOptions;

typedef struct SpokeOptions_struct {
    int                 threshold;         //Specifies the threshold value for the contrast of the edge.
    int                 width;             //The number of pixels that the function averages to find the contrast at either side of the edge.
    int                 steepness;         //The span, in pixels, of the slope of the edge projected along the path specified by the input points.
    double              subsamplingRatio;  //The angle, in degrees, between each radial search line in the spoke.
    InterpolationMethod subpixelType;      //The method for interpolating.
    int                 subpixelDivisions; //The number of samples the function obtains from a pixel.
} SpokeOptions;

#if !defined __GNUC__ && !defined _M_X64
#pragma pack(pop)
#endif

//============================================================================
// Callback Function Type
//============================================================================
#ifndef __GNUC__
typedef void (IMAQ_CALLBACK* EventCallback)(WindowEventType event, int windowNumber, Tool tool, Rect rect);
#endif

//============================================================================
//  Globals
//============================================================================
#ifndef __GNUC__
#pragma const_seg("IMAQVisionColorConstants")
#endif
static const RGBValue IMAQ_RGB_TRANSPARENT = {   0,   0,   0, 1 };
static const RGBValue IMAQ_RGB_RED         = {   0,   0, 255, 0 };
static const RGBValue IMAQ_RGB_BLUE        = { 255,   0,   0, 0 };
static const RGBValue IMAQ_RGB_GREEN       = {   0, 255,   0, 0 };
static const RGBValue IMAQ_RGB_YELLOW      = {   0, 255, 255, 0 };
static const RGBValue IMAQ_RGB_WHITE       = { 255, 255, 255, 0 };
static const RGBValue IMAQ_RGB_BLACK       = {   0,   0,   0, 0 };
#ifndef __GNUC__
#pragma const_seg()
#endif

//============================================================================
//  Backwards Compatibility
//============================================================================
typedef ColorSensitivity 		ColorComplexity;
#define IMAQ_COMPLEXITY_LOW 		IMAQ_SENSITIVITY_LOW
#define IMAQ_COMPLEXITY_MED 		IMAQ_SENSITIVITY_MED     
#define IMAQ_COMPLEXITY_HIGH 		IMAQ_SENSITIVITY_HIGH
#define ERR_INVALID_COLORCOMPLEXITY 	ERR_INVALID_COLORSENSITIVITY

//============================================================================
//  Logical functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqAnd(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqAndConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqCompare(Image* dest, const Image* source, const Image* compareImage, ComparisonFunction compare);
IMAQ_FUNC int IMAQ_STDCALL imaqCompareConstant(Image* dest, const Image* source, PixelValue value, ComparisonFunction compare);
IMAQ_FUNC int IMAQ_STDCALL imaqLogicalDifference(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqLogicalDifferenceConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqNand(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqNandConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqNor(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqNorConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqOr(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqOrConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqXnor(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqXnorConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqXor(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqXorConstant(Image* dest, const Image* source, PixelValue value);

//============================================================================
//  Particle Analysis functions
//============================================================================
IMAQ_FUNC int                     IMAQ_STDCALL imaqCountParticles(Image* image, int connectivity8, int* numParticles);
IMAQ_FUNC int                     IMAQ_STDCALL imaqMeasureParticle(Image* image, int particleNumber, int calibrated, MeasurementType measurement, double* value);
IMAQ_FUNC MeasureParticlesReport* IMAQ_STDCALL imaqMeasureParticles(Image* image, MeasureParticlesCalibrationMode calibrationMode, const MeasurementType* measurements, size_t numMeasurements);
IMAQ_FUNC int                     IMAQ_STDCALL imaqParticleFilter4(Image* dest, Image* source, const ParticleFilterCriteria2* criteria, int criteriaCount, const ParticleFilterOptions2* options, const ROI* roi, int* numParticles);

//============================================================================
//  Morphology functions
//============================================================================
IMAQ_FUNC int           IMAQ_STDCALL imaqConvexHull(Image* dest, Image* source, int connectivity8);
IMAQ_FUNC int           IMAQ_STDCALL imaqDanielssonDistance(Image* dest, Image* source);
IMAQ_FUNC int           IMAQ_STDCALL imaqFillHoles(Image* dest, const Image* source, int connectivity8);
IMAQ_FUNC CircleReport* IMAQ_STDCALL imaqFindCircles(Image* dest, Image* source, float minRadius, float maxRadius, int* numCircles);
IMAQ_FUNC int           IMAQ_STDCALL imaqLabel2(Image* dest, Image* source, int connectivity8, int* particleCount);
IMAQ_FUNC int           IMAQ_STDCALL imaqMorphology(Image* dest, Image* source, MorphologyMethod method, const StructuringElement* structuringElement);
IMAQ_FUNC int           IMAQ_STDCALL imaqRejectBorder(Image* dest, Image* source, int connectivity8);
IMAQ_FUNC int           IMAQ_STDCALL imaqSegmentation(Image* dest, Image* source);
IMAQ_FUNC int           IMAQ_STDCALL imaqSeparation(Image* dest, Image* source, int erosions, const StructuringElement* structuringElement);
IMAQ_FUNC int           IMAQ_STDCALL imaqSimpleDistance(Image* dest, Image* source, const StructuringElement* structuringElement);
IMAQ_FUNC int           IMAQ_STDCALL imaqSizeFilter(Image* dest, Image* source, int connectivity8, int erosions, SizeType keepSize, const StructuringElement* structuringElement);
IMAQ_FUNC int           IMAQ_STDCALL imaqSkeleton(Image* dest, Image* source, SkeletonMethod method);


//============================================================================
//  Acquisition functions
//============================================================================
IMAQ_FUNC Image* IMAQ_STDCALL imaqCopyFromRing(SESSION_ID sessionID, Image* image, int imageToCopy, int* imageNumber, Rect rect);
IMAQ_FUNC Image* IMAQ_STDCALL imaqEasyAcquire(const char* interfaceName);
IMAQ_FUNC Image* IMAQ_STDCALL imaqExtractFromRing(SESSION_ID sessionID, int imageToExtract, int* imageNumber);
IMAQ_FUNC Image* IMAQ_STDCALL imaqGrab(SESSION_ID sessionID, Image* image, int immediate);
IMAQ_FUNC int    IMAQ_STDCALL imaqReleaseImage(SESSION_ID sessionID);
IMAQ_FUNC int    IMAQ_STDCALL imaqSetupGrab(SESSION_ID sessionID, Rect rect);
IMAQ_FUNC int    IMAQ_STDCALL imaqSetupRing(SESSION_ID sessionID, Image** images, int numImages, int skipCount, Rect rect);
IMAQ_FUNC int    IMAQ_STDCALL imaqSetupSequence(SESSION_ID sessionID, Image** images, int numImages, int skipCount, Rect rect);
IMAQ_FUNC Image* IMAQ_STDCALL imaqSnap(SESSION_ID sessionID, Image* image, Rect rect);
IMAQ_FUNC int    IMAQ_STDCALL imaqStartAcquisition(SESSION_ID sessionID);
IMAQ_FUNC int    IMAQ_STDCALL imaqStopAcquisition(SESSION_ID sessionID);

//============================================================================
//  Arithmetic functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqAbsoluteDifference(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqAbsoluteDifferenceConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqAdd(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqAddConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqAverage(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqAverageConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqDivide2(Image* dest, const Image* sourceA, const Image* sourceB, RoundingMode roundingMode);
IMAQ_FUNC int IMAQ_STDCALL imaqDivideConstant2(Image* dest, const Image* source, PixelValue value, RoundingMode roundingMode);
IMAQ_FUNC int IMAQ_STDCALL imaqMax(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqMaxConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqMin(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqMinConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqModulo(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqModuloConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqMulDiv(Image* dest, const Image* sourceA, const Image* sourceB, float value);
IMAQ_FUNC int IMAQ_STDCALL imaqMultiply(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqMultiplyConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int IMAQ_STDCALL imaqSubtract(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC int IMAQ_STDCALL imaqSubtractConstant(Image* dest, const Image* source, PixelValue value);

//============================================================================
//  Caliper functions
//============================================================================
IMAQ_FUNC CaliperReport*         IMAQ_STDCALL imaqCaliperTool(const Image* image, const Point* points, int numPoints, const EdgeOptions* edgeOptions, const CaliperOptions* caliperOptions, int* numEdgePairs);
IMAQ_FUNC ConcentricRakeReport2* IMAQ_STDCALL imaqConcentricRake2(Image* image, ROI* roi, ConcentricRakeDirection direction, EdgeProcess process, int stepSize, EdgeOptions2* edgeOptions);
IMAQ_FUNC ExtremeReport*         IMAQ_STDCALL imaqDetectExtremes(const double* pixels, int numPixels, DetectionMode mode, const DetectExtremesOptions* options, int* numExtremes);
IMAQ_FUNC int                    IMAQ_STDCALL imaqDetectRotation(const Image* referenceImage, const Image* testImage, PointFloat referenceCenter, PointFloat testCenter, int radius, float precision, double* angle);
IMAQ_FUNC EdgeReport2*           IMAQ_STDCALL imaqEdgeTool4(Image* image, ROI* roi, EdgeProcess processType, EdgeOptions2* edgeOptions, const unsigned int reverseDirection);
IMAQ_FUNC FindEdgeReport*        IMAQ_STDCALL imaqFindEdge2(Image* image, const ROI* roi, const CoordinateSystem* baseSystem, const CoordinateSystem* newSystem, const FindEdgeOptions2* findEdgeOptions, const StraightEdgeOptions* straightEdgeOptions);
IMAQ_FUNC int                    IMAQ_STDCALL imaqFindTransformRect2(Image* image, const ROI* roi, FindTransformMode mode, CoordinateSystem* baseSystem, CoordinateSystem* newSystem, const FindTransformRectOptions2* findTransformOptions, const StraightEdgeOptions* straightEdgeOptions, AxisReport* axisReport);
IMAQ_FUNC int                    IMAQ_STDCALL imaqFindTransformRects2(Image* image, const ROI* primaryROI, const ROI* secondaryROI, FindTransformMode mode, CoordinateSystem* baseSystem, CoordinateSystem* newSystem, const FindTransformRectsOptions2* findTransformOptions, const StraightEdgeOptions* primaryStraightEdgeOptions, const StraightEdgeOptions* secondaryStraightEdgeOptions, AxisReport* axisReport);
IMAQ_FUNC int                    IMAQ_STDCALL imaqLineGaugeTool2(const Image* image, Point start, Point end, LineGaugeMethod method, const EdgeOptions* edgeOptions, const CoordinateTransform2* transform, float* distance);
IMAQ_FUNC RakeReport2*           IMAQ_STDCALL imaqRake2(Image* image, ROI* roi, RakeDirection direction, EdgeProcess process, int stepSize, EdgeOptions2* edgeOptions);
IMAQ_FUNC PointFloat*            IMAQ_STDCALL imaqSimpleEdge(const Image* image, const Point* points, int numPoints, const SimpleEdgeOptions* options, int* numEdges);
IMAQ_FUNC SpokeReport2*          IMAQ_STDCALL imaqSpoke2(Image* image, ROI* roi, SpokeDirection direction, EdgeProcess process, int stepSize, EdgeOptions2* edgeOptions);
IMAQ_FUNC StraightEdgeReport2*   IMAQ_STDCALL imaqStraightEdge(const Image* image, const ROI* roi, SearchDirection searchDirection, const EdgeOptions2* edgeOptions, const StraightEdgeOptions* straightEdgeOptions);
IMAQ_FUNC StraightEdgeReport2*   IMAQ_STDCALL imaqStraightEdge2(const Image* image, const ROI* roi, SearchDirection searchDirection, const EdgeOptions2* edgeOptions, const StraightEdgeOptions* straightEdgeOptions, unsigned int optimizedMode);

//============================================================================
//  Spatial Filters functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqCannyEdgeFilter(Image* dest, const Image* source, const CannyOptions* options);
IMAQ_FUNC int IMAQ_STDCALL imaqConvolve2(Image* dest, Image* source, float* kernel, int matrixRows, int matrixCols, float normalize, Image* mask, RoundingMode roundingMode);
IMAQ_FUNC int IMAQ_STDCALL imaqCorrelate(Image* dest, Image* source, const Image* templateImage, Rect rect);
IMAQ_FUNC int IMAQ_STDCALL imaqEdgeFilter(Image* dest, Image* source, OutlineMethod method, const Image* mask);
IMAQ_FUNC int IMAQ_STDCALL imaqLowPass(Image* dest, Image* source, int width, int height, float tolerance, const Image* mask);
IMAQ_FUNC int IMAQ_STDCALL imaqMedianFilter(Image* dest, Image* source, int width, int height, const Image* mask);
IMAQ_FUNC int IMAQ_STDCALL imaqNthOrderFilter(Image* dest, Image* source, int width, int height, int n, const Image* mask);

//============================================================================
//  Drawing functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqDrawLineOnImage(Image* dest, const Image* source, DrawMode mode, Point start, Point end, float newPixelValue);
IMAQ_FUNC int IMAQ_STDCALL imaqDrawShapeOnImage(Image* dest, const Image* source, Rect rect, DrawMode mode, ShapeMode shape, float newPixelValue);
IMAQ_FUNC int IMAQ_STDCALL imaqDrawTextOnImage(Image* dest, const Image* source, Point coord, const char* text, const DrawTextOptions* options, int* fontNameUsed);

//============================================================================
//  Interlacing functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqInterlaceCombine(Image* frame, const Image* odd, const Image* even);
IMAQ_FUNC int IMAQ_STDCALL imaqInterlaceSeparate(const Image* frame, Image* odd, Image* even);

//============================================================================
//  Image Information functions
//============================================================================
IMAQ_FUNC char** IMAQ_STDCALL imaqEnumerateCustomKeys(const Image* image, unsigned int* size);
IMAQ_FUNC int    IMAQ_STDCALL imaqGetBitDepth(const Image* image, unsigned int* bitDepth);
IMAQ_FUNC int    IMAQ_STDCALL imaqGetBytesPerPixel(const Image* image, int* byteCount);
IMAQ_FUNC int    IMAQ_STDCALL imaqGetImageInfo(const Image* image, ImageInfo* info);
IMAQ_FUNC int    IMAQ_STDCALL imaqGetImageSize(const Image* image, int* width, int* height);
IMAQ_FUNC int    IMAQ_STDCALL imaqGetImageType(const Image* image, ImageType* type);
IMAQ_FUNC int    IMAQ_STDCALL imaqGetMaskOffset(const Image* image, Point* offset);
IMAQ_FUNC void*  IMAQ_STDCALL imaqGetPixelAddress(const Image* image, Point pixel);
IMAQ_FUNC int    IMAQ_STDCALL imaqGetVisionInfoTypes(const Image* image, unsigned int* present);
IMAQ_FUNC int    IMAQ_STDCALL imaqIsImageEmpty(const Image* image, int* empty);
IMAQ_FUNC void*  IMAQ_STDCALL imaqReadCustomData(const Image* image, const char* key, unsigned int* size);
IMAQ_FUNC int    IMAQ_STDCALL imaqRemoveCustomData(Image* image, const char* key);
IMAQ_FUNC int    IMAQ_STDCALL imaqRemoveVisionInfo2(const Image* image, unsigned int info);
IMAQ_FUNC int    IMAQ_STDCALL imaqSetBitDepth(Image* image, unsigned int bitDepth);
IMAQ_FUNC int    IMAQ_STDCALL imaqSetImageSize(Image* image, int width, int height);
IMAQ_FUNC int    IMAQ_STDCALL imaqSetMaskOffset(Image* image, Point offset);
IMAQ_FUNC int    IMAQ_STDCALL imaqWriteCustomData(Image* image, const char* key, const void* data, unsigned int size);

//============================================================================
//  Display functions
//============================================================================
IMAQ_FUNC int   IMAQ_STDCALL imaqAreToolsContextSensitive(int* sensitive);
IMAQ_FUNC int   IMAQ_STDCALL imaqCloseWindow(int windowNumber);
IMAQ_FUNC int   IMAQ_STDCALL imaqDisplayImage(const Image* image, int windowNumber, int resize);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetLastKey(char* keyPressed, int* windowNumber, int* modifiers);
IMAQ_FUNC void* IMAQ_STDCALL imaqGetSystemWindowHandle(int windowNumber);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetWindowCenterPos(int windowNumber, Point* centerPosition);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetToolContextSensitivity(int sensitive);
IMAQ_FUNC int   IMAQ_STDCALL imaqShowWindow(int windowNumber, int visible);

//============================================================================
//  Image Manipulation functions
//============================================================================
IMAQ_FUNC int   IMAQ_STDCALL imaqCast(Image* dest, const Image* source, ImageType type, const float* lookup, int shift);
IMAQ_FUNC int   IMAQ_STDCALL imaqCopyRect(Image* dest, const Image* source, Rect rect, Point destLoc);
IMAQ_FUNC int   IMAQ_STDCALL imaqDuplicate(Image* dest, const Image* source);
IMAQ_FUNC void* IMAQ_STDCALL imaqFlatten(const Image* image, FlattenType type, CompressionType compression, int quality, unsigned int* size);
IMAQ_FUNC int   IMAQ_STDCALL imaqFlip(Image* dest, const Image* source, FlipAxis axis);
IMAQ_FUNC int   IMAQ_STDCALL imaqMask(Image* dest, const Image* source, const Image* mask);
IMAQ_FUNC int   IMAQ_STDCALL imaqResample(Image* dest, const Image* source, int newWidth, int newHeight, InterpolationMethod method, Rect rect);
IMAQ_FUNC int   IMAQ_STDCALL imaqRotate2(Image* dest, const Image* source, float angle, PixelValue fill, InterpolationMethod method, int maintainSize);
IMAQ_FUNC int   IMAQ_STDCALL imaqScale(Image* dest, const Image* source, int xScale, int yScale, ScalingMode scaleMode, Rect rect);
IMAQ_FUNC int   IMAQ_STDCALL imaqShift(Image* dest, const Image* source, int shiftX, int shiftY, PixelValue fill);
IMAQ_FUNC int   IMAQ_STDCALL imaqTranspose(Image* dest, const Image* source);
IMAQ_FUNC int   IMAQ_STDCALL imaqUnflatten(Image* image, const void* data, unsigned int size);
IMAQ_FUNC int   IMAQ_STDCALL imaqUnwrapImage(Image* dest, const Image* source, Annulus annulus, RectOrientation orientation, InterpolationMethod method);
IMAQ_FUNC int   IMAQ_STDCALL imaqView3D(Image* dest, Image* source, const View3DOptions* options);

//============================================================================
//  File I/O functions
//============================================================================
IMAQ_FUNC int         IMAQ_STDCALL imaqCloseAVI(AVISession session);
IMAQ_FUNC AVISession  IMAQ_STDCALL imaqCreateAVI(const char* fileName, const char* compressionFilter, int quality, unsigned int framesPerSecond, unsigned int maxDataSize);
IMAQ_FUNC int         IMAQ_STDCALL imaqGetAVIInfo(AVISession session, AVIInfo* info);
IMAQ_FUNC int         IMAQ_STDCALL imaqGetFileInfo(const char* fileName, CalibrationUnit* calibrationUnit, float* calibrationX, float* calibrationY, int* width, int* height, ImageType* imageType);
IMAQ_FUNC FilterName* IMAQ_STDCALL imaqGetFilterNames(int* numFilters);
IMAQ_FUNC char**      IMAQ_STDCALL imaqLoadImagePopup(const char* defaultDirectory, const char* defaultFileSpec, const char* fileTypeList, const char* title, int allowMultiplePaths, ButtonLabel buttonLabel, int restrictDirectory, int restrictExtension, int allowCancel, int allowMakeDirectory, int* cancelled, int* numPaths);
IMAQ_FUNC AVISession  IMAQ_STDCALL imaqOpenAVI(const char* fileName);
IMAQ_FUNC int         IMAQ_STDCALL imaqReadAVIFrame(Image* image, AVISession session, unsigned int frameNum, void* data, unsigned int* dataSize);
IMAQ_FUNC int         IMAQ_STDCALL imaqReadFile(Image* image, const char* fileName, RGBValue* colorTable, int* numColors);
IMAQ_FUNC int         IMAQ_STDCALL imaqReadVisionFile(Image* image, const char* fileName, RGBValue* colorTable, int* numColors);
IMAQ_FUNC int         IMAQ_STDCALL imaqWriteAVIFrame(Image* image, AVISession session, const void* data, unsigned int dataLength);
IMAQ_FUNC int         IMAQ_STDCALL imaqWriteBMPFile(const Image* image, const char* fileName, int compress, const RGBValue* colorTable);
IMAQ_FUNC int         IMAQ_STDCALL imaqWriteFile(const Image* image, const char* fileName, const RGBValue* colorTable);
IMAQ_FUNC int         IMAQ_STDCALL imaqWriteJPEGFile(const Image* image, const char* fileName, unsigned int quality, void* colorTable);
IMAQ_FUNC int         IMAQ_STDCALL imaqWriteJPEG2000File(const Image* image, const char* fileName, int lossless, float compressionRatio, const JPEG2000FileAdvancedOptions* advancedOptions, const RGBValue* colorTable);
IMAQ_FUNC int         IMAQ_STDCALL imaqWritePNGFile2(const Image* image, const char* fileName, unsigned int compressionSpeed, const RGBValue* colorTable, int useBitDepth);
IMAQ_FUNC int         IMAQ_STDCALL imaqWriteTIFFFile(const Image* image, const char* fileName, const TIFFFileOptions* options, const RGBValue* colorTable);
IMAQ_FUNC int         IMAQ_STDCALL imaqWriteVisionFile(const Image* image, const char* fileName, const RGBValue* colorTable);


//============================================================================
//  Analytic Geometry functions
//============================================================================
IMAQ_FUNC int           IMAQ_STDCALL imaqBuildCoordinateSystem(const Point* points, ReferenceMode mode, AxisOrientation orientation, CoordinateSystem* system);
IMAQ_FUNC BestCircle2*  IMAQ_STDCALL imaqFitCircle2(const PointFloat* points, int numPoints, const FitCircleOptions* options);
IMAQ_FUNC BestEllipse2* IMAQ_STDCALL imaqFitEllipse2(const PointFloat* points, int numPoints, const FitEllipseOptions* options);
IMAQ_FUNC BestLine*     IMAQ_STDCALL imaqFitLine(const PointFloat* points, int numPoints, const FitLineOptions* options);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetAngle(PointFloat start1, PointFloat end1, PointFloat start2, PointFloat end2, float* angle);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetBisectingLine(PointFloat start1, PointFloat end1, PointFloat start2, PointFloat end2, PointFloat* bisectStart, PointFloat* bisectEnd);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetDistance(PointFloat point1, PointFloat point2, float* distance);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetIntersection(PointFloat start1, PointFloat end1, PointFloat start2, PointFloat end2, PointFloat* intersection);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetMidLine(PointFloat refLineStart, PointFloat refLineEnd, PointFloat point, PointFloat* midLineStart, PointFloat* midLineEnd);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetPerpendicularLine(PointFloat refLineStart, PointFloat refLineEnd, PointFloat point, PointFloat* perpLineStart, PointFloat* perpLineEnd, double* distance);
IMAQ_FUNC SegmentInfo*  IMAQ_STDCALL imaqGetPointsOnContour(const Image* image, int* numSegments);
IMAQ_FUNC Point*        IMAQ_STDCALL imaqGetPointsOnLine(Point start, Point end, int* numPoints);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetPolygonArea(const PointFloat* points, int numPoints, float* area);
IMAQ_FUNC float*        IMAQ_STDCALL imaqInterpolatePoints(const Image* image, const Point* points, int numPoints, InterpolationMethod method, int subpixel, int* interpCount);

//============================================================================
//  Clipboard functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqClipboardToImage(Image* dest, RGBValue* palette);
IMAQ_FUNC int IMAQ_STDCALL imaqImageToClipboard(const Image* image, const RGBValue* palette);

//============================================================================
//  Border functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqFillBorder(Image* image, BorderMethod method);
IMAQ_FUNC int IMAQ_STDCALL imaqGetBorderSize(const Image* image, int* borderSize);
IMAQ_FUNC int IMAQ_STDCALL imaqSetBorderSize(Image* image, int size);

//============================================================================
//  Image Management functions
//============================================================================
IMAQ_FUNC int    IMAQ_STDCALL imaqArrayToImage(Image* image, const void* array, int numCols, int numRows);
IMAQ_FUNC Image* IMAQ_STDCALL imaqCreateImage(ImageType type, int borderSize);
IMAQ_FUNC void*  IMAQ_STDCALL imaqImageToArray(const Image* image, Rect rect, int* columns, int* rows);

//============================================================================
//  Color Processing functions
//============================================================================
IMAQ_FUNC Color2                             IMAQ_STDCALL imaqChangeColorSpace2(const Color2* sourceColor, ColorMode sourceSpace, ColorMode destSpace, double offset, const CIEXYZValue* whiteReference);
IMAQ_FUNC int                                IMAQ_STDCALL imaqColorBCGTransform(Image* dest, const Image* source, const BCGOptions* redOptions, const BCGOptions* greenOptions, const BCGOptions* blueOptions, const Image* mask);
IMAQ_FUNC int                                IMAQ_STDCALL imaqColorEqualize(Image* dest, const Image* source, int colorEqualization);
IMAQ_FUNC ColorHistogramReport*              IMAQ_STDCALL imaqColorHistogram2(Image* image, int numClasses, ColorMode mode, const CIEXYZValue* whiteReference, Image* mask);
IMAQ_FUNC int                                IMAQ_STDCALL imaqColorLookup(Image* dest, const Image* source, ColorMode mode, const Image* mask, const short* plane1, const short* plane2, const short* plane3);
IMAQ_FUNC int                                IMAQ_STDCALL imaqColorThreshold(Image* dest, const Image* source, int replaceValue, ColorMode mode, const Range* plane1Range, const Range* plane2Range, const Range* plane3Range);
IMAQ_FUNC SupervisedColorSegmentationReport* IMAQ_STDCALL imaqSupervisedColorSegmentation(ClassifierSession* session, Image* labelImage, const Image* srcImage, const ROI* roi, const ROILabel* labelIn, unsigned int numLabelIn, int maxDistance, int minIdentificationScore, const ColorSegmenationOptions* segmentOptions);
IMAQ_FUNC int                                IMAQ_STDCALL imaqGetColorSegmentationMaxDistance(ClassifierSession* session, const ColorSegmenationOptions* segmentOptions, SegmentationDistanceLevel distLevel, int* maxDistance);

//============================================================================
//  Transform functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqBCGTransform(Image* dest, const Image* source, const BCGOptions* options, const Image* mask);
IMAQ_FUNC int IMAQ_STDCALL imaqEqualize(Image* dest, const Image* source, float min, float max, const Image* mask);
IMAQ_FUNC int IMAQ_STDCALL imaqInverse(Image* dest, const Image* source, const Image* mask);
IMAQ_FUNC int IMAQ_STDCALL imaqMathTransform(Image* dest, const Image* source, MathTransformMethod method, float rangeMin, float rangeMax, float power, const Image* mask);
IMAQ_FUNC int IMAQ_STDCALL imaqWatershedTransform(Image* dest, const Image* source, int connectivity8, int* zoneCount);
IMAQ_FUNC int IMAQ_STDCALL imaqLookup2(Image* dest, const Image* source, const int* table, const Image* mask);


//============================================================================
//  Window Management functions
//============================================================================
IMAQ_FUNC int   IMAQ_STDCALL imaqAreScrollbarsVisible(int windowNumber, int* visible);
IMAQ_FUNC int   IMAQ_STDCALL imaqBringWindowToTop(int windowNumber);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetMousePos(Point* position, int* windowNumber);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetWindowBackground(int windowNumber, WindowBackgroundFillStyle* fillStyle, WindowBackgroundHatchStyle* hatchStyle, RGBValue* fillColor, RGBValue* backgroundColor);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetWindowDisplayMapping(int windowNum, DisplayMapping* mapping);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetWindowGrid(int windowNumber, int* xResolution, int* yResolution);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetWindowHandle(int* handle);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetWindowPos(int windowNumber, Point* position);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetWindowSize(int windowNumber, int* width, int* height);
IMAQ_FUNC char* IMAQ_STDCALL imaqGetWindowTitle(int windowNumber);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetWindowZoom2(int windowNumber, float* xZoom, float* yZoom);
IMAQ_FUNC int   IMAQ_STDCALL imaqIsWindowNonTearing(int windowNumber, int* nonTearing);
IMAQ_FUNC int   IMAQ_STDCALL imaqIsWindowVisible(int windowNumber, int* visible);
IMAQ_FUNC int   IMAQ_STDCALL imaqMoveWindow(int windowNumber, Point position);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetupWindow(int windowNumber, int configuration);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowBackground(int windowNumber, WindowBackgroundFillStyle fillStyle, WindowBackgroundHatchStyle hatchStyle, const RGBValue* fillColor, const RGBValue* backgroundColor);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowDisplayMapping(int windowNumber, const DisplayMapping* mapping);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowGrid(int windowNumber, int xResolution, int yResolution);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowMaxContourCount(int windowNumber, unsigned int maxContourCount);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowNonTearing(int windowNumber, int nonTearing);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowPalette(int windowNumber, PaletteType type, const RGBValue* palette, int numColors);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowSize(int windowNumber, int width, int height);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowThreadPolicy(WindowThreadPolicy policy);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowTitle(int windowNumber, const char* title);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetWindowZoomToFit(int windowNumber, int zoomToFit);
IMAQ_FUNC int   IMAQ_STDCALL imaqShowScrollbars(int windowNumber, int visible);
IMAQ_FUNC int   IMAQ_STDCALL imaqZoomWindow2(int windowNumber, float xZoom, float yZoom, Point center);

//============================================================================
//  Utilities functions
//============================================================================
IMAQ_FUNC const float* IMAQ_STDCALL imaqGetKernel(KernelFamily family, int size, int number);
IMAQ_FUNC Annulus      IMAQ_STDCALL imaqMakeAnnulus(Point center, int innerRadius, int outerRadius, double startAngle, double endAngle);
IMAQ_FUNC Point        IMAQ_STDCALL imaqMakePoint(int xCoordinate, int yCoordinate);
IMAQ_FUNC PointFloat   IMAQ_STDCALL imaqMakePointFloat(float xCoordinate, float yCoordinate);
IMAQ_FUNC Rect         IMAQ_STDCALL imaqMakeRect(int top, int left, int height, int width);
IMAQ_FUNC Rect         IMAQ_STDCALL imaqMakeRectFromRotatedRect(RotatedRect rotatedRect);
IMAQ_FUNC RotatedRect  IMAQ_STDCALL imaqMakeRotatedRect(int top, int left, int height, int width, double angle);
IMAQ_FUNC RotatedRect  IMAQ_STDCALL imaqMakeRotatedRectFromRect(Rect rect);
IMAQ_FUNC int          IMAQ_STDCALL imaqMulticoreOptions(MulticoreOperation operation, unsigned int* customNumCores);

//============================================================================
//  Tool Window functions
//============================================================================
IMAQ_FUNC int   IMAQ_STDCALL imaqCloseToolWindow(void);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetCurrentTool(Tool* currentTool);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetLastEvent(WindowEventType* type, int* windowNumber, Tool* tool, Rect* rect);
IMAQ_FUNC void* IMAQ_STDCALL imaqGetToolWindowHandle(void);
IMAQ_FUNC int   IMAQ_STDCALL imaqGetToolWindowPos(Point* position);
IMAQ_FUNC int   IMAQ_STDCALL imaqIsToolWindowVisible(int* visible);
IMAQ_FUNC int   IMAQ_STDCALL imaqMoveToolWindow(Point position);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetCurrentTool(Tool currentTool);
#ifndef __GNUC__
IMAQ_FUNC int   IMAQ_STDCALL imaqSetEventCallback(EventCallback callback, int synchronous);
#endif
IMAQ_FUNC int   IMAQ_STDCALL imaqSetToolColor(const RGBValue* color);
IMAQ_FUNC int   IMAQ_STDCALL imaqSetupToolWindow(int showCoordinates, int maxIconsPerLine, const ToolWindowOptions* options);
IMAQ_FUNC int   IMAQ_STDCALL imaqShowToolWindow(int visible);

//============================================================================
//  Meter functions
//============================================================================
IMAQ_FUNC MeterArc* IMAQ_STDCALL imaqGetMeterArc(int lightNeedle, MeterArcMode mode, const ROI* roi, PointFloat base, PointFloat start, PointFloat end);
IMAQ_FUNC int       IMAQ_STDCALL imaqReadMeter(const Image* image, const MeterArc* arcInfo, double* percentage, PointFloat* endOfNeedle);

//============================================================================
//  Calibration functions
//============================================================================
IMAQ_FUNC int                        IMAQ_STDCALL imaqCopyCalibrationInfo2(Image* dest, Image* source, Point offset);
IMAQ_FUNC int                        IMAQ_STDCALL imaqCorrectCalibratedImage(Image* dest, const Image* source, PixelValue fill, InterpolationMethod method, const ROI* roi);
IMAQ_FUNC CalibrationInfo*           IMAQ_STDCALL imaqGetCalibrationInfo2(const Image* image);
IMAQ_FUNC CalibrationInfo*           IMAQ_STDCALL imaqGetCalibrationInfo3(Image* image, unsigned int isGetErrorMap);
IMAQ_FUNC int                        IMAQ_STDCALL imaqLearnCalibrationGrid(Image* image, const ROI* roi, const LearnCalibrationOptions* options, const GridDescriptor* grid, const CoordinateSystem* system, const RangeFloat* range, float* quality);
IMAQ_FUNC int                        IMAQ_STDCALL imaqLearnCalibrationPoints(Image* image, const CalibrationPoints* points, const ROI* roi, const LearnCalibrationOptions* options, const GridDescriptor* grid, const CoordinateSystem* system, float* quality);
IMAQ_FUNC int                        IMAQ_STDCALL imaqSetCoordinateSystem(Image* image, const CoordinateSystem* system);
IMAQ_FUNC int                        IMAQ_STDCALL imaqSetSimpleCalibration(Image* image, ScalingMethod method, int learnTable, const GridDescriptor* grid, const CoordinateSystem* system);
IMAQ_FUNC TransformReport*           IMAQ_STDCALL imaqTransformPixelToRealWorld(const Image* image, const PointFloat* pixelCoordinates, int numCoordinates);
IMAQ_FUNC TransformReport*           IMAQ_STDCALL imaqTransformRealWorldToPixel(const Image* image, const PointFloat* realWorldCoordinates, int numCoordinates);
IMAQ_FUNC int                        IMAQ_STDCALL imaqSetSimpleCalibration2(Image* image, const GridDescriptor* gridDescriptor);
IMAQ_FUNC int                        IMAQ_STDCALL imaqCalibrationSetAxisInfo(Image* image, CoordinateSystem* axisInfo);
IMAQ_FUNC int                        IMAQ_STDCALL imaqCalibrationGetThumbnailImage(Image* templateImage, Image* image, CalibrationThumbnailType type, unsigned int index);
IMAQ_FUNC GetCalibrationInfoReport*  IMAQ_STDCALL imaqCalibrationGetCalibrationInfo(Image* image, unsigned int isGetErrorMap);
IMAQ_FUNC GetCameraParametersReport* IMAQ_STDCALL imaqCalibrationGetCameraParameters(Image* templateImage);
IMAQ_FUNC int                        IMAQ_STDCALL imaqCalibrationCompactInformation(Image* image);

//============================================================================
//  Pixel Manipulation functions
//============================================================================
IMAQ_FUNC int    IMAQ_STDCALL imaqArrayToComplexPlane(Image* dest, const Image* source, const float* newPixels, ComplexPlane plane);
IMAQ_FUNC float* IMAQ_STDCALL imaqComplexPlaneToArray(const Image* image, ComplexPlane plane, Rect rect, int* rows, int* columns);
IMAQ_FUNC int    IMAQ_STDCALL imaqExtractColorPlanes(const Image* image, ColorMode mode, Image* plane1, Image* plane2, Image* plane3);
IMAQ_FUNC int    IMAQ_STDCALL imaqExtractComplexPlane(Image* dest, const Image* source, ComplexPlane plane);
IMAQ_FUNC int    IMAQ_STDCALL imaqFillImage(Image* image, PixelValue value, const Image* mask);
IMAQ_FUNC void*  IMAQ_STDCALL imaqGetLine(const Image* image, Point start, Point end, int* numPoints);
IMAQ_FUNC int    IMAQ_STDCALL imaqGetPixel(const Image* image, Point pixel, PixelValue* value);
IMAQ_FUNC int    IMAQ_STDCALL imaqReplaceColorPlanes(Image* dest, const Image* source, ColorMode mode, const Image* plane1, const Image* plane2, const Image* plane3);
IMAQ_FUNC int    IMAQ_STDCALL imaqReplaceComplexPlane(Image* dest, const Image* source, const Image* newValues, ComplexPlane plane);
IMAQ_FUNC int    IMAQ_STDCALL imaqSetLine(Image* image, const void* array, int arraySize, Point start, Point end);
IMAQ_FUNC int    IMAQ_STDCALL imaqSetPixel(Image* image, Point coord, PixelValue value);

//============================================================================
//  Color Matching functions
//============================================================================
IMAQ_FUNC ColorInformation* IMAQ_STDCALL imaqLearnColor(const Image* image, const ROI* roi, ColorSensitivity sensitivity, int saturation);
IMAQ_FUNC int*              IMAQ_STDCALL imaqMatchColor(const Image* image, const ColorInformation* info, const ROI* roi, int* numScores);

//============================================================================
//  Frequency Domain Analysis functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqAttenuate(Image* dest, const Image* source, AttenuateMode highlow);
IMAQ_FUNC int IMAQ_STDCALL imaqConjugate(Image* dest, const Image* source);
IMAQ_FUNC int IMAQ_STDCALL imaqFFT(Image* dest, const Image* source);
IMAQ_FUNC int IMAQ_STDCALL imaqFlipFrequencies(Image* dest, const Image* source);
IMAQ_FUNC int IMAQ_STDCALL imaqInverseFFT(Image* dest, const Image* source);
IMAQ_FUNC int IMAQ_STDCALL imaqTruncate(Image* dest, const Image* source, TruncateMode highlow, float ratioToKeep);

//============================================================================
//  Barcode I/O functions
//============================================================================
IMAQ_FUNC int               IMAQ_STDCALL imaqGradeDataMatrixBarcodeAIM(const Image* image, AIMGradeReport* report);
IMAQ_FUNC BarcodeInfo*      IMAQ_STDCALL imaqReadBarcode(const Image* image, BarcodeType type, const ROI* roi, int validate);
IMAQ_FUNC DataMatrixReport* IMAQ_STDCALL imaqReadDataMatrixBarcode2(Image* image, const ROI* roi, DataMatrixGradingMode prepareForGrading, const DataMatrixDescriptionOptions* descriptionOptions, const DataMatrixSizeOptions* sizeOptions, const DataMatrixSearchOptions* searchOptions);
IMAQ_FUNC Barcode2DInfo*    IMAQ_STDCALL imaqReadPDF417Barcode(const Image* image, const ROI* roi, Barcode2DSearchMode searchMode, unsigned int* numBarcodes);
IMAQ_FUNC QRCodeReport*     IMAQ_STDCALL imaqReadQRCode(Image* image, const ROI* roi, QRGradingMode reserved, const QRCodeDescriptionOptions* descriptionOptions, const QRCodeSizeOptions* sizeOptions, const QRCodeSearchOptions* searchOptions);

//============================================================================
//  LCD functions
//============================================================================
IMAQ_FUNC int        IMAQ_STDCALL imaqFindLCDSegments(ROI* roi, const Image* image, const LCDOptions* options);
IMAQ_FUNC LCDReport* IMAQ_STDCALL imaqReadLCD(const Image* image, const ROI* roi, const LCDOptions* options);

//============================================================================
//  Shape Matching functions
//============================================================================
IMAQ_FUNC ShapeReport* IMAQ_STDCALL imaqMatchShape(Image* dest, Image* source, const Image* templateImage, int scaleInvariant, int connectivity8, double tolerance, int* numMatches);

//============================================================================
//  Contours functions
//============================================================================
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqAddAnnulusContour(ROI* roi, Annulus annulus);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqAddClosedContour(ROI* roi, const Point* points, int numPoints);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqAddLineContour(ROI* roi, Point start, Point end);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqAddOpenContour(ROI* roi, const Point* points, int numPoints);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqAddOvalContour(ROI* roi, Rect boundingBox);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqAddPointContour(ROI* roi, Point point);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqAddRectContour(ROI* roi, Rect rect);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqAddRotatedRectContour2(ROI* roi, RotatedRect rect);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqCopyContour(ROI* destRoi, const ROI* sourceRoi, ContourID id);
IMAQ_FUNC ContourID     IMAQ_STDCALL imaqGetContour(const ROI* roi, unsigned int index);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetContourColor(const ROI* roi, ContourID id, RGBValue* contourColor);
IMAQ_FUNC int           IMAQ_STDCALL imaqGetContourCount(const ROI* roi);
IMAQ_FUNC ContourInfo2* IMAQ_STDCALL imaqGetContourInfo2(const ROI* roi, ContourID id);
IMAQ_FUNC int           IMAQ_STDCALL imaqMoveContour(ROI* roi, ContourID id, int deltaX, int deltaY);
IMAQ_FUNC int           IMAQ_STDCALL imaqRemoveContour(ROI* roi, ContourID id);
IMAQ_FUNC int           IMAQ_STDCALL imaqSetContourColor(ROI* roi, ContourID id, const RGBValue* color);

//============================================================================
//  Regions of Interest functions
//============================================================================
IMAQ_FUNC int  IMAQ_STDCALL imaqConstructROI2(const Image* image, ROI* roi, Tool initialTool, const ToolWindowOptions* tools, const ConstructROIOptions2* options, int* okay);
IMAQ_FUNC ROI* IMAQ_STDCALL imaqCreateROI(void);
IMAQ_FUNC int  IMAQ_STDCALL imaqGetROIBoundingBox(const ROI* roi, Rect* boundingBox);
IMAQ_FUNC int  IMAQ_STDCALL imaqGetROIColor(const ROI* roi, RGBValue* roiColor);
IMAQ_FUNC ROI* IMAQ_STDCALL imaqGetWindowROI(int windowNumber);
IMAQ_FUNC int  IMAQ_STDCALL imaqSetROIColor(ROI* roi, const RGBValue* color);
IMAQ_FUNC int  IMAQ_STDCALL imaqSetWindowROI(int windowNumber, const ROI* roi);

//============================================================================
//  Image Analysis functions
//============================================================================
IMAQ_FUNC int              IMAQ_STDCALL imaqCentroid(const Image* image, PointFloat* centroid, const Image* mask);
IMAQ_FUNC Curve*           IMAQ_STDCALL imaqExtractCurves(const Image* image, const ROI* roi, const CurveOptions* curveOptions, unsigned int* numCurves);
IMAQ_FUNC HistogramReport* IMAQ_STDCALL imaqHistogram(const Image* image, int numClasses, float min, float max, const Image* mask);
IMAQ_FUNC LinearAverages*  IMAQ_STDCALL imaqLinearAverages2(Image* image, LinearAveragesMode mode, Rect rect);
IMAQ_FUNC LineProfile*     IMAQ_STDCALL imaqLineProfile(const Image* image, Point start, Point end);
IMAQ_FUNC QuantifyReport*  IMAQ_STDCALL imaqQuantify(const Image* image, const Image* mask);

//============================================================================
//  Error Management functions
//============================================================================
IMAQ_FUNC int         IMAQ_STDCALL imaqClearError(void);
IMAQ_FUNC char*       IMAQ_STDCALL imaqGetErrorText(int errorCode);
IMAQ_FUNC int         IMAQ_STDCALL imaqGetLastError(void);
IMAQ_FUNC const char* IMAQ_STDCALL imaqGetLastErrorFunc(void);
IMAQ_FUNC int         IMAQ_STDCALL imaqSetError(int errorCode, const char* function);

//============================================================================
//  Threshold functions
//============================================================================
IMAQ_FUNC ThresholdData* IMAQ_STDCALL imaqAutoThreshold2(Image* dest, const Image* source, int numClasses, ThresholdMethod method, const Image* mask);
IMAQ_FUNC int            IMAQ_STDCALL imaqLocalThreshold(Image* dest, const Image* source, unsigned int windowWidth, unsigned int windowHeight, LocalThresholdMethod method, double deviationWeight, ObjectType type, float replaceValue);
IMAQ_FUNC int            IMAQ_STDCALL imaqMagicWand(Image* dest, const Image* source, Point coord, float tolerance, int connectivity8, float replaceValue);
IMAQ_FUNC int            IMAQ_STDCALL imaqMultithreshold(Image* dest, const Image* source, const ThresholdData* ranges, int numRanges);
IMAQ_FUNC int            IMAQ_STDCALL imaqThreshold(Image* dest, const Image* source, float rangeMin, float rangeMax, int useNewValue, float newValue);

//============================================================================
//  Memory Management functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqDispose(void* object);

//============================================================================
//  Pattern Matching functions
//============================================================================
IMAQ_FUNC CircleMatch*              IMAQ_STDCALL imaqDetectCircles(const Image* image, const CircleDescriptor* circleDescriptor, const CurveOptions* curveOptions, const ShapeDetectionOptions* shapeDetectionOptions, const ROI* roi, int* numMatchesReturned);
IMAQ_FUNC EllipseMatch*             IMAQ_STDCALL imaqDetectEllipses(const Image* image, const EllipseDescriptor* ellipseDescriptor, const CurveOptions* curveOptions, const ShapeDetectionOptions* shapeDetectionOptions, const ROI* roi, int* numMatchesReturned);
IMAQ_FUNC LineMatch*                IMAQ_STDCALL imaqDetectLines(const Image* image, const LineDescriptor* lineDescriptor, const CurveOptions* curveOptions, const ShapeDetectionOptions* shapeDetectionOptions, const ROI* roi, int* numMatchesReturned);
IMAQ_FUNC RectangleMatch*           IMAQ_STDCALL imaqDetectRectangles(const Image* image, const RectangleDescriptor* rectangleDescriptor, const CurveOptions* curveOptions, const ShapeDetectionOptions* shapeDetectionOptions, const ROI* roi, int* numMatchesReturned);
IMAQ_FUNC FeatureData*              IMAQ_STDCALL imaqGetGeometricFeaturesFromCurves(const Curve* curves, unsigned int numCurves, const FeatureType* featureTypes, unsigned int numFeatureTypes, unsigned int* numFeatures);
IMAQ_FUNC FeatureData*              IMAQ_STDCALL imaqGetGeometricTemplateFeatureInfo(const Image* pattern, unsigned int* numFeatures);
IMAQ_FUNC int                       IMAQ_STDCALL imaqLearnColorPattern(Image* image, const LearnColorPatternOptions* options);
IMAQ_FUNC int                       IMAQ_STDCALL imaqLearnGeometricPattern(Image* image, PointFloat originOffset, const CurveOptions* curveOptions, const LearnGeometricPatternAdvancedOptions* advancedLearnOptions, const Image* mask);
IMAQ_FUNC MultipleGeometricPattern* IMAQ_STDCALL imaqLearnMultipleGeometricPatterns(const Image** patterns, unsigned int numberOfPatterns, const String255* labels);
IMAQ_FUNC int                       IMAQ_STDCALL imaqLearnPattern3(Image* image, LearningMode learningMode, LearnPatternAdvancedOptions* advancedOptions, const Image* mask);
IMAQ_FUNC PatternMatch*             IMAQ_STDCALL imaqMatchColorPattern(const Image* image, Image* pattern, const MatchColorPatternOptions* options, Rect searchRect, int* numMatches);
IMAQ_FUNC GeometricPatternMatch2*   IMAQ_STDCALL imaqMatchGeometricPattern2(const Image* image, const Image* pattern, const CurveOptions* curveOptions, const MatchGeometricPatternOptions* matchOptions, const MatchGeometricPatternAdvancedOptions2* advancedMatchOptions, const ROI* roi, int* numMatches);
IMAQ_FUNC GeometricPatternMatch2*   IMAQ_STDCALL imaqMatchMultipleGeometricPatterns(const Image* image, const MultipleGeometricPattern* multiplePattern, const ROI* roi, int* numMatches);
IMAQ_FUNC MultipleGeometricPattern* IMAQ_STDCALL imaqReadMultipleGeometricPatternFile(const char* fileName, String255 description);
IMAQ_FUNC PatternMatch*             IMAQ_STDCALL imaqRefineMatches(const Image* image, const Image* pattern, const PatternMatch* candidatesIn, int numCandidatesIn, MatchPatternOptions* options, MatchPatternAdvancedOptions* advancedOptions, int* numCandidatesOut);
IMAQ_FUNC int                       IMAQ_STDCALL imaqSetMultipleGeometricPatternsOptions(MultipleGeometricPattern* multiplePattern, const char* label, const CurveOptions* curveOptions, const MatchGeometricPatternOptions* matchOptions, const MatchGeometricPatternAdvancedOptions2* advancedMatchOptions);
IMAQ_FUNC int                       IMAQ_STDCALL imaqWriteMultipleGeometricPatternFile(const MultipleGeometricPattern* multiplePattern, const char* fileName, const char* description);
IMAQ_FUNC GeometricPatternMatch3*   IMAQ_STDCALL imaqMatchGeometricPattern3(const Image* image, const Image* pattern, const CurveOptions* curveOptions, const MatchGeometricPatternOptions* matchOptions, const MatchGeometricPatternAdvancedOptions3* advancedMatchOptions, const ROI* roi, size_t* numMatches);
IMAQ_FUNC int                       IMAQ_STDCALL imaqLearnGeometricPattern2(Image* image, PointFloat originOffset, double angleOffset, const CurveOptions* curveOptions, const LearnGeometricPatternAdvancedOptions2* advancedLearnOptions, const Image* mask);
IMAQ_FUNC PatternMatch*             IMAQ_STDCALL imaqMatchPattern3(const Image* image, const Image* pattern, const MatchPatternOptions* options, const MatchPatternAdvancedOptions* advancedOptions, const ROI* roi, int* numMatches);

//============================================================================
//  Overlay functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqClearOverlay(Image* image, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqCopyOverlay(Image* dest, const Image* source, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqGetOverlayProperties(const Image* image, const char* group, TransformBehaviors* transformBehaviors);
IMAQ_FUNC int IMAQ_STDCALL imaqMergeOverlay(Image* dest, const Image* source, const RGBValue* palette, unsigned int numColors, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayArc(Image* image, const ArcInfo* arc, const RGBValue* color, DrawMode drawMode, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayBitmap(Image* image, Point destLoc, const RGBValue* bitmap, unsigned int numCols, unsigned int numRows, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayClosedContour(Image* image, const Point* points, int numPoints, const RGBValue* color, DrawMode drawMode, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayLine(Image* image, Point start, Point end, const RGBValue* color, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayMetafile(Image* image, const void* metafile, Rect rect, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayOpenContour(Image* image, const Point* points, int numPoints, const RGBValue* color, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayOval(Image* image, Rect boundingBox, const RGBValue* color, DrawMode drawMode, char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayPoints(Image* image, const Point* points, int numPoints, const RGBValue* colors, int numColors, PointSymbol symbol, const UserPointSymbol* userSymbol, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayRect(Image* image, Rect rect, const RGBValue* color, DrawMode drawMode, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayROI(Image* image, const ROI* roi, PointSymbol symbol, const UserPointSymbol* userSymbol, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqOverlayText(Image* image, Point origin, const char* text, const RGBValue* color, const OverlayTextOptions* options, const char* group);
IMAQ_FUNC int IMAQ_STDCALL imaqSetOverlayProperties(Image* image, const char* group, TransformBehaviors* transformBehaviors);

//============================================================================
//  OCR functions
//============================================================================
IMAQ_FUNC CharSet*         IMAQ_STDCALL imaqCreateCharSet(void);
IMAQ_FUNC int              IMAQ_STDCALL imaqDeleteChar(CharSet* set, int index);
IMAQ_FUNC int              IMAQ_STDCALL imaqGetCharCount(const CharSet* set);
IMAQ_FUNC CharInfo2*       IMAQ_STDCALL imaqGetCharInfo2(const CharSet* set, int index);
IMAQ_FUNC int              IMAQ_STDCALL imaqReadOCRFile(const char* fileName, CharSet* set, String255 setDescription, ReadTextOptions* readOptions, OCRProcessingOptions* processingOptions, OCRSpacingOptions* spacingOptions);
IMAQ_FUNC ReadTextReport3* IMAQ_STDCALL imaqReadText3(const Image* image, const CharSet* set, const ROI* roi, const ReadTextOptions* readOptions, const OCRProcessingOptions* processingOptions, const OCRSpacingOptions* spacingOptions);
IMAQ_FUNC int              IMAQ_STDCALL imaqRenameChar(CharSet* set, int index, const char* newCharValue);
IMAQ_FUNC int              IMAQ_STDCALL imaqSetReferenceChar(const CharSet* set, int index, int isReferenceChar);
IMAQ_FUNC int              IMAQ_STDCALL imaqTrainChars(const Image* image, CharSet* set, int index, const char* charValue, const ROI* roi, const OCRProcessingOptions* processingOptions, const OCRSpacingOptions* spacingOptions);
IMAQ_FUNC int*             IMAQ_STDCALL imaqVerifyPatterns(const Image* image, const CharSet* set, const String255* expectedPatterns, int patternCount, const ROI* roi, int* numScores);
IMAQ_FUNC int*             IMAQ_STDCALL imaqVerifyText(const Image* image, const CharSet* set, const char* expectedString, const ROI* roi, int* numScores);
IMAQ_FUNC int              IMAQ_STDCALL imaqWriteOCRFile(const char* fileName, const CharSet* set, const char* setDescription, const ReadTextOptions* readOptions, const OCRProcessingOptions* processingOptions, const OCRSpacingOptions* spacingOptions);

//============================================================================
//  Geometric Matching functions
//============================================================================
IMAQ_FUNC ExtractContourReport*          IMAQ_STDCALL imaqExtractContour(Image* image, const ROI* roi, ExtractContourDirection direction, CurveParameters* curveParams, const ConnectionConstraint* connectionConstraintParams, unsigned int numOfConstraints, ExtractContourSelection selection, Image* contourImage);
IMAQ_FUNC int                            IMAQ_STDCALL imaqContourOverlay(Image* image, const Image* contourImage, const ContourOverlaySettings* pointsSettings, const ContourOverlaySettings* eqnSettings, const char* groupName);
IMAQ_FUNC ContourComputeCurvatureReport* IMAQ_STDCALL imaqContourComputeCurvature(const Image* contourImage, unsigned int kernel);
IMAQ_FUNC CurvatureAnalysisReport*       IMAQ_STDCALL imaqContourClassifyCurvature(const Image* contourImage, unsigned int kernel, RangeLabel* curvatureClasses, unsigned int numCurvatureClasses);
IMAQ_FUNC ComputeDistancesReport*        IMAQ_STDCALL imaqContourComputeDistances(const Image* targetImage, const Image* templateImage, const SetupMatchPatternData* matchSetupData, unsigned int smoothingKernel);
IMAQ_FUNC ClassifyDistancesReport*       IMAQ_STDCALL imaqContourClassifyDistances(const Image* targetImage, const Image* templateImage, const SetupMatchPatternData* matchSetupData, unsigned int smoothingKernel, const RangeLabel* distanceRanges, unsigned int numDistanceRanges);
IMAQ_FUNC ContourInfoReport*             IMAQ_STDCALL imaqContourInfo(const Image* contourImage);
IMAQ_FUNC SetupMatchPatternData*         IMAQ_STDCALL imaqContourSetupMatchPattern(MatchMode* matchMode, unsigned int enableSubPixelAccuracy, CurveParameters* curveParams, unsigned int useLearnCurveParameters, const RangeSettingDouble* rangeSettings, unsigned int numRangeSettings);
IMAQ_FUNC int                            IMAQ_STDCALL imaqContourAdvancedSetupMatchPattern(SetupMatchPatternData* matchSetupData, GeometricAdvancedSetupDataOption* geometricOptions, unsigned int numGeometricOptions);
IMAQ_FUNC ContourFitLineReport*          IMAQ_STDCALL imaqContourFitLine(Image* image, double pixelRadius);
IMAQ_FUNC PartialCircle*                 IMAQ_STDCALL imaqContourFitCircle(Image* image, double pixelRadius, int rejectOutliers);
IMAQ_FUNC PartialEllipse*                IMAQ_STDCALL imaqContourFitEllipse(Image* image, double pixelRadius, int rejectOutliers);
IMAQ_FUNC ContourFitSplineReport*        IMAQ_STDCALL imaqContourFitSpline(Image* image, int degree, int numberOfControlPoints);
IMAQ_FUNC ContourFitPolynomialReport*    IMAQ_STDCALL imaqContourFitPolynomial(Image* image, int order);

//============================================================================
//  Edge Detection functions
//============================================================================
IMAQ_FUNC FindCircularEdgeReport*   IMAQ_STDCALL imaqFindCircularEdge2(Image* image, const ROI* roi, const CoordinateSystem* baseSystem, const CoordinateSystem* newSystem, const FindCircularEdgeOptions* edgeOptions, const CircleFitOptions* circleFitOptions);
IMAQ_FUNC FindConcentricEdgeReport* IMAQ_STDCALL imaqFindConcentricEdge2(Image* image, const ROI* roi, const CoordinateSystem* baseSystem, const CoordinateSystem* newSystem, const FindConcentricEdgeOptions* edgeOptions, const ConcentricEdgeFitOptions* concentricEdgeFitOptions);

//============================================================================
//  Morphology Reconstruction functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqGrayMorphologyReconstruct(Image* dstImage, Image* srcImage, const Image* markerImage, PointFloat* points, int numOfPoints, MorphologyReconstructOperation operation, const StructuringElement* structuringElement, const ROI* roi);
IMAQ_FUNC int IMAQ_STDCALL imaqMorphologyReconstruct(Image* dstImage, Image* srcImage, const Image* markerImage, PointFloat* points, int numOfPoints, MorphologyReconstructOperation operation, Connectivity connectivity, const ROI* roi);

//============================================================================
//  Texture functions
//============================================================================
IMAQ_FUNC int                           IMAQ_STDCALL imaqDetectTextureDefect(ClassifierSession* session, Image* destImage, const Image* srcImage, const ROI* roi, int initialStepSize, int finalStepSize, unsigned char defectPixelValue, double minClassificationScore);
IMAQ_FUNC int                           IMAQ_STDCALL imaqClassificationTextureDefectOptions(ClassifierSession* session, WindowSize* windowOptions, WaveletOptions* waveletOptions, void** bandsUsed, int* numBandsUsed, CooccurrenceOptions* cooccurrenceOptions, unsigned char setOperation);
IMAQ_FUNC int                           IMAQ_STDCALL imaqCooccurrenceMatrix(const Image* srcImage, const ROI* roi, int levelPixel, const DisplacementVector* displacementVec, void* featureOptionArray, unsigned int featureOptionArraySize, void** cooccurrenceMatrixArray, int* coocurrenceMatrixRows, int* coocurrenceMatrixCols, void** featureVectorArray, int* featureVectorArraySize);
IMAQ_FUNC ExtractTextureFeaturesReport* IMAQ_STDCALL imaqExtractTextureFeatures(const Image* srcImage, const ROI* roi, const WindowSize* windowOptions, const WaveletOptions* waveletOptions, void* waveletBands, unsigned int numWaveletBands, const CooccurrenceOptions* cooccurrenceOptions, unsigned char useWindow);
IMAQ_FUNC WaveletBandsReport*           IMAQ_STDCALL imaqExtractWaveletBands(const Image* srcImage, const WaveletOptions* waveletOptions, void* waveletBands, unsigned int numWaveletBands);

//============================================================================
//  Regions of Interest Manipulation functions
//============================================================================
IMAQ_FUNC ROI*              IMAQ_STDCALL imaqMaskToROI(const Image* mask, int* withinLimit);
IMAQ_FUNC ROIProfile*       IMAQ_STDCALL imaqROIProfile(const Image* image, const ROI* roi);
IMAQ_FUNC int               IMAQ_STDCALL imaqROIToMask(Image* mask, const ROI* roi, int fillValue, const Image* imageModel, int* inSpace);
IMAQ_FUNC int               IMAQ_STDCALL imaqTransformROI2(ROI* roi, const CoordinateSystem* baseSystem, const CoordinateSystem* newSystem);
IMAQ_FUNC LabelToROIReport* IMAQ_STDCALL imaqLabelToROI(const Image* image, const unsigned int* labelsIn, unsigned int numLabelsIn, int maxNumVectors, int isExternelEdges);

//============================================================================
//  Morphology functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqGrayMorphology(Image* dest, Image* source, MorphologyMethod method, const StructuringElement* structuringElement);

//============================================================================
//  Classification functions
//============================================================================
IMAQ_FUNC int                            IMAQ_STDCALL imaqAddClassifierSample(Image* image, ClassifierSession* session, const ROI* roi, const char* sampleClass, double* featureVector, unsigned int vectorSize);
IMAQ_FUNC ClassifierReportAdvanced*      IMAQ_STDCALL imaqAdvanceClassify(Image* image, const ClassifierSession* session, const ROI* roi, double* featureVector, unsigned int vectorSize);
IMAQ_FUNC ClassifierReport*              IMAQ_STDCALL imaqClassify(Image* image, const ClassifierSession* session, const ROI* roi, double* featureVector, unsigned int vectorSize);
IMAQ_FUNC ClassifierSession*             IMAQ_STDCALL imaqCreateClassifier(ClassifierType type);
IMAQ_FUNC int                            IMAQ_STDCALL imaqDeleteClassifierSample(ClassifierSession* session, int index);
IMAQ_FUNC ClassifierAccuracyReport*      IMAQ_STDCALL imaqGetClassifierAccuracy(const ClassifierSession* session);
IMAQ_FUNC ClassifierSampleInfo*          IMAQ_STDCALL imaqGetClassifierSampleInfo(const ClassifierSession* session, int index, int* numSamples);
IMAQ_FUNC int                            IMAQ_STDCALL imaqGetColorClassifierOptions(const ClassifierSession* session, ColorOptions* options);
IMAQ_FUNC int                            IMAQ_STDCALL imaqGetNearestNeighborOptions(const ClassifierSession* session, NearestNeighborOptions* options);
IMAQ_FUNC int                            IMAQ_STDCALL imaqGetParticleClassifierOptions2(const ClassifierSession* session, ParticleClassifierPreprocessingOptions2* preprocessingOptions, ParticleClassifierOptions* options);
IMAQ_FUNC ClassifierSession*             IMAQ_STDCALL imaqReadClassifierFile(ClassifierSession* session, const char* fileName, ReadClassifierFileMode mode, ClassifierType* type, ClassifierEngineType* engine, String255 description);
IMAQ_FUNC int                            IMAQ_STDCALL imaqRelabelClassifierSample(ClassifierSession* session, int index, const char* newClass);
IMAQ_FUNC int                            IMAQ_STDCALL imaqSetParticleClassifierOptions2(ClassifierSession* session, const ParticleClassifierPreprocessingOptions2* preprocessingOptions, const ParticleClassifierOptions* options);
IMAQ_FUNC int                            IMAQ_STDCALL imaqSetColorClassifierOptions(ClassifierSession* session, const ColorOptions* options);
IMAQ_FUNC NearestNeighborTrainingReport* IMAQ_STDCALL imaqTrainNearestNeighborClassifier(ClassifierSession* session, const NearestNeighborOptions* options);
IMAQ_FUNC int                            IMAQ_STDCALL imaqWriteClassifierFile(const ClassifierSession* session, const char* fileName, WriteClassifierFileMode mode, const String255 description);

//============================================================================
//  Measure Distances functions
//============================================================================
IMAQ_FUNC ClampMax2Report* IMAQ_STDCALL imaqClampMax2(Image* image, const ROI* roi, const CoordinateSystem* baseSystem, const CoordinateSystem* newSystem, const CurveOptions* curveSettings, const ClampSettings* clampSettings, const ClampOverlaySettings* clampOverlaySettings);

//============================================================================
//  Inspection functions
//============================================================================
IMAQ_FUNC int IMAQ_STDCALL imaqCompareGoldenTemplate(const Image* image, const Image* goldenTemplate, Image* brightDefects, Image* darkDefects, const InspectionAlignment* alignment, const InspectionOptions* options);
IMAQ_FUNC int IMAQ_STDCALL imaqLearnGoldenTemplate(Image* goldenTemplate, PointFloat originOffset, const Image* mask);
//============================================================================
//  Obsolete functions
//============================================================================
IMAQ_FUNC int                    IMAQ_STDCALL imaqRotate(Image* dest, const Image* source, float angle, PixelValue fill, InterpolationMethod method);
IMAQ_FUNC int                    IMAQ_STDCALL imaqWritePNGFile(const Image* image, const char* fileName, unsigned int compressionSpeed, const RGBValue* colorTable);
IMAQ_FUNC ParticleReport*        IMAQ_STDCALL imaqSelectParticles(const Image* image, const ParticleReport* reports, int reportCount, int rejectBorder, const SelectParticleCriteria* criteria, int criteriaCount, int* selectedCount);
IMAQ_FUNC int                    IMAQ_STDCALL imaqParticleFilter(Image* dest, Image* source, const ParticleFilterCriteria* criteria, int criteriaCount, int rejectMatches, int connectivity8);
IMAQ_FUNC ParticleReport*        IMAQ_STDCALL imaqGetParticleInfo(Image* image, int connectivity8, ParticleInfoMode mode, int* reportCount);
IMAQ_FUNC int                    IMAQ_STDCALL imaqCalcCoeff(const Image* image, const ParticleReport* report, MeasurementValue parameter, float* coefficient);
IMAQ_FUNC EdgeReport*            IMAQ_STDCALL imaqEdgeTool(const Image* image, const Point* points, int numPoints, const EdgeOptions* options, int* numEdges);
IMAQ_FUNC CircleReport*          IMAQ_STDCALL imaqCircles(Image* dest, const Image* source, float minRadius, float maxRadius, int* numCircles);
IMAQ_FUNC int                    IMAQ_STDCALL imaqLabel(Image* dest, Image* source, int connectivity8, int* particleCount);
IMAQ_FUNC int                    IMAQ_STDCALL imaqFitEllipse(const PointFloat* points, int numPoints, BestEllipse* ellipse);
IMAQ_FUNC int                    IMAQ_STDCALL imaqFitCircle(const PointFloat* points, int numPoints, BestCircle* circle);
IMAQ_FUNC Color                  IMAQ_STDCALL imaqChangeColorSpace(const Color* sourceColor, ColorMode sourceSpace, ColorMode destSpace);
IMAQ_FUNC PatternMatch*          IMAQ_STDCALL imaqMatchPattern(const Image* image, Image* pattern, const MatchPatternOptions* options, Rect searchRect, int* numMatches);
IMAQ_FUNC int                    IMAQ_STDCALL imaqConvex(Image* dest, const Image* source);
IMAQ_FUNC int                    IMAQ_STDCALL imaqIsVisionInfoPresent(const Image* image, VisionInfoType type, int* present);
IMAQ_FUNC int                    IMAQ_STDCALL imaqLineGaugeTool(const Image* image, Point start, Point end, LineGaugeMethod method, const EdgeOptions* edgeOptions, const CoordinateTransform* reference, float* distance);
IMAQ_FUNC int                    IMAQ_STDCALL imaqBestCircle(const PointFloat* points, int numPoints, PointFloat* center, double* radius);
IMAQ_FUNC int                    IMAQ_STDCALL imaqSavePattern(const Image* pattern, const char* fileName);
IMAQ_FUNC int                    IMAQ_STDCALL imaqLoadPattern(Image* pattern, const char* fileName);
IMAQ_FUNC int                    IMAQ_STDCALL imaqTransformROI(ROI* roi, Point originStart, float angleStart, Point originFinal, float angleFinal);
IMAQ_FUNC int                    IMAQ_STDCALL imaqCoordinateReference(const Point* points, ReferenceMode mode, Point* origin, float* angle);
IMAQ_FUNC ContourInfo*           IMAQ_STDCALL imaqGetContourInfo(const ROI* roi, ContourID id);
IMAQ_FUNC int                    IMAQ_STDCALL imaqSetWindowOverlay(int windowNumber, const Overlay* overlay);
IMAQ_FUNC Overlay*               IMAQ_STDCALL imaqCreateOverlayFromROI(const ROI* roi);
IMAQ_FUNC Overlay*               IMAQ_STDCALL imaqCreateOverlayFromMetafile(const void* metafile);
IMAQ_FUNC int                    IMAQ_STDCALL imaqSetCalibrationInfo(Image* image, CalibrationUnit unit, float xDistance, float yDistance);
IMAQ_FUNC int                    IMAQ_STDCALL imaqGetCalibrationInfo(const Image* image, CalibrationUnit* unit, float* xDistance, float* yDistance);
IMAQ_FUNC int                    IMAQ_STDCALL imaqConstructROI(const Image* image, ROI* roi, Tool initialTool, const ToolWindowOptions* tools, const ConstructROIOptions* options, int* okay);
IMAQ_FUNC int                    IMAQ_STDCALL imaqGetParticleClassifierOptions(const ClassifierSession* session, ParticleClassifierPreprocessingOptions* preprocessingOptions, ParticleClassifierOptions* options);
IMAQ_FUNC int                    IMAQ_STDCALL imaqZoomWindow(int windowNumber, int xZoom, int yZoom, Point center);
IMAQ_FUNC int                    IMAQ_STDCALL imaqGetWindowZoom(int windowNumber, int* xZoom, int* yZoom);
IMAQ_FUNC int                    IMAQ_STDCALL imaqParticleFilter3(Image* dest, Image* source, const ParticleFilterCriteria2* criteria, int criteriaCount, const ParticleFilterOptions* options, const ROI* roi, int* numParticles);
IMAQ_FUNC ReadTextReport2*       IMAQ_STDCALL imaqReadText2(const Image* image, const CharSet* set, const ROI* roi, const ReadTextOptions* readOptions, const OCRProcessingOptions* processingOptions, const OCRSpacingOptions* spacingOptions);
IMAQ_FUNC int                    IMAQ_STDCALL imaqLearnPattern2(Image* image, LearningMode learningMode, LearnPatternAdvancedOptions* advancedOptions);
IMAQ_FUNC int                    IMAQ_STDCALL imaqConvolve(Image* dest, Image* source, const float* kernel, int matrixRows, int matrixCols, float normalize, const Image* mask);
IMAQ_FUNC int                    IMAQ_STDCALL imaqDivideConstant(Image* dest, const Image* source, PixelValue value);
IMAQ_FUNC int                    IMAQ_STDCALL imaqDivide(Image* dest, const Image* sourceA, const Image* sourceB);
IMAQ_FUNC EdgeReport2*           IMAQ_STDCALL imaqEdgeTool3(const Image* image, const ROI* roi, EdgeProcess processType, const EdgeOptions2* edgeOptions);
IMAQ_FUNC ConcentricRakeReport*  IMAQ_STDCALL imaqConcentricRake(const Image* image, const ROI* roi, ConcentricRakeDirection direction, EdgeProcess process, const RakeOptions* options);
IMAQ_FUNC SpokeReport*           IMAQ_STDCALL imaqSpoke(const Image* image, const ROI* roi, SpokeDirection direction, EdgeProcess process, const SpokeOptions* options);
IMAQ_FUNC int                    IMAQ_STDCALL imaqLearnPattern(Image* image, LearningMode learningMode);
IMAQ_FUNC int                    IMAQ_STDCALL imaqLookup(Image* dest, const Image* source, const short* table, const Image* mask);
IMAQ_FUNC PatternMatch*          IMAQ_STDCALL imaqMatchPattern2(const Image* image, const Image* pattern, const MatchPatternOptions* options, const MatchPatternAdvancedOptions* advancedOptions, Rect searchRect, int* numMatches);
IMAQ_FUNC int                    IMAQ_STDCALL imaqSetParticleClassifierOptions(ClassifierSession* session, const ParticleClassifierPreprocessingOptions* preprocessingOptions, const ParticleClassifierOptions* options);
IMAQ_FUNC int                    IMAQ_STDCALL imaqCopyCalibrationInfo(Image* dest, const Image* source);
IMAQ_FUNC int                    IMAQ_STDCALL imaqParticleFilter2(Image* dest, Image* source, const ParticleFilterCriteria2* criteria, int criteriaCount, int rejectMatches, int connectivity8, int* numParticles);
IMAQ_FUNC EdgeReport*            IMAQ_STDCALL imaqEdgeTool2(const Image* image, const Point* points, int numPoints, EdgeProcess process, const EdgeOptions* options, int* numEdges);
IMAQ_FUNC ContourID              IMAQ_STDCALL imaqAddRotatedRectContour(ROI* roi, RotatedRect rect);
IMAQ_FUNC Barcode2DInfo*         IMAQ_STDCALL imaqReadDataMatrixBarcode(const Image* image, const ROI* roi, const DataMatrixOptions* options, unsigned int* numBarcodes);
IMAQ_FUNC LinearAverages*        IMAQ_STDCALL imaqLinearAverages(const Image* image, Rect rect);
IMAQ_FUNC GeometricPatternMatch* IMAQ_STDCALL imaqMatchGeometricPattern(const Image* image, const Image* pattern, const CurveOptions* curveOptions, const MatchGeometricPatternOptions* matchOptions, const MatchGeometricPatternAdvancedOptions* advancedMatchOptions, const ROI* roi, int* numMatches);
IMAQ_FUNC CharInfo*              IMAQ_STDCALL imaqGetCharInfo(const CharSet* set, int index);
IMAQ_FUNC ReadTextReport*        IMAQ_STDCALL imaqReadText(const Image* image, const CharSet* set, const ROI* roi, const ReadTextOptions* readOptions, const OCRProcessingOptions* processingOptions, const OCRSpacingOptions* spacingOptions);
IMAQ_FUNC ThresholdData*         IMAQ_STDCALL imaqAutoThreshold(Image* dest, Image* source, int numClasses, ThresholdMethod method);
IMAQ_FUNC ColorHistogramReport*  IMAQ_STDCALL imaqColorHistogram(Image* image, int numClasses, ColorMode mode, const Image* mask);
IMAQ_FUNC RakeReport*            IMAQ_STDCALL imaqRake(const Image* image, const ROI* roi, RakeDirection direction, EdgeProcess process, const RakeOptions* options);
#endif

