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
型インスタンスが "画像オブジェクト" である場合、
以下のような機能を使用することができます。