C# 래퍼#
모든 C Framegrabber API 함수는 하나의 C# 클래스 SiSoCsRt 내에서 정적 함수로 래핑됩니다. 사용법 및 함수 선언은 대부분 Framegrabber API 문서에 설명된 대로 정의됩니다. 차이점은 다음 섹션에 자세히 설명되어 있습니다.
Wrapper 구성 요소#
C# 래퍼는 Framegrabber SDK와 함께 설치됩니다.
C# wrapper는 SiSoCsInterface.dll 및 SiSoCsRt.dll의 두 가지 파일로 구성됩니다.
- SiSoCsRt.dll은 코드 내에서 C# API에 액세스하는 데 사용하는 클래스입니다.
- SiSoCsInterface.dll은 Framegrabber API와 통신하는 DLL입니다.
또한 C# 래퍼 사용을 위한 몇 가지 코드 예제가 제공됩니다.
프로젝트 준비#
래퍼 사용을 시작하려면:
- C# 프로젝트에 SiSoCsInterface.dll에 대한 참조를 추가하십시오. 파일은 다음 Framegrabber SDK 설치 경로에서 찾을 수 있습니다. Basler\FramegrabberSDK5.x.x\lib
- 복사
SiSoCsRt.dll프로그램을 실행하기 전에 PATH 디렉토리에 추가하십시오. 파일은 다음 Framegrabber SDK 설치 경로에서 찾을 수 있습니다. Basler\FramegrabberSDK5.x.x\bin
예제#
래퍼를 사용한 이미지 취득을 가장 쉽게 시작할 수 있도록 Framegrabber SDK 설치 경로에 몇 가지 C# 예제가 제공됩니다.
Basler\FramegrabberSDK5.x.x\SDKWrapper\CSharpWrapper\Examples
Framegrabber API 매핑#
형 변환(Type Mapping)#
C 데이터 유형은 다음과 같이 해당하는 C# 데이터 유형으로 매핑됩니다.
| C 데이터 형식 | C# 데이터 형식 |
|---|---|
| int, int32_t | int |
| unsigned int, uint32_t | uint |
| int64_t | long |
| uint64_t, size_t | ulong |
| char * | string |
포인터는 배열 또는 ref/out 인수로 매핑됩니다.
In/Out 함수 인수는 다음과 같이 정의됩니다. ref, 반면에 out 함수 인수는 다음과 같이 정의됩니다. out. 예를 들면 다음과 같습니다.
int clGetManufacturerInfo(string manufacturerName, ref uint bufferSize, out uint version)
bufferSize 은(는) in/out 인수이고, version 은(는) out 인수입니다.
C 열거형(enum)은 C# 열거형으로 직접 변환됩니다.
C structs 은(는) C# 클래스로 매핑되며, 구조체의 필드는 여전히 직접 액세스할 수 있거나 생성자, setter/getter를 통해 액세스할 수 있습니다.
Void 포인터는 용도에 따라 다양한 형식으로 매핑됩니다. 많은 경우 byte로 매핑됩니다.
함수 매핑#
Framegrabber API의 각 함수는 클래스 내에 해당하는 public static 함수를 가집니다. SiSoCsRt.
에 대한 참조를 생성하고 오류 코드를 반환하는 Framegrabber API 함수는, 참조를 직접 반환하고(또는 오류가 발생한 경우 struct ) null 오류 코드를 out 인수로 기록하도록 수정됩니다. 예를 들어 함수 Fg_getAppletIterator 의 정의는 다음과 같습니다.
Framegrabber API 정의:
int Fg_getAppletIterator(int boardIndex, const enum FgAppletIteratorSource src, Fg_AppletIteratorType * iter, int flags);
반환 값은 결과 오류 코드이고, iter 은(는) 생성된 참조입니다.
C# 정의:
Fg_AppletIteratorType Fg_getAppletIterator(int boardIndex, const enum FgAppletIteratorSource src, int flags, int *errorCode)
반환 값은 생성된 참조이며, 결과 errorCode 은(는) 오류 코드입니다.
콜백 함수#
각 콜백 함수는 해당 델리게이트와 동일한 시그니처를 가져야 합니다. SiSoCallback 클래스에는 사용 가능한 함수 델리게이트의 모든 선언이 포함되어 있습니다.
예를 들어, 다음 코드는 APC 핸들러를 등록하는 데 사용됩니다.
FgApcControl apcCtrl = new FgApcControl(10000,
(uint)(Fg_Apc_Flag.FG_APC_DELIVER_ERRORS));
apcCtrl.setApcCallbackFunction(apcCallback, null);
함수 apcCallback 은(는) SiSoCallback.Fg_ApcFuncDelegate과(와) 동일한 시그니처를 가져야 합니다. 구현 예시는 다음과 같습니다.
static int apcCallback(uint imgNr, fg_apc_data userData) {
global_imgNr = (int)(imgNr);
return 0;
}
다음 항목의 선언은 SiSoCallback.Fg_ApcFuncDelegate 다음과 같습니다:
public delegate int Fg_ApcFuncDelegate(uint imgNr, fg_apc_data userData);
C# Wrapper API 목록#
래퍼(wrapper)의 API는 기본적으로 Framegrabber API와 동일합니다. 이 섹션에서는 이름이 변경되었거나 인자의 순서가 다른 함수들의 정의만 다룹니다.
여기서 제공되는 함수들은 라이브러리별로 그룹화되어 있습니다:
특정 기능 사용에 대한 자세한 내용과 여기에 나열되지 않은 기능에 대한 정보는 Framegrabber API documentation을 참조하십시오.
fg#
새로 정의된 함수#
string Fg_getErrorDescription (int ErrorNumber)#
이 함수는 다음 두 함수를 모두 대체합니다:
const char *const Fg_getErrorDescription (Fg_Struct*Fg, int ErrorNumber)
const char *const getErrorDescription (int ErrorNumber)
int Fg_getParameterWith… (Fg_Struct Fg, int Parameter, out … Value, uint DmaIndex)#
다양한 타입의 정보를 사용하여 프레임 그래버 파라미터를 가져오는 데 사용되는 오버로드된 함수 목록입니다. 이 함수들은 Framegrabber API 함수를 대체합니다. Fg_getParameterWithType, 전달된 타입에 따라 다음과 같이 구성됩니다:
| FgParamTypes | C# Wrapper Function |
|---|---|
| FG_PARAM_TYPE_INT32_T | Fg_getParameterWithInt |
| FG_PARAM_TYPE_UINT32_T | Fg_getParameterWithUInt |
| FG_PARAM_TYPE_INT64_T | Fg_getParameterWithLong |
| FG_PARAM_TYPE_UINT64_T | Fg_getParameterWithULong |
| FG_PARAM_TYPE_DOUBLE | Fg_getParameterWithDouble |
| FG_PARAM_TYPE_CHAR_PTR | Fg_getParameterWithString |
| FG_PARAM_TYPE_SIZE_T | Fg_getParameterWithUInt / Fg_getParameterWithULong |
| FG_PARAM_TYPE_STRUCT_FIELDPARAMACCESS | Fg_getParameterWithIntArray / Fg_getParameterWithUIntArray / Fg_getParameterWithLongArray / Fg_getParameterWithULongArray |
| FG_PARAM_TYPE_STRUCT_FIELDPARAMINT | Fg_getParameterWithFieldParameterInt |
| FG_PARAM_TYPE_STRUCT_FIELDPARAMDOUBLE | Fg_getParameterWithFieldParameterDouble |
| FG_PARAM_TYPE_COMPLEX_DATATYPE | 구현되지 않음 |
int Fg_setParameterWith…(Fg_Struct Fg, int Parameter, … Value, uint DmaIndex)#
다양한 타입의 정보를 사용하여 프레임 그래버 파라미터를 설정하는 데 사용되는 오버로드된 함수 목록입니다. 이 함수들은 Framegrabber API 함수를 대체합니다. Fg_setParameterWithType, 전달된 타입에 따라 다음과 같이 구성됩니다:
| FgParamTypes | C# Wrapper Function |
|---|---|
| FG_PARAM_TYPE_INT32_T | Fg_setParameterWithInt |
| FG_PARAM_TYPE_UINT32_T | Fg_setParameterWithUInt |
| FG_PARAM_TYPE_INT64_T | Fg_setParameterWithLong |
| FG_PARAM_TYPE_UINT64_T | Fg_setParameterWithULong |
| FG_PARAM_TYPE_DOUBLE | Fg_setParameterWithDouble / Fg_setParameterWithFloat |
| FG_PARAM_TYPE_CHAR_PTR | Fg_setParameterWithString |
| FG_PARAM_TYPE_SIZE_T | Fg_setParameterWithUInt / Fg_setParameterWithULong |
| FG_PARAM_TYPE_STRUCT_FIELDPARAMACCESS | Fg_setParameterWithIntArray / Fg_setParameterWithUIntArray / Fg_setParameterWithLongArray / Fg_setParameterWithULongArray |
| FG_PARAM_TYPE_STRUCT_FIELDPARAMINT | Fg_setParameterWithFieldParameterInt |
| FG_PARAM_TYPE_STRUCT_FIELDPARAMDOUBLE | Fg_setParameterWithFieldParameterDouble |
| FG_PARAM_TYPE_COMPLEX_DATATYPE | 구현되지 않음 |
인수가 다른 함수#
| C# Framegrabber API Wrapper | Framegrabber API |
|---|---|
SisoImage Fg_getImagePtr(Fg_Struct Fg, int PicNr, uint DmaIndex) | void *Fg_getImagePtr(Fg_Struct *\Fg, const frameindex_t PicNr, const unsigned int DmaIndex) |
SisoImage Fg_getImagePtrEx(Fg_Struct Fg, int PicNr, uint DmaIndex, dma_mem pMem) | void *Fg_getImagePtrEx(Fg_Struct *Fg, const frameindex_t PicNr, const unsigned int DmaIndex, dma_mem *pMem) |
에서 Fg_getImagePtr및 Fg_getImagePtrEx 함수의 반환 타입은 Framegrabber API에서 이미지 바이트를 직접 나타내는 void 포인터에서 다음으로 변경됩니다. SisoImage 인스턴스.
에서 바이트 배열을 다시 가져오려면 SisoImage, SisoImage.toByteArray(uint imageSize) 함수를 호출할 수 있습니다.
또한, DrawBuffer 함수와 함께 직접 사용할 수 있습니다.
clser#
인수 순서가 변경된 함수#
다음 함수에서 에러 코드는 다음 항목에 기록됩니다. out int errorCode 함수에서 반환되는 대신 여기에 기록됩니다. 생성된 핸들은 인수로 전달되는 대신 함수에서 반환됩니다. 에러가 발생한 경우, errorCode 은 0이 아닌 값을 가지며 반환 값은 null이 됩니다.
| C# Framegrabber API Wrapper | Framegrabber API |
|---|---|
CLSerialRefclSerialInit(uint serialIndex, out int errorCode) | int clSerialInit(unsigned int serialIndex, void *serialRefPtr) |
siso_genicam#
인수 순서가 변경된 함수#
다음 함수에서 에러 코드는 다음 항목에 기록됩니다. out int errorCode 함수에서 반환되는 대신 여기에 기록됩니다. 생성된 핸들은 인수로 전달되는 대신 함수에서 반환됩니다. 에러가 발생한 경우, errorCode 은 0이 아닌 값을 가지며 반환 값은 null이 됩니다.
| C# Framegrabber API Wrapper | Framegrabber API |
|---|---|
SgcBoardHandleSgc_initBoard(Fg_Struct fg, int initFlag, out int errorCode) | int Sgc_initBoard(Fg_Struct* fg, int initFlag, SgcBoardHandle* boardHandle) |
SgcBoardHandleSgc_initBoardEx(Fg_Struct fg, uint initFlag, uint portMask, uint slaveMode, out int errorCode) | int Sgc_initBoardEx(Fg_Struct* fg, unsigned int initFlag, SgcBoardHandle* boardHandle, unsigned int portMask, unsigned int slaveMode) |
SgcCameraHandle Sgc_getCamera(SgcBoardHandle boardHandle, uint port, out int errorCode) | int Sgc_getCamera(SgcBoardHandle* boardHandle, const unsigned int port, SgcCameraHandle* cameraHandle) |
SgcCameraHandle Sgc_getCameraByIndex(SgcBoardHandle boardHandle, uint index, out int errorCode) | int Sgc_getCameraByIndex(SgcBoardHandle* boardHandle, const unsigned int index, SgcCameraHandle* cameraHandle) |
SgcConnectionProfileSgc_LoadConnectionProfile(Fg_Struct fg, string boardConfigurationFilePath, out int errorCode) | int Sgc_LoadConnectionProfile(Fg_Struct* fg, const char* boardConfigurationFilePath, SgcConnectionProfile* connectionProfilePtr) |
stringSgc_getStringValue(SgcCameraHandle cameraHandle, string name, out int errorCode) | int Sgc_getStringValue(SgcCameraHandle* cameraHandle, const char* name, const char* valuePtr) |
stringSgc_getEnumerationValueAsString(SgcCamer aHandle cameraHandle, string name, out int errorCode) | int Sgc_getEnumerationValueAsString(SgcCa meraHandle* cameraHandle, const char* name, const char* valuePtr) |
SisoDisplay#
인수가 다른 함수#
| C# Framegrabber API Wrapper | Framegrabber API |
|---|---|
void DrawBuffer(int nId, SisoImage ulpBuf, int nNr, string cpStr) | void DrawBuffer(int nId, const void *ulpBuf, const int nNr, const char *cpStr) |
에서 DrawBuffer 함수에서, ulpBuf 인수 유형이 다음으로 변경되었습니다. void pointer, 이는 Framegrabber API에서 이미지 바이트를 직접 나타내며, 다음으로 변경되었습니다. SisoImage 인스턴스.
SisoImage 은 다음을 사용하여 생성됩니다. Fg_getImagePtr 및 Fg_getImagePtrEx 함수. 또한, SisoImage 은 다음 생성자를 사용하여 바이트 배열에서 생성할 수 있습니다.
SisoImage(byte[] imagePtr, uint pixelCount)
이러한 SisoImage 인스턴스가 호출을 통해 DMA 버퍼로 사용되는 경우 fg_AddMem 해당 인스턴스에서 가비지 컬렉터에 의해 바이트 배열이 메모리에서 수집되거나 이동되지 않도록 해야 합니다. 이는 다음을 사용하여 달성할 수 있습니다. gcHandle = GCHandle.Alloc(image, GCHandleType.Pinned). 핸들은 다음을 사용하여 해제할 수 있습니다. gcHandle.Free() 메모리가 다음을 통해 DMA 버퍼에서 제거된 후 fg_DelMem.
SisoIo.h#
인수 순서가 변경된 함수#
다음 함수에서 에러 코드는 다음 항목에 기록됩니다. out int errorCode 함수에서 반환되는 대신 여기에 기록됩니다. 생성된 핸들은 인수로 전달되는 대신 함수에서 반환됩니다. 에러가 발생한 경우, errorCode 은 0이 아닌 값을 가지며 반환 값은 null이 됩니다.
| C# Framegrabber API Wrapper | Framegrabber API |
|---|---|
AviRef IoCreateAVIGray(string filename, int width, int height, double fps, out int errorCode) | int IoCreateAVIGray(void *AviRef, const char *filename, int width, int height, double fps) |
AviRef IoCreateAVIGrayW(string filename, int width, int height, double fps, out int errorCode) | int IoCreateAVIGrayW(void *AviRef, const LPCWSTR filename, int width, int height, double fps) |
AviRef IoCreateAVIColor(string filename, int width, int height, double fps, out int errorCode) | int IoCreateAVIGrayColor(void *AviRef, const char *filename, int width, int height, double fps) |
AviRef IoCreateAVIColorW(string filename, int width, int height, double fps, out int errorCode) | int IoCreateAVIGrayColorW(void *AviRef, const LPCWSTR filename, int width, int height, double fps) |
AviRef IoOpenAVI(string fileName, out int width, out int height, out int bitDepth, out int errorCode) | int IoOpenAVI(void *AviRef, const char *fileName, int *width, int *height, int *bitDepth) |
SeqRef IoCreateSeq(string pFilename, int width, int height, int bitdepth, int format, out int errorCode) | int IoCreateSeq(void *SeqRef, const char *pFilename, int width, int height, int bitdepth, int format) |
SeqRef IoOpenSeq(string pFilename, out int width, out int height, out int bitdepth, int mode, out int errorCode) | int IoOpenSeq(void *SeqRef, const char *pFilename, int* width, int* height, int* bitdepth, int mode) |
SisoIoImageEngine IoImageOpen(string filename, out int errorCode) | int IoImageOpen(const char *filename, SisoIoImageEngine *handle) |
SisoIoImageEngine IoImageOpenEx(string filename, int RGBSequence, out int errorCode) | int IoImageOpenEx(const char *filename, SisoIoImageEngine *handle, int RGBSequence) |
반환 데이터 형식 및 Out 인수 데이터 형식이 다른 함수#
다음 함수에서 반환 유형이 이미지 핸들을 나타내는 void 포인터에서 더 구체적인 핸들 유형으로 변경되었습니다.
출력 인수 unsigned char ** data, 원시 이미지 데이터에 대한 포인터로 설정되며, 다음으로 변경되었습니다. SisoImage, 이는 비관리 메모리의 이미지 데이터에 대한 핸들입니다. 다음에서 데이터를 검색하려면 SisoImage 바이트 배열로, 다음 함수들이 SisoImage.toByteArray(uint imageSize) 및 SisoImage.asByteArray() 제공됩니다.
| C# Framegrabber API Wrapper | Framegrabber API |
|---|---|
TIFFHandle IoReadTiff(string filename, out SisoImage data, out int width, out int height, out int bitPerSample, out int samplePerPixel) | void *IoReadTiff(const char *filename, unsigned char*data, int *width, int *height, int *bitPerSample, int *samplePerPixel) |
TIFFHandle IoReadTiffW(string filename, out SisoImage data, out int width, out int height, out int bitPerSample, out int samplePerPixel) | void *IoReadTiffW(const LPCWSTR filename, unsigned char*data, int *width, int *height, int *bitPerSample, int *samplePerPixel) |
TIFFHandle IoReadTiffEx(string filename, out SisoImage data, out int width, out int height, out int bitPerSample, out int samplePerPixel, int RGBSequence) | void *IoReadTiffEx(const char *filename, unsigned char*data, int *width, int *height, int *bitPerSample, int *samplePerPixel, int RGBSequence) |
TIFFHandle IoReadTiffExW(string filename, out SisoImage data, out int width, out int height, out int bitPerSample, out int samplePerPixel, int RGBSequence) | void *IoReadTiffExW(const LPCWSTR filename, unsigned char*data, int *width, int *height, int *bitPerSample, int *samplePerPixel, int RGBSequence) |
BMPHandle IoReadBmp(string filename, out SisoImage data, out int width, out int height, out int bits) | void *IoReadBmp(const char *filename,unsigned char *data,int *width,int *height,int *bits) |