FIE ハンドルの設定

Namespace: FVIL.Data
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public virtual void SetFIE(
	FHANDLE hImage,
	bool is_attach
)
Visual Basic
Public Overridable Sub SetFIE ( 
	hImage As FHANDLE,
	is_attach As Boolean
)

Parameters

hImage
Type: fvalgcli..::..FHANDLE
FIE ハンドル (画像オブジェクト)
is_attach
Type: System..::..Boolean
アタッチの指示。
true : アタッチします。設定されたハンドルは、このクラスでは解放されません。ユーザー側で管理してください。
false : アタッチしません。設定されたハンドルは、このクラスの Dispose メソッドで解放されます。

Remarks

外部で生成した FIE 画像オブジェクトのハンドルを設定します。

FIE ハンドルとは FIE ライブラリで使用されるデータ構造のことです。 FIE ハンドルはいくつかの種類がありますが、ここでは F_OBJID_IMG_ROOT または F_OBJID_IMG_CHILD のことを意味します。 詳しくは FIE ライブラリ説明書をご参照ください。

is_attachtrue を指定した場合、設定されたハンドルは、このクラスでは解放されません。ユーザー側で管理してください。 このクラスがアタッチしている間は hImage を解放しないでください。 このクラスの Dispose を呼び出すとアタッチを解除します。

自動的に解放したい場合は false を指定してください。 その場合、設定されたハンドルは、このクラスの Dispose メソッドで解放されます。\n

エラーにより当メソッドの処理が中断した場合は、is_attach に関わらず、 指定された hImage を解放しませんので、呼び出し元で解放してください。

処理に失敗した場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。


エラーコード:
ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR
1FVIL.ErrorCode.FAILED_TO_ALLOCATEメモリの確保に失敗しました。
11FVIL.ErrorCode.INVALID_PARAMETERパラメータが無効です。
12FVIL.ErrorCode.INVALID_OBJECTオブジェクトが不正です。

Examples

ソースコード (1):
引数 is_attachtrue を指定した場合のサンプルコードです。
C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode.Data
{
    public partial class Image
    {
        [FvPluginExecute]
        public void SetFIE1()
        {
            int status = 0;
            fvalgcli.FHANDLE hImage = IntPtr.Zero;

            try
            {
                // 1) FIE 画像オブジェクトの生成.
                status = fvalgcli.api.fnFIE_load_img_file(
                    Defs.TestImageDir + "/floppy_RGB.jpg",
                    ref hImage, fvalgcli.f_color_img_type.F_COLOR_IMG_TYPE_UC8);
                if (status != 0)
                    throw new fvalgcli.FvException(status);

                using (var src = new FVIL.Data.CFviImage())
                {
                    // 2) FIE 画像オブジェクトの設定.
                    src.SetFIE(hImage, true);

                    // -) 確認用.
                    src.Save(Defs.ResultDir + "/Image.SetFIE1.png");
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                // E) 手動で解放する必要があります.
                hImage.Dispose();
            }
        }
    }
}


ソースコード (2):
引数 is_attachfalse を指定した場合のサンプルコードです。
C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode.Data
{
    public partial class Image
    {
        [FvPluginExecute]
        public void SetFIE2()
        {
            int status = 0;
            fvalgcli.FHANDLE hImage = IntPtr.Zero;

            try
            {
                // 1) FIE 画像オブジェクトの生成.
                status = fvalgcli.api.fnFIE_load_img_file(
                    Defs.TestImageDir + "/floppy_RGB.jpg",
                    ref hImage, fvalgcli.f_color_img_type.F_COLOR_IMG_TYPE_UC8);
                if (status != 0)
                    throw new fvalgcli.FvException(status);

                // 2) FIE 画像オブジェクトの設定.
                using (var src = new FVIL.Data.CFviImage())
                {
                    // !) 正常時は CFviImage が hImage を解放します.
                    //    失敗した場合は、手動で解放する必要があります.
                    src.SetFIE(hImage, false);

                    // !) 2重解放を避ける為、Zero 初期化しておきます.
                    hImage = IntPtr.Zero;

                    // -) 確認用.
                    src.Save(Defs.ResultDir + "/Image.SetFIE2.png");
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                // E) SetFIE が失敗した時は手動で解放する必要があります.
                if (hImage != IntPtr.Zero)
                    hImage.Dispose();
            }
        }
    }
}

Exceptions

ExceptionCondition
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also