cotton_double/Include/ClassicMIL/MILDyn/milblob.h

1262 lines
66 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//!
//! \file milblob.h
//!
//! \brief Milblob CAPI header (Mblob...)
//!
//! AUTHOR: Matrox Imaging
//!
//! COPYRIGHT NOTICE:
//! Copyright © Matrox Electronic Systems Ltd., 1992-2023.
//! All Rights Reserved
// Revision: 10.60.0776
////////////////////////////////////////////////////////////////////////////////
#ifndef __MILBLOB_H__
#define __MILBLOB_H__
#if (!M_MIL_LITE) // MIL FULL ONLY
/* C++ directive if needed */
#ifdef __cplusplus
extern "C"
{
#endif
////////////////////////////////////////////////////////////////////////////////
// MblobAlloc()
// ContextType
#define M_DEFAULT 0x10000000L // Also defined in mil.h
////////////////////////////////////////////////////////////////////////////////
// MblobControl() (no inquire)
// ControlType for context:
#define M_STOP_CALCULATE 116L
#define M_ALL_FEATURES 0x100L // All features are set to M_ENABLE or M_DISABLE
////////////////////////////////////////////////////////////////////////////////
// MblobInquire() (no control)
// InquireType for context:
#define M_OWNER_SYSTEM 1101L // Also defined in mil.h
#define M_MODIFICATION_COUNT 5010L // Also defined in mil.h
// InquireType for result:
#define M_OWNER_SYSTEM 1101L // Also defined in mil.h
#define M_MAX_LABEL 16L
#define M_MAX_LABEL_VALUE 2939L
////////////////////////////////////////////////////////////////////////////////
// MblobControl() / MblobInquire()
// ControlType for context:
#define M_FERET_GENERAL_ANGLE 62L // Also defined in miledge.h
#define M_MOMENT_GENERAL_ORDER_X 2469L
#define M_MOMENT_GENERAL_ORDER_Y 2470L
#define M_MOMENT_GENERAL_MODE 2471L
#define M_MOMENT_THIRD_ORDER_MODE 5482L
#define M_SORT1 0x02000000L
#define M_SORT2 0x04000000L
#define M_SORT3 0x06000000L
#define M_SORT1_DIRECTION 2472L
#define M_SORT2_DIRECTION 2473L
#define M_SORT3_DIRECTION 2474L
#define M_BLOB_IDENTIFICATION_MODE 2960L
#define M_CONNECTIVITY 2486L
#define M_FOREGROUND_VALUE 4L // Also defined in other MIL module
#define M_PIXEL_ASPECT_RATIO 5L
#define M_SAVE_RUNS 14L
#define M_IDENTIFIER_TYPE 15L
#define M_MAX_BLOBS 18L
#define M_NUMBER_OF_FERETS 63L // Also defined in miledge.h
#define M_RETURN_PARTIAL_RESULTS 70L
#define M_FERET_ANGLE_SEARCH_START 90L // Also defined in miledge.h
#define M_FERET_ANGLE_SEARCH_END 92L // Also defined in miledge.h
#define M_TIMEOUT 2077L // Also defined in mil.h
#define M_RELABEL_CONSECUTIVE 2713L
// To enable a set of features
#define M_FERET_CONTACT_POINTS 0x30000L
// Binary only features:
#define M_BOX 0x101L // Also defined in miledge.h
#define M_CONTACT_POINTS 0x102L // Also defined in miledge.h
#define M_CHAINS 209L // Also defined in miledge.h
#define M_RUNS 2475L
#define M_CONVEX_HULL 80L
#define M_MIN_AREA_BOX 128L
#define M_MIN_PERIMETER_BOX 143L
#define M_WORLD_BOX 1487L
#define M_FERETS 2476L
#define M_CONVEX_PERIMETER 20L
#define M_FERET_GENERAL 0x400L
#define M_FERET_PERPENDICULAR_TO_MIN_DIAMETER 123L
#define M_FERET_PERPENDICULAR_TO_MAX_DIAMETER 124L
#define M_FERET_MIN_DIAMETER_ELONGATION 125L
#define M_FERET_MAX_DIAMETER_ELONGATION 126L
#define M_RECTANGULARITY 127L
#define M_PERIMETER 3L
#define M_BREADTH 49L
#define M_COMPACTNESS 25L
#define M_ELONGATION 50L
#define M_LENGTH 0x00002000L
#define M_INTERCEPT 2477L
#define M_EULER_NUMBER 47L
#define M_NUMBER_OF_HOLES 26L
#define M_ROUGHNESS 28L
// Grayscale only features:
#define M_BLOB_CONTRAST 48L
#define M_MAX_PIXEL 31L
#define M_MIN_PIXEL 30L
#define M_MEAN_PIXEL 32L
#define M_SUM_PIXEL 29L
#define M_SUM_PIXEL_SQUARED 46L
#define M_SIGMA_PIXEL 33L
// Binary and grayscale features
#define M_FERET_AT_PRINCIPAL_AXIS_ANGLE 119L
#define M_FERET_AT_SECONDARY_AXIS_ANGLE 120L
#define M_FERET_PRINCIPAL_AXIS_ELONGATION 121L
#define M_CENTER_OF_GRAVITY 0x103L // Also defined in miledge.h
#define M_MOMENT_FIRST_ORDER 2478L
#define M_MOMENT_SECOND_ORDER 2479L
#define M_MOMENT_THIRD_ORDER 8199L
#define M_MOMENT_GENERAL 0x800L
// Combination flags for binary and grayscale features
#define M_BINARY 0x00001000L
#define M_GREYSCALE 0x0200L
#define M_GRAYSCALE M_GREYSCALE
// ControlType for result:
#define M_INPUT_SELECT_UNITS 20L
#define M_RESULT_OUTPUT_UNITS 1300L // Also defined in milim.h
#define M_INDEX_MODE 5402L
#define M_LABEL 5403L
#define M_INDEX 217L // Also defined in mil.h
#define M_USE_MACRO 5404L
// ControlValue:
#define M_DEFAULT 0x10000000L // Also defined in mil.h
#define M_ENABLE -9997L // Also defined in mil.h
#define M_DISABLE -9999L // Also defined in mil.h
// For M_SORTn
#define M_NO_SORT 0L
// For M_SORTn_DIRECTION
#define M_SORT_UP 1L
#define M_SORT_DOWN 2L
// For M_MOMENT_THIRD_ORDER_MODE
#define M_PRECISE 0x00040000L // already defined
#define M_FAST 0x00002000L // already defined in milim.h
// For M_MOMENT_GENERAL_MODE
#define M_ORDINARY 0x400L
#define M_CENTRAL 0x800L
// For M_CONNECTIVITY
#define M_4_CONNECTED 0x00000010L
#define M_8_CONNECTED 0x00000020L
// For M_BLOB_IDENTIFICATION_MODE
#define M_WHOLE_IMAGE 1L
#define M_INDIVIDUAL 2L
#define M_LABELLED 4L
#define M_LABELED M_LABELLED // One "L" is american english while two "LL" is British.
#define M_LABELED_TOUCHING 5L
// For M_FOREGROUND_VALUE
#define M_NONZERO 0x80L // Same as M_FOREGROUND_WHITE
#define M_ZERO 0x100L // Same as M_FOREGROUND_BLACK
#define M_NON_ZERO M_NONZERO
// For output units (M_RESULT_OUTPUT_UNITS and M_INPUT_SELECT_UNITS)
#define M_PIXEL 0x1000L
#define M_WORLD 0x2000L
#define M_ACCORDING_TO_CALIBRATION 1301L
// For M_NUMBER_OF_FERETS
#define M_MIN_FERETS 2L
////////////////////////////////////////////////////////////////////////////////
// MblobGetResult()
// LabelOrIndex:
#define M_INCLUDED_BLOBS 0x08000000L
#define M_GENERAL 0x20000000L // Also defined in milmod.h, milstr.h, ...
#define M_BLOB_LABEL(BlobLabel) (BlobLabel)
#define M_BLOB_INDEX_FLAG 0x04000000L // =utilities=
#define M_BLOB_INDEX(BlobIndex) ((BlobIndex) | M_BLOB_INDEX_FLAG)
// ResultType:
// Always available
#define M_LABEL_VALUE 1L
#define M_AREA 2L
#define M_INDEX_VALUE M_INDEX // Also defined in mil.h
#define M_BLOB_INCLUSION_STATE 0x108L
#define M_NUMBER 1009L // defined in milim.h, milmeas.h, ...
#define M_CALCULATION_TYPE 2531L
// If ControlType M_BOX is M_ENABLE
#define M_BOX_X_MIN 6L
#define M_BOX_Y_MIN 7L
#define M_BOX_X_MAX 8L
#define M_BOX_Y_MAX 9L
#define M_BLOB_TOUCHING_IMAGE_BORDERS 118L
#define M_BOX_AREA 90L
#define M_BOX_ASPECT_RATIO 91L
#define M_BOX_FILL_RATIO 92L
#define M_FIRST_POINT_X 75L
#define M_FIRST_POINT_Y 132L
#define M_FERET_X 72L
#define M_FERET_Y 5L
// If ControlType M_CONTACT_POINTS is M_ENABLE
#define M_X_MIN_AT_Y_MIN 21L
#define M_X_MAX_AT_Y_MAX 22L
#define M_Y_MIN_AT_X_MAX 23L
#define M_Y_MAX_AT_X_MIN 24L
#define M_X_MIN_AT_Y_MAX 58L
#define M_X_MAX_AT_Y_MIN 59L
#define M_Y_MIN_AT_X_MIN 60L
#define M_Y_MAX_AT_X_MAX 61L
// If ControlType M_CHAINS is M_ENABLE
#define M_CHAIN_X 65L
#define M_CHAIN_Y 144L
#define M_CHAIN_INDEX 67L
#define M_NUMBER_OF_CHAINED_PIXELS 56L
#define M_TOTAL_NUMBER_OF_CHAINED_PIXELS 2481L
// If ControlType M_RUNS is M_ENABLE
#define M_RUN_X 2482L
#define M_RUN_Y 2483L
#define M_RUN_LENGTH 2484L
#define M_NUMBER_OF_RUNS 55L
#define M_TOTAL_NUMBER_OF_RUNS 117L
// If ControlType M_CONVEX_HULL is M_ENABLE
#define M_CONVEX_HULL_AREA 89L
#define M_CONVEX_HULL_COG_X 96L
#define M_CONVEX_HULL_COG_Y 97L
#define M_CONVEX_HULL_FILL_RATIO 93L
#define M_CONVEX_HULL_PERIMETER 99L
#define M_CONVEX_HULL_X 81L
#define M_CONVEX_HULL_Y 82L
#define M_CONVEX_HULL_XY_PACKED 83L
#define M_NUMBER_OF_CONVEX_HULL_POINTS 84L
#define M_TOTAL_NUMBER_OF_CONVEX_HULL_POINTS 2480L
// If ControlType M_MIN_AREA_BOX is M_ENABLE
#define M_MIN_AREA_BOX_X1 129L
#define M_MIN_AREA_BOX_Y1 130L
#define M_MIN_AREA_BOX_X2 131L
#define M_MIN_AREA_BOX_Y2 139L
#define M_MIN_AREA_BOX_X3 133L
#define M_MIN_AREA_BOX_Y3 134L
#define M_MIN_AREA_BOX_X4 135L
#define M_MIN_AREA_BOX_Y4 136L
#define M_MIN_AREA_BOX_AREA 137L
#define M_MIN_AREA_BOX_PERIMETER 138L
#define M_MIN_AREA_BOX_CENTER_X 140L
#define M_MIN_AREA_BOX_CENTER_Y 141L
#define M_MIN_AREA_BOX_ANGLE 142L
#define M_MIN_AREA_BOX_WIDTH 158L
#define M_MIN_AREA_BOX_HEIGHT 159L
// If ControlType M_MIN_PERIMETER_BOX is M_ENABLE
#define M_MIN_PERIMETER_BOX_X1 157L
#define M_MIN_PERIMETER_BOX_Y1 145L
#define M_MIN_PERIMETER_BOX_X2 146L
#define M_MIN_PERIMETER_BOX_Y2 147L
#define M_MIN_PERIMETER_BOX_X3 148L
#define M_MIN_PERIMETER_BOX_Y3 149L
#define M_MIN_PERIMETER_BOX_X4 150L
#define M_MIN_PERIMETER_BOX_Y4 151L
#define M_MIN_PERIMETER_BOX_AREA 152L
#define M_MIN_PERIMETER_BOX_PERIMETER 153L
#define M_MIN_PERIMETER_BOX_CENTER_X 154L
#define M_MIN_PERIMETER_BOX_CENTER_Y 155L
#define M_MIN_PERIMETER_BOX_ANGLE 156L
#define M_MIN_PERIMETER_BOX_WIDTH 160L
#define M_MIN_PERIMETER_BOX_HEIGHT 161L
// If ControlType M_WORLD_BOX is M_ENABLE
#define M_WORLD_FERET_X 1465L
#define M_WORLD_FERET_Y 1466L
#define M_WORLD_BOX_X_MIN 1479L
#define M_WORLD_BOX_Y_MIN 1480L
#define M_WORLD_BOX_X_MAX 1481L
#define M_WORLD_BOX_Y_MAX 1482L
#define M_WORLD_X_AT_Y_MIN 1483L
#define M_WORLD_X_AT_Y_MAX 1484L
#define M_WORLD_Y_AT_X_MIN 1485L
#define M_WORLD_Y_AT_X_MAX 1486L
// If ControlType M_FERETS is M_ENABLE
#define M_FERET_DIAMETERS 122L
#define M_NUMBER_OF_FERETS 63L // Also defined in miledge.h
#define M_TOTAL_NUMBER_OF_FERETS 2534L
#define M_FERET_ELONGATION 27L
#define M_FERET_MAX_ANGLE 17L
#define M_FERET_MIN_ANGLE 15L
#define M_FERET_MAX_DIAMETER 16L
#define M_FERET_MIN_DIAMETER 14L
#define M_FERET_MEAN_DIAMETER 18L
// If ControlType M_CONVEX_PERIMETER is M_ENABLE
#define M_CONVEX_PERIMETER 20L
// If ControlType M_FERET_GENERAL is M_ENABLE
#define M_FERET_GENERAL 0x400L
// If ControlType M_FERET_PERPENDICULAR_TO_MIN_DIAMETER is M_ENABLE
#define M_FERET_PERPENDICULAR_TO_MIN_DIAMETER 123L
// If ControlType M_FERET_PERPENDICULAR_TO_MAX_DIAMETER is M_ENABLE
#define M_FERET_PERPENDICULAR_TO_MAX_DIAMETER 124L
// If ControlType M_FERET_MIN_DIAMETER_ELONGATION is M_ENABLE
#define M_FERET_MIN_DIAMETER_ELONGATION 125L
// If ControlType M_FERET_MAX_DIAMETER_ELONGATION is M_ENABLE
#define M_FERET_MAX_DIAMETER_ELONGATION 126L
// If ControlType M_RECTANGULARITY is M_ENABLE
#define M_RECTANGULARITY 127L
// If ControlType M_PERIMETER is M_ENABLE
#define M_PERIMETER 3L
// If ControlType M_BREADTH is M_ENABLE
#define M_BREADTH 49L
// If ControlType M_COMPACTNESS is M_ENABLE
#define M_COMPACTNESS 25L
// If ControlType M_ELONGATION is M_ENABLE
#define M_ELONGATION 50L
// If ControlType M_LENGTH is M_ENABLE
#define M_LENGTH 0x00002000L
// If ControlType M_INTERCEPT is M_ENABLE
#define M_INTERCEPT_0 51L
#define M_INTERCEPT_45 52L
#define M_INTERCEPT_90 53L
#define M_INTERCEPT_135 54L
// If ControlType M_EULER_NUMBER is M_ENABLE
#define M_EULER_NUMBER 47L
// If ControlType M_NUMBER_OF_HOLES is M_ENABLE
#define M_NUMBER_OF_HOLES 26L
// If ControlType M_ROUGHNESS is M_ENABLE
#define M_ROUGHNESS 28L
// Grayscale only features:
// If ControlType M_BLOB_CONTRAST is M_ENABLE
#define M_BLOB_CONTRAST 48L
// If ControlType M_MAX_PIXEL is M_ENABLE
#define M_MAX_PIXEL 31L
// If ControlType M_MIN_PIXEL is M_ENABLE
#define M_MIN_PIXEL 30L
// If ControlType M_MEAN_PIXEL is M_ENABLE
#define M_MEAN_PIXEL 32L
// If ControlType M_SUM_PIXEL is M_ENABLE
#define M_SUM_PIXEL 29L
// If ControlType M_SUM_PIXEL_SQUARED is M_ENABLE
#define M_SUM_PIXEL_SQUARED 46L
// If ControlType M_SIGMA_PIXEL is M_ENABLE
#define M_SIGMA_PIXEL 33L
// Binary and grayscale features
// If ControlType M_FERET_AT_PRINCIPAL_AXIS_ANGLE is M_ENABLE
#define M_FERET_AT_PRINCIPAL_AXIS_ANGLE 119L
// If ControlType M_FERET_AT_SECONDARY_AXIS_ANGLE is M_ENABLE
#define M_FERET_AT_SECONDARY_AXIS_ANGLE 120L
// If ControlType M_FERET_PRINCIPAL_AXIS_ELONGATION is M_ENABLE
#define M_FERET_PRINCIPAL_AXIS_ELONGATION 121L
// If ControlType M_CENTER_OF_GRAVITY is M_ENABLE
#define M_CENTER_OF_GRAVITY_X 34L
#define M_CENTER_OF_GRAVITY_Y 35L
// If ControlType M_MOMENT_FIRST_ORDER is M_ENABLE
#define M_MOMENT_X0_Y1 36L
#define M_MOMENT_X1_Y0 37L
// If ControlType M_MOMENT_SECOND_ORDER is M_ENABLE
#define M_MOMENT_X1_Y1 38L
#define M_MOMENT_X0_Y2 39L
#define M_MOMENT_X2_Y0 40L
#define M_MOMENT_CENTRAL_X1_Y1 41L
#define M_MOMENT_CENTRAL_X0_Y2 42L
#define M_MOMENT_CENTRAL_X2_Y0 43L
#define M_AXIS_PRINCIPAL_ANGLE 44L
#define M_AXIS_SECONDARY_ANGLE 45L
// If ControlType M_MOMENT_THIRD_ORDER is M_ENABLE
#define M_MOMENT_X2_Y1 8401L
#define M_MOMENT_X1_Y2 8402L
#define M_MOMENT_X3_Y0 8403L
#define M_MOMENT_X0_Y3 8404L
#define M_MOMENT_CENTRAL_X2_Y1 8195L
#define M_MOMENT_CENTRAL_X1_Y2 8196L
#define M_MOMENT_CENTRAL_X3_Y0 8197L
#define M_MOMENT_CENTRAL_X0_Y3 8198L
#define M_MOMENT_HU_1 8405L
#define M_MOMENT_HU_2 8406L
#define M_MOMENT_HU_3 8407L
#define M_MOMENT_HU_4 8408L
#define M_MOMENT_HU_5 8409L
#define M_MOMENT_HU_6 8410L
#define M_MOMENT_HU_7 8411L
// If ControlType M_MOMENT_GENERAL is M_ENABLE
#define M_MOMENT_GENERAL 0x800L
// If ControlType M_FERET_CONTACT_POINTS is M_ENABLE
// ResultType that can be mix with these defines are available.
#define M_FERET_CONTACT_POINTS_X1 0x50000L
#define M_FERET_CONTACT_POINTS_Y1 0x60000L
#define M_FERET_CONTACT_POINTS_X2 0x70000L
#define M_FERET_CONTACT_POINTS_Y2 0x80000L
// If ControlType M_DEPTH_MAP_VOLUME is M_ENABLE
#define M_DEPTH_MAP_VOLUME 8227L
// If ControlType M_DEPTH_MAP_MIN_ELEVATION is M_ENABLE
#define M_DEPTH_MAP_MIN_ELEVATION 8228L
// If ControlType M_DEPTH_MAP_MAX_ELEVATION is M_ENABLE
#define M_DEPTH_MAP_MAX_ELEVATION 8229L
// If ControlType M_DEPTH_MAP_MEAN_ELEVATION is M_ENABLE
#define M_DEPTH_MAP_MEAN_ELEVATION 8230L
// If ControlType M_DEPTH_MAP_SIZE_Z is M_ENABLE
#define M_DEPTH_MAP_SIZE_Z 8231L
// Special ResultTypes
#define M_TIMEOUT_END 10L // Already defined in milmod.h
#define M_MAX_BLOBS_END 57L
// Result value:
#define M_YES 1L // Already defined in mil.h
#define M_NO 0L // Already defined in mil.h
#define M_INCLUDED 0x109L
#define M_EXCLUDED 0x110L
// Possible values for M_CALCULATION_TYPE
#define M_NOT_CALCULATED 0L
#define M_BINARY 0x00001000L
#define M_BINARY_AND_GRAYSCALE (M_BINARY + M_GRAYSCALE)
////////////////////////////////////////////////////////////////////////////////
// MblobSelect()
// Operation:
#define M_INCLUDE 1L
#define M_EXCLUDE 2L
#define M_DELETE 3L
#define M_MERGE 0x00000040L
#define M_INCLUDE_ONLY 0x101L
#define M_EXCLUDE_ONLY 0x102L
// Condition:
#define M_ALWAYS 0L
#define M_IN_RANGE 1L
#define M_OUT_RANGE 2L
#define M_EQUAL 3L
#define M_NOT_EQUAL 4L
#define M_GREATER 5L
#define M_LESS 6L
#define M_GREATER_OR_EQUAL 7L
#define M_LESS_OR_EQUAL 8L
#define M_ALL_BLOBS 0x40000000L
#define M_INCLUDED_BLOBS 0x08000000L
#define M_EXCLUDED_BLOBS 0x20000000L
////////////////////////////////////////////////////////////////////////////////
// MblobReconstruct()
// Operation:
#define M_RECONSTRUCT_FROM_SEED 1L
#define M_ERASE_BORDER_BLOBS 2L
#define M_FILL_HOLES 3L
#define M_EXTRACT_HOLES 4L
#define M_SEED_PIXELS_ALL_IN_BLOBS 1L
#define M_FOREGROUND_ZERO 2L
////////////////////////////////////////////////////////////////////////////////
// MblobDraw()
// Operation:
#define M_DRAW_BOX_CENTER 0x00000001L
#define M_DRAW_MIN_PERIMETER_BOX 0x00000002L
#define M_DRAW_MIN_AREA_BOX 0x00000004L
#define M_DRAW_FERET_MAX 0x00000008L
#define M_DRAW_FERET_BOX 0x00000010L
#define M_DRAW_BOX 0x00000020L // Also used in other MxxxDraw()
#define M_DRAW_POSITION 0x00000040L // Also used in other MxxxDraw()
#define M_DRAW_CENTER_OF_GRAVITY 0x00000080L
#define M_DRAW_BLOBS_CONTOUR 0x00000100L
#define M_DRAW_AXIS 0x00000200L
#define M_DRAW_BLOBS 0x00000400L
#define M_DRAW_FERET_MIN 0x00001000L
#define M_DRAW_HOLES 0x00002000L
#define M_DRAW_HOLES_CONTOUR 0x00004000L
#define M_DRAW_CONVEX_HULL 0x00008000L
#define M_DRAW_CONVEX_HULL_CONTOUR 0x00010000L
#define M_DRAW_WORLD_BOX 0x00020000L
#define M_DRAW_WORLD_BOX_CENTER 0x00040000L
#define M_DRAW_WORLD_FERET_X 0x00080000L
#define M_DRAW_WORLD_FERET_Y 0x00100000L
// Label:
#define M_ALL_BLOBS 0x40000000L
#define M_INCLUDED_BLOBS 0x08000000L
#define M_EXCLUDED_BLOBS 0x20000000L
////////////////////////////////////////////////////////////////////////////////
// MblobMerge()
#define M_TOP_BOTTOM 0x00001000L
#define M_MOVE 0x00010000L // Also defined in mil.h
#define M_COPY 0x00020000L // Also defined in mil.h
////////////////////////////////////////////////////////////////////////////////
// MblobLabel()
#define M_CLEAR 0x00000001L
#define M_NO_CLEAR 0x00000002L
////////////////////////////////////////////////////////////////////////////////
// Defines for deprecated function
#define M_SORT1_UP 0x02000000L // Also defined in miledge.h
#define M_SORT2_UP 0x04000000L // Also defined in miledge.h
#define M_SORT3_UP 0x06000000L // Also defined in miledge.h
#define M_SORT1_DOWN 0x0A000000L // Also defined in miledge.h
#define M_SORT2_DOWN 0x0C000000L // Also defined in miledge.h
#define M_SORT3_DOWN 0x0E000000L // Also defined in miledge.h
#define M_NO_FEATURES 0x104L
#define M_LATTICE 3L
#define M_CONTOUR 0x800L // Also defined in mil.h
/***************************************************************************/
/* Deprecated */
/***************************************************************************/
#if OldDefinesSupport
// MIL 10 PP1
#define M_DRAW_RELATIVE_ORIGIN_X 319L // Deprecated : Use MgraControl(... M_DRAW_OFFSET_X...)
#define M_DRAW_RELATIVE_ORIGIN_Y 320L // Deprecated : Use MgraControl(... M_DRAW_OFFSET_Y...)
#define M_DRAW_SCALE_X 3203L // Deprecated : Use MgraControl(... M_DRAW_ZOOM_X ...)
#define M_DRAW_SCALE_Y 3204L // Deprecated : Use MgraControl(... M_DRAW_ZOOM_Y ...)
//MIL_DEPRECATED(M_DRAW_RELATIVE_ORIGIN_X, 1010) // Already defined in mil.h
//MIL_DEPRECATED(M_DRAW_RELATIVE_ORIGIN_Y, 1010) // Already defined in mil.h
//MIL_DEPRECATED(M_DRAW_SCALE_X, 1010) // Already defined in mil.h
//MIL_DEPRECATED(M_DRAW_SCALE_Y, 1010) // Already defined in mil.h
// MIL 10 PP2
#define M_GENERAL_FERET M_FERET_GENERAL // Also defined in miledge.h
#if !defined(MIL_DEPRECATED_M_GENERAL_FERET) || !MIL_DEPRECATED_M_GENERAL_FERET
#define MIL_DEPRECATED_M_GENERAL_FERET 1
MIL_DEPRECATED(M_GENERAL_FERET, 1020)
#endif
#define M_GENERAL_MOMENT M_MOMENT_GENERAL
MIL_DEPRECATED(M_GENERAL_MOMENT, 1020)
#define M_ALL_FERETS M_FERET_DIAMETERS
MIL_DEPRECATED(M_ALL_FERETS , 1020)
#define M_BLOB_IDENTIFICATION 2L // Deprecated : Use M_BLOB_IDENTIFICATION_MODE
MIL_DEPRECATED(M_BLOB_IDENTIFICATION, 1030)
// MIL 10 SP5
#define M_CONTIGUOUS_LABELS M_RELABEL_CONSECUTIVE
MIL_DEPRECATED(M_CONTIGUOUS_LABELS, 1050)
#endif
/********************************************************************
* CAPI function prototypes
********************************************************************/
MIL_ID MFTYPE MblobAlloc( MIL_ID SysId,
MIL_INT64 ContextType,
MIL_INT64 ControlFlag,
MIL_ID* ContextBlobIdPtr);
MIL_ID MFTYPE MblobAllocResultNew( MIL_ID SysId,
MIL_INT64 ResultType,
MIL_INT64 ControlFlag,
MIL_ID* ResultBlobIdPtr);
void MFTYPE MblobCalculate( MIL_ID ContextBlobId, // Before MIL 10 PP2, was BlobIdentImageId
MIL_ID BlobIdentImageBufId,// Before MIL 10 PP2, was GrayImageId
MIL_ID GrayImageBufId, // Before MIL 10 PP2, was FeatureListId
MIL_ID ResultBlobId);
#if M_MIL_USE_64BIT
// Prototypes for 64 bits OSs
void MFTYPE MblobControlInt64( MIL_ID ContextOrResultBlobId,
MIL_INT64 ControlType,
MIL_INT64 ControlValue);
void MFTYPE MblobControlDouble( MIL_ID ContextOrResultBlobId,
MIL_INT64 ControlType,
MIL_DOUBLE ControlValue);
#else
// Prototypes for 32 bits OSs
#define MblobControlInt64 MblobControl
#define MblobControlDouble MblobControl
void MFTYPE MblobControl( MIL_ID ContextOrResultBlobId,
MIL_INT64 ControlType,
MIL_DOUBLE ControlValue);
#endif
void MFTYPE MblobFree( MIL_ID ContextOrResultBlobId);
MIL_INT MFTYPE MblobGetLabel( MIL_ID ResultBlobId,
MIL_INT XPos,
MIL_INT YPos,
MIL_INT* LabelVarPtr);
void MFTYPE MblobGetResultNew( MIL_ID ResultBlobId,
MIL_INT LabelOrIndex,
MIL_INT64 ResultType,
void* ResultArrayPtr);
MIL_INT MFTYPE MblobInquire( MIL_ID ContextOrResultBlobId,
MIL_INT64 InquireType,
void* UserVarPtr);
void MFTYPE MblobLabel( MIL_ID ResultBlobId,
MIL_ID DstImageBufId,
MIL_INT64 ControlFlag);
void MFTYPE MblobSelect( MIL_ID ResultBlobId,
MIL_INT64 Operation,
MIL_INT64 SelectionCriterion,
MIL_INT64 Condition,
MIL_DOUBLE CondLow,
MIL_DOUBLE CondHigh);
void MFTYPE MblobReconstruct( MIL_ID SrcImageBufId,
MIL_ID SeedImageBufId,
MIL_ID DstImageBufId,
MIL_INT64 Operation,
MIL_INT64 ProcMode);
void MFTYPE MblobMerge( MIL_ID SrcResultBlobId1,
MIL_ID SrcResultBlobId2,
MIL_ID DstResultBlobId,
MIL_INT64 ControlFlag);
void MFTYPE MblobDraw( MIL_ID ContextGraId,
MIL_ID ResultBlobId,
MIL_ID DstImageBufOrListGraId,
MIL_INT64 Operation,
MIL_INT LabelOrIndex,
MIL_INT64 ControlFlag);
void MFTYPE MblobTransform( MIL_ID SrcResultBlobId,
MIL_ID DstResultBlobId,
MIL_INT64 Operation,
MIL_DOUBLE Parameter1,
MIL_DOUBLE Parameter2,
MIL_DOUBLE Parameter3,
MIL_INT64 ControlFlag);
#if M_MIL_USE_UNICODE
void MFTYPE MblobSaveA( MIL_CONST_TEXTA_PTR FileName,
MIL_ID ContextBlobId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE MblobRestoreA( MIL_CONST_TEXTA_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* ContextBlobIdPtr);
void MFTYPE MblobStreamA( MIL_TEXTA_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* ContextBlobIdPtr,
MIL_INT* SizeByteVarPtr);
void MFTYPE MblobSaveW( MIL_CONST_TEXTW_PTR FileName,
MIL_ID ContextBlobId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE MblobRestoreW( MIL_CONST_TEXTW_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* ContextBlobIdPtr);
void MFTYPE MblobStreamW( MIL_TEXTW_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* ContextBlobIdPtr,
MIL_INT* SizeByteVarPtr);
#if M_MIL_UNICODE_API
#define MblobSave MblobSaveW
#define MblobRestore MblobRestoreW
#define MblobStream MblobStreamW
#else
#define MblobSave MblobSaveA
#define MblobRestore MblobRestoreA
#define MblobStream MblobStreamA
#endif
#else
void MFTYPE MblobSave( MIL_CONST_TEXT_PTR FileName,
MIL_ID ContextBlobId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE MblobRestore( MIL_CONST_TEXT_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* ContextBlobIdPtr);
void MFTYPE MblobStream( MIL_TEXT_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* ContextBlobIdPtr,
MIL_INT* SizeByteVarPtr);
#endif
//////////////////////////////////////////////////////////////
// Deprecated functions.
//////////////////////////////////////////////////////////////
MIL_ID MFTYPE MblobAllocFeatureList(MIL_ID SystemId,
MIL_ID* FeatureListIdPtr);
void MFTYPE MblobFill( MIL_ID BlobResId,
MIL_ID DestImageBufId,
MIL_INT64 Criterion,
MIL_INT Value);
MIL_INT MFTYPE MblobGetNumber( MIL_ID BlobResId,
MIL_INT* CountVarPtr);
void MFTYPE MblobGetResultSingle( MIL_ID BlobResId,
MIL_INT LabelVal,
MIL_INT64 Feature,
void* TargetVarPtr);
void MFTYPE MblobGetRuns( MIL_ID BlobResId,
MIL_INT LabelVal,
MIL_INT64 ArrayType,
void* RunXPtr,
void* RunYPtr,
void* RunLengthPtr);
void MFTYPE MblobSelectFeature( MIL_ID FeatureListId,
MIL_INT64 Feature);
void MFTYPE MblobSelectFeret( MIL_ID FeatureListId,
MIL_DOUBLE Angle);
void MFTYPE MblobSelectMoment( MIL_ID FeatureListId,
MIL_INT64 MomType,
MIL_INT XMomOrder,
MIL_INT YMomOrder);
/* C++ directive if needed */
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
inline void MFTYPE MblobStreamCpp(MilStreamParam MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* ContextBlobIdPtr,
MIL_INT* SizeByteVarPtr)
{
MblobStream(MemPtrOrFileName.m_Param, SysId, Operation, StreamType, Version, ControlFlag, ContextBlobIdPtr, SizeByteVarPtr);
}
#undef MblobStream
#define MblobStream MblobStreamCpp
#endif // __cplusplus
//////////////////////////////////////////////////////////////
// Overload or define to support Old API.
//////////////////////////////////////////////////////////////
#ifdef __cplusplus
// New API call so redirect it to the good entry point.
#define MblobAllocResult MblobAllocResultNew
inline void MblobGetResult(MIL_ID ResultBlobId,
MIL_INT LabelOrIndex,
MIL_INT64 ResultType,
void* ResultArrayPtr)
{
MblobGetResultNew(ResultBlobId, LabelOrIndex, ResultType, ResultArrayPtr);
}
// Support Old API through inline in C++
inline MIL_ID MblobAllocResult(MIL_ID SysId,
MIL_ID* ResultBlobIdPtr)
{
return MblobAllocResult(SysId, M_DEFAULT, M_DEFAULT, ResultBlobIdPtr);
}
inline void MblobGetResult(MIL_ID ResultBlobId,
MIL_INT64 ResultType,
void* ResultArrayPtr)
{
MblobGetResult(ResultBlobId, M_DEFAULT, ResultType, ResultArrayPtr);
}
#else
// The default in C is the use of the old API until MIL 11.
#ifndef M_USE_OLD_MBLOB_API_IN_C
#define M_USE_OLD_MBLOB_API_IN_C 1
#endif
#if M_USE_OLD_MBLOB_API_IN_C
#define MblobAllocResult(SysId, ResultBlobIdPtr) MblobAllocResultNew(SysId, M_DEFAULT, M_DEFAULT, ResultBlobIdPtr)
#define MblobGetResult(ResultBlobId, ResultType, ResultArrayPtr) MblobGetResultNew(ResultBlobId, M_DEFAULT, ResultType, ResultArrayPtr)
#else
#define MblobAllocResult MblobAllocResultNew
#define MblobGetResult MblobGetResultNew
#endif
#endif
#if M_MIL_USE_64BIT
#ifdef __cplusplus
#if !M_MIL_USE_LINUX
//////////////////////////////////////////////////////////////
// MblobControl function definition when compiling c++ files
//////////////////////////////////////////////////////////////
inline void MblobControl(MIL_ID ContextOrResultBlobId, MIL_INT64 ControlType, int ControlValue)
{
MblobControlInt64(ContextOrResultBlobId, ControlType, ControlValue);
};
#endif
inline void MblobControl(MIL_ID ContextOrResultBlobId, MIL_INT64 ControlType, MIL_INT32 ControlValue)
{
MblobControlInt64(ContextOrResultBlobId, ControlType, ControlValue);
}
inline void MblobControl(MIL_ID ContextOrResultBlobId, MIL_INT64 ControlType, MIL_INT64 ControlValue)
{
MblobControlInt64(ContextOrResultBlobId, ControlType, ControlValue);
}
inline void MblobControl(MIL_ID ContextOrResultBlobId, MIL_INT64 ControlType, MIL_DOUBLE ControlValue)
{
MblobControlDouble(ContextOrResultBlobId, ControlType, ControlValue);
}
#else
//////////////////////////////////////////////////////////////
// For C file, call the default function, i.e. Int64 one
//////////////////////////////////////////////////////////////
#define MblobControl MblobControlDouble
#endif // __cplusplus
#endif // M_MIL_USE_64BIT
#if M_MIL_USE_SAFE_TYPE
//////////////////////////////////////////////////////////////
// See milos.h for explanation about these functions.
//////////////////////////////////////////////////////////////
// ----------------------------------------------------------
// MblobGetResult
inline void MFTYPE MblobGetResultUnsafe (MIL_ID ResultBlobId, MIL_INT LabelOrIndex, MIL_INT64 ResultType, void* ResultArrayPtr);
inline void MFTYPE MblobGetResultSafeType(MIL_ID ResultBlobId, MIL_INT LabelOrIndex, MIL_INT64 ResultType, MilVoidPtr ResultArrayPtr);
// Old API.
inline void MFTYPE MblobGetResultUnsafe (MIL_ID ResultBlobId, MIL_INT64 ResultType, void* ResultArrayPtr) { MblobGetResultUnsafe (ResultBlobId, M_DEFAULT, ResultType, ResultArrayPtr); }
inline void MFTYPE MblobGetResultSafeType(MIL_ID ResultBlobId, MIL_INT64 ResultType, MilVoidPtr ResultArrayPtr) { MblobGetResultSafeType(ResultBlobId, M_DEFAULT, ResultType, ResultArrayPtr); }
// ----------------------------------------------------------
// MblobGetResultSingle
inline void MFTYPE MblobGetResultSingleUnsafe (MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, void* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, int TargetVarPtr);
#if M_MIL_SAFE_TYPE_M_NULL_PTR_TYPE_EXISTS
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, std::nullptr_t );
#endif
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_INT8* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_INT16* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_INT32* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_INT64* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, float* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_DOUBLE* TargetVarPtr);
#if M_MIL_SAFE_TYPE_SUPPORTS_UNSIGNED
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_UINT8* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_UINT16* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_UINT32* TargetVarPtr);
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_UINT64* TargetVarPtr);
#endif
// ----------------------------------------------------------
// MblobGetRuns
inline void MFTYPE MblobGetRunsUnsafe (MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, void* RunXPtr, void* RunYPtr, void* RunLengthPtr);
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, int RunXPtr, int RunYPtr, int RunLengthPtr);
#if M_MIL_SAFE_TYPE_M_NULL_PTR_TYPE_EXISTS
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, std::nullptr_t , std::nullptr_t , std::nullptr_t );
#endif
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_INT8* RunXPtr, MIL_INT8* RunYPtr, MIL_INT8* RunLengthPtr);
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_INT16* RunXPtr, MIL_INT16* RunYPtr, MIL_INT16* RunLengthPtr);
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_INT32* RunXPtr, MIL_INT32* RunYPtr, MIL_INT32* RunLengthPtr);
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_INT64* RunXPtr, MIL_INT64* RunYPtr, MIL_INT64* RunLengthPtr);
#if M_MIL_SAFE_TYPE_SUPPORTS_UNSIGNED
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_UINT8* RunXPtr, MIL_UINT8* RunYPtr, MIL_UINT8* RunLengthPtr);
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_UINT16* RunXPtr, MIL_UINT16* RunYPtr, MIL_UINT16* RunLengthPtr);
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_UINT32* RunXPtr, MIL_UINT32* RunYPtr, MIL_UINT32* RunLengthPtr);
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_UINT64* RunXPtr, MIL_UINT64* RunYPtr, MIL_UINT64* RunLengthPtr);
#endif
// ----------------------------------------------------------
// MblobInquire
inline MIL_INT MFTYPE MblobInquireUnsafe (MIL_ID ResOrFeatListBlobId, MIL_INT64 InquireType, void* UserVarPtr);
// -------------------------------------------------------------------------
// MblobGetResult
inline void MFTYPE MblobGetResultSafeType(MIL_ID ResultBlobId, MIL_INT LabelOrIndex, MIL_INT64 ResultType, MilVoidPtr ResultArrayPtr)
{
MIL_INT64 RequiredParamType = M_PARAM_TYPE_MIL_INT64;
if(!(M_DEFAULT_DATA_TYPE_BIT_SET(ResultType) || M_RECOMMENDED_DATA_TYPE_BIT_SET(ResultType)))
{
MblobGetResultNew(ResultBlobId, LabelOrIndex, ResultType | M_DEFAULT_DATA_TYPE, &RequiredParamType);
}
if(!MfuncPointerIsCompatible(RequiredParamType, ResultArrayPtr.Type, ResultType))
{
SafeTypeError(MIL_TEXT("MblobGetResult"));
}
MblobGetResultNew(ResultBlobId, LabelOrIndex, ResultType, ResultArrayPtr.Ptr);
}
inline void MFTYPE MblobGetResultUnsafe (MIL_ID ResultBlobId, MIL_INT LabelOrIndex, MIL_INT64 ResultType, void* ResultArrayPtr) {MblobGetResultNew (ResultBlobId, LabelOrIndex, ResultType, ResultArrayPtr );}
// -------------------------------------------------------------------------
// MblobGetResultSingle
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, int TargetVarPtr)
{
if (TargetVarPtr)
SafeTypeError(MIL_TEXT("MblobGetResultSingle"));
MblobGetResultSingle(BlobResId, LabelVal, Feature, NULL);
}
#if M_MIL_SAFE_TYPE_M_NULL_PTR_TYPE_EXISTS
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, std::nullptr_t)
{
MblobGetResultSingle(BlobResId, LabelVal, Feature, NULL);
}
#endif
inline void MblobGetResultSingleSafeTypeExecute(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, void* TargetVarPtr, MIL_INT64 GivenType)
{
MIL_INT64 RequiredType = (Feature & M_HLVLDATATYPE_MASK);
if((RequiredType != M_TYPE_MIL_INT32) && (RequiredType != M_TYPE_MIL_INT64) && (RequiredType != M_TYPE_FLOAT) &&
(RequiredType != M_TYPE_DOUBLE) && (RequiredType != M_TYPE_CHAR) && (RequiredType != M_TYPE_SHORT))
RequiredType = 0;
if (RequiredType == 0)
RequiredType = M_TYPE_DOUBLE;
if (RequiredType != GivenType)
SafeTypeError(MIL_TEXT("MblobGetResultSingle"));
MblobGetResultSingle(BlobResId, LabelVal, Feature, TargetVarPtr);
}
inline void MFTYPE MblobGetResultSingleUnsafe (MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, void* TargetVarPtr) {MblobGetResultSingle (BlobResId, LabelVal, Feature, TargetVarPtr );}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_INT8* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_CHAR );}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_INT16* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_SHORT );}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_INT32* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_MIL_INT32);}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_INT64* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_MIL_INT64);}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, float* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_FLOAT );}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_DOUBLE* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_DOUBLE );}
#if M_MIL_SAFE_TYPE_SUPPORTS_UNSIGNED
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_UINT8* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_CHAR );}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_UINT16* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_SHORT );}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_UINT32* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_MIL_INT32);}
inline void MFTYPE MblobGetResultSingleSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 Feature, MIL_UINT64* TargetVarPtr) {MblobGetResultSingleSafeTypeExecute(BlobResId, LabelVal, Feature, TargetVarPtr, M_TYPE_MIL_INT64);}
#endif
// ----------------------------------------------------------
// MblobGetRuns
inline void MFTYPE MblobGetRunsSafeTypeExecute(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, void* RunXPtr, void* RunYPtr, void* RunLengthPtr, MIL_INT64 ExpectedType)
{
MIL_INT64 RequiredType = (ArrayType & M_HLVLDATATYPE_MASK);
if((RequiredType != M_TYPE_MIL_INT32) && (RequiredType != M_TYPE_MIL_INT64) && (RequiredType != M_TYPE_FLOAT) &&
(RequiredType != M_TYPE_DOUBLE) && (RequiredType != M_TYPE_CHAR) && (RequiredType != M_TYPE_SHORT))
RequiredType = 0;
if (RequiredType == 0)
RequiredType = M_TYPE_DOUBLE;
if (RequiredType != ExpectedType)
SafeTypeError(MIL_TEXT("MblobGetRuns"));
MblobGetRuns(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr);
}
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, int RunXPtr, int RunYPtr, int RunLengthPtr)
{
if (RunXPtr || RunYPtr || RunLengthPtr)
SafeTypeError(MIL_TEXT("MblobGetRuns"));
MblobGetRuns(BlobResId, LabelVal, ArrayType, NULL, NULL, NULL);
}
#if M_MIL_SAFE_TYPE_M_NULL_PTR_TYPE_EXISTS
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, std::nullptr_t, std::nullptr_t, std::nullptr_t)
{
MblobGetRuns(BlobResId, LabelVal, ArrayType, NULL, NULL, NULL);
}
#endif
inline void MFTYPE MblobGetRunsUnsafe (MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, void* RunXPtr, void* RunYPtr, void* RunLengthPtr) {MblobGetRuns (BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr );}
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_INT8* RunXPtr, MIL_INT8* RunYPtr, MIL_INT8* RunLengthPtr) {MblobGetRunsSafeTypeExecute(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr, M_TYPE_CHAR );}
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_INT16* RunXPtr, MIL_INT16* RunYPtr, MIL_INT16* RunLengthPtr) {MblobGetRunsSafeTypeExecute(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr, M_TYPE_SHORT );}
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_INT32* RunXPtr, MIL_INT32* RunYPtr, MIL_INT32* RunLengthPtr) {MblobGetRunsSafeTypeExecute(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr, M_TYPE_MIL_INT32);}
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_INT64* RunXPtr, MIL_INT64* RunYPtr, MIL_INT64* RunLengthPtr) {MblobGetRunsSafeTypeExecute(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr, M_TYPE_MIL_INT64);}
#if M_MIL_SAFE_TYPE_SUPPORTS_UNSIGNED
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_UINT8* RunXPtr, MIL_UINT8* RunYPtr, MIL_UINT8* RunLengthPtr) {MblobGetRunsSafeTypeExecute(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr, M_TYPE_CHAR );}
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_UINT16* RunXPtr, MIL_UINT16* RunYPtr, MIL_UINT16* RunLengthPtr) {MblobGetRunsSafeTypeExecute(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr, M_TYPE_SHORT );}
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_UINT32* RunXPtr, MIL_UINT32* RunYPtr, MIL_UINT32* RunLengthPtr) {MblobGetRunsSafeTypeExecute(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr, M_TYPE_MIL_INT32);}
inline void MFTYPE MblobGetRunsSafeType(MIL_ID BlobResId, MIL_INT LabelVal, MIL_INT64 ArrayType, MIL_UINT64* RunXPtr, MIL_UINT64* RunYPtr, MIL_UINT64* RunLengthPtr) {MblobGetRunsSafeTypeExecute(BlobResId, LabelVal, ArrayType, RunXPtr, RunYPtr, RunLengthPtr, M_TYPE_MIL_INT64);}
#endif
// ----------------------------------------------------------
// MblobInquire
inline MIL_INT MFTYPE MblobInquireSafeType(MIL_ID ResOrFeatListBlobId, MIL_INT64 InquireType, MilVoidPtr UserVarPtr)
{
MIL_INT64 RequiredParamType = M_PARAM_TYPE_MIL_INT64;
if(!(M_DEFAULT_DATA_TYPE_BIT_SET(InquireType) || M_RECOMMENDED_DATA_TYPE_BIT_SET(InquireType)))
{
MblobInquire(ResOrFeatListBlobId, InquireType | M_DEFAULT_DATA_TYPE, &RequiredParamType);
}
if(!MfuncPointerIsCompatible(RequiredParamType, UserVarPtr.Type, InquireType))
{
SafeTypeError(MIL_TEXT("MblobInquire"));
}
return MblobInquire(ResOrFeatListBlobId, InquireType, UserVarPtr.Ptr);
}
inline MIL_INT MFTYPE MblobInquireUnsafe (MIL_ID ResOrFeatListBlobId, MIL_INT64 InquireType, void* UserVarPtr) {return MblobInquire (ResOrFeatListBlobId, InquireType, UserVarPtr );}
#define MblobGetResult MblobGetResultSafeType
#define MblobGetResultSingle MblobGetResultSingleSafeType
#define MblobGetRuns MblobGetRunsSafeType
#define MblobInquire MblobInquireSafeType
#else // #if M_MIL_USE_SAFE_TYPE
#define MblobGetResultSingleUnsafe MblobGetResultSingle
#define MblobGetRunsUnsafe MblobGetRuns
#define MblobInquireUnsafe MblobInquire
#if(!defined(__cplusplus) && M_USE_OLD_MBLOB_API_IN_C)
#define MblobGetResultUnsafe(ResultBlobId, ResultType, ResultArrayPtr) MblobGetResultNew(ResultBlobId, M_DEFAULT, ResultType, ResultArrayPtr)
#else
#define MblobGetResultUnsafe MblobGetResult
#endif
#endif // #if M_MIL_USE_SAFE_TYPE
// ----------------------------------------------------------
// Overload for std::vector.
#if defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR
template <typename UserType>
inline void MFTYPE MblobGetResult(MIL_ID ResultBlobId, MIL_INT LabelOrIndex, MIL_INT64 ResultType, std::vector<UserType> &ResultArrayPtr)
{
//! If the given MIL data type is not the same as the SrcType, change it to the correct one
//! and give a warning.
MIL_INT64 InternalTrueDataTypeForStdVector = MilTraits<UserType>::TypeFlag;
#if M_MIL_USE_SAFE_TYPE
if(M_GET_HLVLDATATYPE(ResultType) != 0)
{
SafeTypeError(MIL_TEXT("MblobGetResult"), MIL_TEXT("Combination value for the required data type is not supported with std::vector overload."));
}
#endif
ResultType = M_STRIP_HLVLDATATYPE(ResultType) + InternalTrueDataTypeForStdVector;
MIL_INT InternalNumberOfElementsForStdVector = 0;
MblobGetResult(ResultBlobId, LabelOrIndex, M_STRIP_HLVLDATATYPE(ResultType) + M_NB_ELEMENTS + M_TYPE_MIL_INT, &InternalNumberOfElementsForStdVector);
ResultArrayPtr.resize(InternalNumberOfElementsForStdVector);
if(InternalNumberOfElementsForStdVector > 0)
{
MblobGetResult(ResultBlobId, LabelOrIndex, ResultType, &ResultArrayPtr[0]);
}
}
// ----------------------------------------------------------
// Overloads for std::vector in MxxxStream.
inline void MFTYPE MblobStream(std::vector<MIL_UINT8> &MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* McontextIdPtr,
MIL_INT* SizeByteVarPtr)
{
MxxxStreamForStdVector(MemPtrOrFileName,
SysId,
Operation,
StreamType,
Version,
ControlFlag,
McontextIdPtr,
SizeByteVarPtr,
MblobStream);
}
#endif // defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR
#ifndef M_MIL_WARN_ON_DEPRECATED_MBLOB
#define M_MIL_WARN_ON_DEPRECATED_MBLOB 1
#endif
#if defined(M_MIL_WARN_ON_DEPRECATED_MBLOB) && M_MIL_WARN_ON_DEPRECATED_MBLOB
MIL_DEPRECATED(MblobAllocFeatureList, 1020) // Use MblobAlloc() instead.
MIL_DEPRECATED(MblobFill , 1020) // Use MblobDraw() instead.
MIL_DEPRECATED(MblobGetNumber , 1020) // Use MblobGetResult(M_NUMBER) instead.
MIL_DEPRECATED(MblobGetResultSingle , 1020) // Use MblobGetResult() instead.
MIL_DEPRECATED(MblobGetRuns , 1020) // Use MblobGetResult() instead.
MIL_DEPRECATED(MblobSelectFeature , 1020) // Use MblobControl() instead.
MIL_DEPRECATED(MblobSelectFeret , 1020) // Use MblobControl() instead.
MIL_DEPRECATED(MblobSelectMoment , 1020) // Use MblobControl() instead.
// For defines used in deprecated functions
MIL_DEPRECATED(M_NO_FEATURES , 1020) // Use MblobControl(M_ALL_FEATURES, M_DISABLE)
MIL_DEPRECATED(M_LATTICE , 1020) // Use MblobControl(ContextBlobId, M_CONNECTIVITY)
#endif
#if M_MIL_USE_STRING
/***************************************************************************/
/* BLOB MODULE */
/***************************************************************************/
#if M_MIL_USE_UNICODE
#if M_MIL_UNICODE_API
inline void MFTYPE MblobSaveW(const MIL_STRING& FileName, MIL_ID ContextBlobId, MIL_INT64 ControlFlag)
{
return MblobSaveW(FileName.c_str(), ContextBlobId, ControlFlag);
}
inline MIL_ID MFTYPE MblobRestoreW(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextBlobIdPtr)
{
return MblobRestoreW(FileName.c_str(), SysId, ControlFlag, ContextBlobIdPtr);
}
#else
inline void MFTYPE MblobSaveA(const MIL_STRING& FileName, MIL_ID ContextBlobId, MIL_INT64 ControlFlag)
{
return MblobSaveA(FileName.c_str(), ContextBlobId, ControlFlag);
}
inline MIL_ID MFTYPE MblobRestoreA(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextBlobIdPtr)
{
return MblobRestoreA(FileName.c_str(), SysId, ControlFlag, ContextBlobIdPtr);
}
#endif /* M_MIL_UNICODE_API */
#else
inline void MFTYPE MblobSave(const MIL_STRING& FileName, MIL_ID ContextBlobId, MIL_INT64 ControlFlag)
{
return MblobSave(FileName.c_str(), ContextBlobId, ControlFlag);
}
inline MIL_ID MFTYPE MblobRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextBlobIdPtr)
{
return MblobRestore(FileName.c_str(), SysId, ControlFlag, ContextBlobIdPtr);
}
#endif /* M_MIL_USE_UNICODE */
#endif /* M_MIL_USE_STRING*/
////////////////////////////////////////////////////////////////////////////////
// MIL_UNIQUE_ID support
#if M_MIL_USE_MIL_UNIQUE_ID
#if M_MIL_USE_SAFE_TYPE
template <> inline bool MilIsCorrectObjectType<&MblobFree>(MIL_INT64 ObjectType)
{
return (ObjectType & ~M_USER_DEFINE_LOW_ATTRIBUTE) == M_BLOB_OBJECT;
}
#endif
typedef MIL_UNIQUE_ID<&MblobFree> MIL_UNIQUE_BLOB_ID;
#if M_MIL_USE_MOVE_SEMANTICS
inline MIL_UNIQUE_BLOB_ID MblobAlloc(MIL_ID SysId, MIL_INT64 ContextType, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_BLOB_ID(MblobAlloc(SysId, ContextType, ControlFlag, M_NULL));
}
inline MIL_UNIQUE_BLOB_ID MblobAllocResult(MIL_ID SysId, MIL_INT64 ResultType, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_BLOB_ID(MblobAllocResult(SysId, ResultType, ControlFlag, M_NULL));
}
inline MIL_UNIQUE_BLOB_ID MblobRestore(MIL_CONST_TEXT_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_BLOB_ID(MblobRestore(FileName, SysId, ControlFlag, M_NULL));
}
#if M_MIL_USE_STRING
inline MIL_UNIQUE_BLOB_ID MblobRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_BLOB_ID(MblobRestore(FileName, SysId, ControlFlag, M_NULL));
}
#endif // M_MIL_USE_STRING
template <MilFreeFuncType FreeFunc> inline void MblobFree(const MIL_UNIQUE_ID<FreeFunc>&) = delete;
inline void MblobStream(MilStreamParam MemPtrOrFileName,
MIL_ID SysId ,
MIL_INT64 Operation ,
MIL_INT64 StreamType ,
MIL_DOUBLE Version ,
MIL_INT64 ControlFlag ,
MIL_UNIQUE_BLOB_ID* ContextBlobIdPtr,
MIL_INT* SizeByteVarPtr )
{
MxxxStreamForMilUniqueId(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, ContextBlobIdPtr, SizeByteVarPtr, MblobStream);
}
#endif // M_MIL_USE_MOVE_SEMANTICS
#endif // M_MIL_USE_MIL_UNIQUE_ID
// End of MIL_UNIQUE_ID support
////////////////////////////////////////////////////////////////////////////////
#endif // !M_MIL_LITE
#endif // __MILBLOB_H__