Class ImageBuffer
ImageBufferを表します。
実装
継承されたメンバ
Namespace: ic4
Assembly: ic4dotnet.dll
構文
public class ImageBuffer : HandleObject, IDisposable
解説
ImageBufferオブジェクトは、各種 Sink タイプによって自動的に作成されます。また、BufferPool から要求に応じて手動で作成することや、FromMemory(IntPtr, ulong, long, ImageType, Action<IntPtr, ulong>)を呼び出して作成することもできます。
プログラムでは ImageBuffer 型のオブジェクトを通してImageBufferを使用します。このオブジェクトが破棄されると、ImageBufferは再利用のために元の提供元へ返却されます。例えば、PopOutputBuffer()から取得したイメージバッファは、再びキューに戻されます。
プロパティ
BufferSize
イメージバッファのサイズを取得します。
宣言
public ulong BufferSize { get; }
プロパティ値
| 型 | 説明 |
|---|---|
| ulong | イメージバッファのサイズ |
例外
| 型 | 条件 |
|---|---|
| IC4Exception | 詳細については ErrorCode および ToString() を確認してください。 |
ImageType
イメージバッファに格納される画像データの種類に関する情報を取得します。
宣言
public ImageType ImageType { get; }
例外
| 型 | 条件 |
|---|---|
| IC4Exception | 詳細については ErrorCode および ToString() を確認してください。 |
IsWritable
イメージバッファオブジェクトが(安全に)書き込み可能かどうかを確認します。
宣言
public bool IsWritable { get; }
プロパティ値
| 型 | 説明 |
|---|---|
| bool | イメージバッファがライブラリ内のいずれの要素とも共有されておらず、安全に書き込み可能な場合は true、それ以外の場合は false |
備考
状況によっては、イメージバッファオブジェクトが、アプリケーション(イメージバッファオブジェクトのハンドルを保持する側)とライブラリとの間で共有されることがあります。例えば、イメージバッファが表示機能やビデオライターと共有される場合です。
共有されているバッファは、安全に書き込み可能な状態ではありません。共有バッファに書き込みを行うと、予期しない動作が発生する可能性があります。例えば、並行して実行されている処理の結果に、変更内容が一部だけ反映されることがあります。
DisplayBuffer(ImageBuffer) や AddFrame(ImageBuffer) のような関数にイメージバッファを渡すと、バッファが共有状態になることがあります。
MetaData
イメージバッファオブジェクトからフレームのメタデータを取得します。
宣言
public FrameMetaData MetaData { get; }
プロパティ値
| 型 | 説明 |
|---|---|
| FrameMetaData | フレームのメタデータを含む FrameMetaData オブジェクト |
例外
| 型 | 条件 |
|---|---|
| IC4Exception | 詳細については ErrorCode および ToString() を確認してください。 |
Pitch
イメージバッファのピッチを返します。
宣言
public long Pitch { get; }
プロパティ値
| 型 | 説明 |
|---|---|
| long | イメージバッファのピッチ。 ピッチとは、連続する2行の先頭メモリ位置間の距離(バイト単位)です。 |
例外
| 型 | 条件 |
|---|---|
| IC4Exception | 詳細については ErrorCode および ToString() を確認してください。 |
Ptr
イメージバッファによって管理されているデータへのポインターを返します。
宣言
public IntPtr Ptr { get; }
プロパティ値
| 型 | 説明 |
|---|---|
| IntPtr | イメージバッファのデータへのポインター。 返されるポインターが指すメモリは、イメージバッファオブジェクトが存在する間は有効です。 |
例外
| 型 | 条件 |
|---|---|
| IC4Exception | 詳細については ErrorCode および ToString() を確認してください。 |
メソッド
CopyFrom(ImageBuffer, CopyOptions)
あるイメージバッファの内容を、別のイメージバッファにコピーします。
宣言
public void CopyFrom(ImageBuffer other, ImageBuffer.CopyOptions options = CopyOptions.None)
パラメータ
| 型 | 名前 | 説明 |
|---|---|---|
| ImageBuffer | other | コピー元のバッファ |
| ImageBuffer.CopyOptions | options | コピー処理をカスタマイズするための ImageBuffer.CopyOptions のビット単位の組み合わせ |
備考
other と this の画像のピクセルフォーマットが異なる場合、画像は自動的に変換されます。例えば、other のピクセルフォーマットがBayerRG8、this が BGR8の場合、デモザイク処理によってカラー画像が生成されます。
flags にSkipImage が含まれている場合、画像データはコピーされません。この場合、チャンクデータとメタデータのみがコピーされ、画像コピー処理はアプリケーション側で定義したアルゴリズムに委ねられます。
flags に SkipChunkData が含まれている場合、other に含まれるチャンクデータはコピーされません。チャンクデータが大きく、不要な場合に有用です。
other と this の幅または高さが一致しない場合、処理は失敗し、エラーコード ConversionNotSupported が設定された IC4Exceptionが発生します。
要求された変換に対応するアルゴリズムが存在しない場合も、同様にエラーコード ConversionNotSupported が設定された IC4Exception が発生します。
this が書き込み可能でない場合、処理は失敗し InvalidOperationExceptionが発生します。
DuplicateReference()
イメージバッファ参照を複製します。
宣言
public ImageBuffer DuplicateReference()
戻り値
| 型 | 説明 |
|---|---|
| ImageBuffer | このイメージバッファ参照のコピー |
備考
元のイメージバッファと、この関数が返す値の両方は、バッファが再利用される前に破棄(またはガベージコレクション)される必要があります。
本関数は、渡されたイメージバッファのライフタイムを延長したい場合に有用です。
FromMemory(IntPtr, ulong, long, ImageType, Action<IntPtr, ulong>)
外部メモリを画像データの保存領域として使用し、イメージバッファオブジェクトを作成します。
宣言
public static ImageBuffer FromMemory(IntPtr bufferPtr, ulong bufferSize, long pitch, ImageType imageType, Action<IntPtr, ulong> onRelease = null)
パラメータ
| 型 | 名前 | 説明 |
|---|---|---|
| IntPtr | bufferPtr | イメージバッファオブジェクトが画像データとして使用するメモリ領域へのポインタ |
| ulong | bufferSize | bufferPtr が指すメモリ領域のサイズ |
| long | pitch | 画像データの連続する 2 行の先頭メモリアドレス間の差分 |
| ImageType | imageType | イメージバッファに格納される画像の種類 |
| Action<IntPtr, ulong> | onRelease | イメージバッファが破棄され、画像データが参照されなくなった際に呼び出される関数 |
戻り値
| 型 | 説明 |
|---|---|
| ImageBuffer | 新しく作成されたイメージバッファオブジェクト |
備考
この関数は、サードパーティ製ライブラリのバッファへ画像データをコピーする場合に有用です。
- サードパーティ製ライブラリ側で画像オブジェクトを作成する
- FromMemory を使用して、サードパーティ製ライブラリの画像データをイメージバッファとしてラップする
- CopyFrom(ImageBuffer, CopyOptions) を使用して、既存のイメージバッファオブジェクトからサードパーティ製バッファへデータをコピーする
プログラムは画像バッファオブジェクトが存在する限り、bufferPtrが指すメモリが確保されたままであることを確認する必要があります。
この関数で作成されたイメージバッファに対して Dispose() を呼び出すと、イメージバッファオブジェクトは破棄されますが、関連付けられたメモリは解放されません。
例外
| 型 | 条件 |
|---|---|
| ArgumentNullException | imageType が null の場合 |
| IC4Exception | 詳細については ErrorCode および ToString() を確認してください。 |
実装
拡張メソッド
ImageBufferExtensions.SaveAsBitmap(ImageBuffer, string, bool)
ImageBufferExtensions.SaveAsJpeg(ImageBuffer, string, int)
ImageBufferExtensions.SaveAsPng(ImageBuffer, string, bool, PngCompressionLevel)
ImageBufferExtensions.SaveAsTiff(ImageBuffer, string, bool)
ImageBufferExtensionsHalconDotNet.CopyFrom(ImageBuffer, HImage)
ImageBufferExtensionsHalconDotNet.CreateHImageCopy(ImageBuffer)
ImageBufferExtensionsHalconDotNet.CreateHImageWrap(ImageBuffer)
ImageBufferExtensionsHalconDotNet.IsHImageWrapSupported(ImageBuffer)
ImageBufferExtensionsOpenCvSharp.CreateOpenCvCopy(ImageBuffer)
ImageBufferExtensionsOpenCvSharp.CreateOpenCvWrap(ImageBuffer)
ImageBufferExtensionsOpenCvSharp.IsOpenCvWrapSupported(ImageBuffer)


