Class ImageBuffer

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; }

プロパティ値

型 説明
ImageType イメージバッファに格納可能な画像の種類を表す ImageType オブジェクト

例外

型 条件
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() を確認してください。

実装

IDisposable

拡張メソッド

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)