C# Wrapper#
すべてのCのFramegrabber API関数は、1つのC#クラスSiSoCsRt内で静的関数としてラップされます。使用法と関数宣言は、ほとんどの部分でFramegrabber APIドキュメントに記載されているとおりに定義されています。違いについては、次のセクションで詳しく説明します。
ラッパーのコンポーネント#
C#ラッパーはFramegrabber SDKと一緒にインストールされます。
C# wrapperは、SiSoCsInterface.dllとSiSoCsRt.dllの2つのファイルで構成されています。
- 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 マッピング#
型マッピング#
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# のクラスにマッピングされ、構造体のフィールドは引き続き直接アクセスできるか、コンストラクター、またはセッター/ゲッターを介してアクセスできます。
void ポインターは、その使用法に応じて異なる型にマッピングされます。多くの場合、byte にマッピングされます。
関数マッピング#
Framegrabber API の各関数には、クラス内の対応するパブリック静的関数が存在します。 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 リスト#
ラッパーの 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# ラッパー関数 |
|---|---|
| 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# ラッパー関数 |
|---|---|
| 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 ラッパー | 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 ラッパー | 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 ラッパー | 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 ラッパー | 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 引数のタイプが、Framegrabber APIの画像バイトを直接表す void pointerから SisoImage インスタンスに変更されます。
SisoImage は、 Fg_getImagePtr および Fg_getImagePtrEx 関数を使用して作成されます。さらに、 SisoImage は次のコンストラクタを使用してバイト配列から作成できます。
SisoImage(byte[] imagePtr, uint pixelCount)
このような SisoImage インスタンスに対して fg_AddMem を呼び出してDMAバッファとして使用する場合、ガベージコレクターによってバイト配列がメモリ内で回収されたり移動されたりしないようにする必要があります。これは、 gcHandle = GCHandle.Alloc(image, GCHandleType.Pinned)を使用して実現できます。ハンドルは以下で解放できます: gcHandle.Free() DMAバッファからMemoryが削除された後、 fg_DelMem.
SisoIo.h#
引数が並べ替えられた関数#
次の関数では、エラーコードは out int errorCode 関数から返される代わりに。作成されたハンドルは引数として渡されるのではなく、関数から返されます。エラーが発生した場合、 errorCode には0以外の値が入り、戻り値はnullになります。
| C# Framegrabber API ラッパー | 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) |
戻り値のデータ型および出力引数のデータ型が異なる関数#
以下の関数では、画像ハンドルを表すvoidポインタから、より具体的なハンドルタイプに戻り値の型が変更されています。
出力引数の unsigned char ** data(これらは生画像データへのポインタに設定されます)は、以下のように変更されます。 SisoImage(これはアンマネージドMemory内の画像データのハンドルです)。 SisoImage バイト配列として、関数 SisoImage.toByteArray(uint imageSize) および SisoImage.asByteArray() 提供されます。
| C# Framegrabber API ラッパー | 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) |