アタッチ (画像オブジェクト×複数チャネル指定)

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

Syntax

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

Parameters

image
Type: System.Collections.Generic..::..IEnumerable<(Of <(<'CFviImage>)>)>
画像オブジェクトの配列

Remarks

引数に指定された画像オブジェクトにアタッチします。 このオブジェクトが保有する画像メモリは事前に破棄されます。 設定されている処理ウィンドウはクリアされ、全面を指定したウィンドウに初期化されます。

配列の要素数分のチャネルを確保して、各画像オブジェクトに各チャネルをアタッチします。 配列の要素数は 1~16 の範囲で指定してください。 アタッチ先の画像オブジェクトが複数チャネルだった場合は、0 チャネル目が適用されます。

この関数は、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画像種別が無効です。
96FVIL.ErrorCode.NOMATCH_IMAGESIZE画像サイズが一致していません。
93FVIL.ErrorCode.NOMATCH_IMAGETYPE画像種別が一致していません。
18FVIL.ErrorCode.INVALID_CHANNELチャネル数が無効です。
12FVIL.ErrorCode.INVALID_OBJECTオブジェクトが不正です。オフセットが 0,0 でない画像にはアタッチできません。

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 Attach3()
        {
            string[] src_filenames = 
            {
                Defs.TestImageDir + "/RGB_CH0.png",
                Defs.TestImageDir + "/RGB_CH1.png",
                Defs.TestImageDir + "/RGB_CH2.png",
            };
            var srcs = new List<FVIL.Data.CFviImage>();

            try
            {
                // 1) 画像オブジェクトの生成.
                foreach (var filename in src_filenames)
                {
                    srcs.Add(new FVIL.Data.CFviImage(filename));
                }

                using (var act = new FVIL.Data.CFviImage())
                {
                    // (2) 画像オブジェクトへのアタッチ.
                    act.Attach(srcs);

                    // -) 確認用.
                    act.Save(Defs.ResultDir + "/Image.Attach3-act.png");
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                foreach (var src in srcs)
                {
                    src.Dispose();
                }
            }
        }
    }
}

Exceptions

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

See Also