FHANDLE¶
FIE ライブラリでは画像やリージョン等の "FIE オブジェクト" を [1]
FHANDLE 型というハンドルで扱います。
FIE(C 言語) での FHANDLE 型の実態は VOID のポインタとなっています。
PyFIE においても同様に FIE オブジェクトを扱うための FHANDLE 型が用意されていますが、
これには単なる VOID ポインタ (VOID.PTR 型) としての他に以下のような機能が付加されています。
ガベージコレクション¶
PyFIE の FHANDLE 型はデストラクタを実装しており Python によるガベージコレクションの対象となります。
FHANDLE 型のデストラクタでは FIE オブジェクトのリソース解放処理を行う fnFIE_free_object() が実行されるため
明示的に fnFIE_free_object() の呼び出しを行う必要はありません。
- C 言語
VOID func( VOID ) { FHANDLE img = fnFIE_img_root_alloc( F_IMG_UC8, 1, 512, 480 ); fnFIE_free_object( img ); // ここでリソースの解放を行わなければメモリリークとなる. }
- Python
def func(): img = pyfie.fnFIE_img_root_alloc(pyfie.F_IMG_UC8, 1, 512, 480) # 関数スコープから抜けることにより変数 img はどこからも参照されなくなり GC の対象となる. # GC の際には img に対し暗黙的に fnFIE_free_object() の呼び出しが行われる.
注釈
PyFIE の FHANDLE 型に対して明示的に fnFIE_free_object() を呼び出しても問題はありません。
その場合 FHANDLE 型のデストラクタでは fnFIE_free_object() の呼び出しは行われませんので、
リソースの二重解放とはなりません。
オブジェクト機能¶
FHANDLE 型インスタンスでは FIE オブジェクトとして、
以下の機能を使用することができます。
また、 FHANDLE 型インスタンスが "画像オブジェクト" である場合、
以下のような機能を使用することができます。