アタッチ (画像オブジェクト指定)

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

Syntax

C#
public virtual void Attach(
	CFviImage image
)
Visual Basic
Public Overridable Sub Attach ( 
	image As CFviImage
)

Parameters

image
Type: FVIL.Data..::..CFviImage
画像オブジェクト

Remarks

引数に指定された画像オブジェクトにアタッチします。 このオブジェクトが保有する画像メモリは事前に破棄されます。 ビット深度・処理ウィンドウ・画像情報は、引数 src の値が複製されます。

この関数は、1つの画像メモリを複数の画像オブジェクトで共有する為に使用します。 例えば、処理ウィンドウを複数割り当てたい場合に使用できます。 アタッチを行うと、複数の画像オブジェクトで1つの画像メモリアドレスを保有する事になります。 アタッチ先の画像オブジェクトが、この領域を再確保したり破棄したりすると、 アタッチ中の画像オブジェクトが保有する画像メモリアドレスは無効な領域を指し示している事になります。 無効な領域へアクセスした場合は、アプリケーションが異常終了しますのでご注意ください。 アタッチは一時的な利用にのみ使用する事を推奨します。

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

エラーコード:

ErrorCode メンバ内容
1FVIL.ErrorCode.FAILED_TO_ALLOCATEメモリが不足しています。
11FVIL.ErrorCode.INVALID_PARAMETER引数に指定された値が不正です。
23FVIL.ErrorCode.NOT_ALLOCATED画像アドレスに IntPtr.Zero が指定されています。
17FVIL.ErrorCode.INVALID_IMAGESIZE画像サイズに 0 が指定されています。
16FVIL.ErrorCode.INVALID_IMAGETYPE画像種別が無効です。
18FVIL.ErrorCode.INVALID_CHANNELチャネル数が無効です。

Examples

ソースコード:
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 Attach1()
        {
            try
            {
                using (var src = new FVIL.Data.CFviImage())
                using (var act = new FVIL.Data.CFviImage())
                using (var dst = new FVIL.Data.CFviImage())
                {
                    // (1) 画像生成.
                    src.Load(Defs.TestImageDir + "/floppy_RGB.jpg");

                    // (2) 画像オブジェクトへのアタッチ.
                    act.Attach(src);

                    // -) 何らかの処理.
                    {
                        act.Window = new System.Drawing.Rectangle(20, 30, 200, 120);

                        var sobel = new FVIL.Filter.CFviSobelFilter(act, dst);
                        sobel.CalcMode = FVIL.Filter.SobelCalcMode.SQRTMode;
                        sobel.BorderMode = FVIL.BorderMode.Continuous;
                        sobel.BorderValue = 0.0;
                        sobel.Validate();
                        sobel.Execute();
                    }

                    // -) 確認用.
                    act.Save(Defs.ResultDir + "/Image.Attach1-act.png");
                    dst.Save(Defs.ResultDir + "/Image.Attach1-dst.png");
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
        }
    }
}

Exceptions

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

See Also