リージョンと画像の AND 演算

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

Syntax

C#
public static void And(
	CFviRegion region,
	CFviImage image,
	CFviImage result
)
Visual Basic
Public Shared Sub And ( 
	region As CFviRegion,
	image As CFviImage,
	result As CFviImage
)

Parameters

region
Type: FVIL.Data..::..CFviRegion
処理対象のリージョンオブジェクト (リージョンの始点は処理対象画像の処理範囲の左上からの相対値を示します。)
image
Type: FVIL.Data..::..CFviImage
処理対象の画像オブジェクト (BIN,UC8,S16,US16,D64,RGB32)
result
Type: FVIL.Data..::..CFviImage
処理結果を格納する画像オブジェクト (入力画像と型、チャネル数、処理範囲サイズが一致している事)

Remarks

リージョンと画像の AND 演算を行います。
リージョンのランがある位置は、処理対象の画像オブジェクトの画素値が出力画像へコピーされ、 ランが無い位置は、0 が出力画像に書き込まれます。

処理可能な画像オブジェクトの条件は以下の通りです。

  • 入力画像と出力画像の型、チャネル数、処理範囲サイズが同じである事
  • 画像種別が以下の何れかである事
※入力画像と出力画像に同じオブジェクトを指定しても処理可能です。
※リージョンのラン個数が 0 の場合や、縦横サイズが画像オブジェクトの処理範囲サイズを超える場合は、処理が行えません。

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

エラーコード:

ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。
1FVIL.ErrorCode.FAILED_TO_ALLOCATEメモリ不足の為、処理に失敗しました。
11FVIL.ErrorCode.INVALID_PARAMETERリージョンまたはパラメータが無効です。
12FVIL.ErrorCode.INVALID_OBJECTリージョンオブジェクトハンドルまたは画像オブジェクトが無効です。

Examples

以下のようなリージョンを使用した処理を示します。

・画像(処理範囲指定無しの場合)


・画像(処理範囲指定有りの場合)


・リージョン


ソースコード:
C# Copy imageCopy
//    $Revision: 1.3 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode.Region
{
    public partial class Operation
    {
        /// <summary>
        /// [リージョンオブジェクトの論理演算]
        /// AND 演算(リージョンと画像)
        /// </summary>
        /// <param name="caseindex">テストケース番号</param>
        public void And_RI(int caseindex)
        {
            try
            {
                // 1) インスタンスの準備.
                FVIL.Data.CFviImage src = new FVIL.Data.CFviImage();
                FVIL.Data.CFviImage dst = new FVIL.Data.CFviImage();
                FVIL.Data.CFviRegion region = new FVIL.Data.CFviRegion();

                // 2) 処理対象画像の準備.
                {
                    // 2-1) 取り込み.
                    FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/palette_UC8.png", src, FVIL.PixelMode.Unpacking);

                    // 2-2) 処理対象画像の処理範囲設定.
                    switch (caseindex)
                    {
                        case 0:    // Case1. 処理範囲の指定がない場合.
                            break;

                        case 1:    // Case2. 処理範囲の指定がある場合(※ 処理範囲にリージョン全体が含まれている)
                            src.Window = new System.Drawing.Rectangle(20, 5, src.HorzSize - 50, src.VertSize - 20);
                            break;

                        default:
                            break;
                    }
                }

                // 3) 出力画像オブジェクトの準備.
                dst.SetSize(src.HorzSize, src.VertSize, src.ImageType, src.Channel);
                dst.Window = new System.Drawing.Rectangle(0, 0, src.Window.Width, src.Window.Height);

                // 4) 処理対象リージョンの準備.
                {
                    // 4-1) 処理対象リージョンの取り込み.
                    region.Load(Defs.TestImageDir + "/palette_UC8_region_G.raw");

                    // 4-2) リージョンの位置の調整.
                    // 元のリージョンが(0,0)を基準にしているものとする.
                    FVIL.Data.CFviPoint initPos = region.Position;
                    region.Position = new FVIL.Data.CFviPoint(initPos.X - src.Window.Location.X, initPos.Y - src.Window.Location.Y);
                }

                // 5) 画像処理実行.
                FVIL.Region.Operation.And(region, src, dst);

                // E) 処理結果画像の保存.
                FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Region.Operation.And_RI_" + caseindex.ToString() + ".png", dst);
            }
            catch (FVIL.CFviException ex)
            {
                Console.WriteLine(ex.Function + " : ErrorCode = " + ex.ErrorCode);
                throw ex;
            }
        }

        /// <summary>
        /// [リージョンオブジェクトの論理演算]
        /// AND 演算(リージョンと画像)
        /// Case0. 処理範囲の指定がない場合.
        /// </summary>
        [FvPluginExecute]
        public void And_RI_0()
        {
            And_RI(0);
        }

        /// <summary>
        /// [リージョンオブジェクトの論理演算]
        /// AND 演算(リージョンと画像)
        /// Case1. 処理範囲の指定がある場合(※ 処理範囲にリージョン全体が含まれている)
        /// </summary>
        [FvPluginExecute]
        public void And_RI_1()
        {
            And_RI(1);
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode.Region
    Public Partial Class Operation
        ''' <summary>
        ''' [リージョンオブジェクトの論理演算]
        ''' AND 演算(リージョンと画像)
        ''' </summary>
        ''' <param name="caseindex">テストケース番号</param>
        Public Sub And_RI(caseindex As Integer)
            Try
                ' 1) インスタンスの準備.
                Dim src As New FVIL.Data.CFviImage()
                Dim dst As New FVIL.Data.CFviImage()
                Dim region As New FVIL.Data.CFviRegion()

                ' 2) 処理対象画像の準備.
                If True Then
                    ' 2-1) 取り込み.
                    FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/palette_UC8.png", src, FVIL.PixelMode.Unpacking)

                    ' 2-2) 処理対象画像の処理範囲設定.
                    Select Case caseindex
                        Case 0
                            ' Case1. 処理範囲の指定がない場合.
                            Exit Select

                        Case 1
                            ' Case2. 処理範囲の指定がある場合(※ 処理範囲にリージョン全体が含まれている)
                            src.Window = New System.Drawing.Rectangle(20, 5, src.HorzSize - 50, src.VertSize - 20)
                            Exit Select
                        Case Else

                            Exit Select
                    End Select
                End If

                ' 3) 出力画像オブジェクトの準備.
                dst.SetSize(src.HorzSize, src.VertSize, src.ImageType, src.Channel)
                dst.Window = New System.Drawing.Rectangle(0, 0, src.Window.Width, src.Window.Height)

                ' 4) 処理対象リージョンの準備.
                If True Then
                    ' 4-1) 処理対象リージョンの取り込み.
                    region.Load(Defs.TestImageDir & "/palette_UC8_region_G.raw")

                    ' 4-2) リージョンの位置の調整.
                    ' 元のリージョンが(0,0)を基準にしているものとする.
                    Dim initPos As FVIL.Data.CFviPoint = region.Position
                    region.Position = New FVIL.Data.CFviPoint(initPos.X - src.Window.Location.X, initPos.Y - src.Window.Location.Y)
                End If

                ' 5) 画像処理実行.
                FVIL.Region.Operation.[And](region, src, dst)

                ' E) 処理結果画像の保存.
                FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Region.Operation.And_RI_" & caseindex.ToString() & ".png", dst)
            Catch ex As FVIL.CFviException
                Console.WriteLine(ex.[Function] & " : ErrorCode = " & ex.ErrorCode)
                Throw ex
            End Try
        End Sub

        ''' <summary>
        ''' [リージョンオブジェクトの論理演算]
        ''' AND 演算(リージョンと画像)
        ''' Case0. 処理範囲の指定がない場合.
        ''' </summary>
        <FvPluginExecute> _
        Public Sub And_RI_0()
            And_RI(0)
        End Sub

        ''' <summary>
        ''' [リージョンオブジェクトの論理演算]
        ''' AND 演算(リージョンと画像)
        ''' Case1. 処理範囲の指定がある場合(※ 処理範囲にリージョン全体が含まれている)
        ''' </summary>
        <FvPluginExecute> _
        Public Sub And_RI_1()
            And_RI(1)
        End Sub
    End Class
End Namespace
【関数の結果】

・上記コード内の関数 void And_RI_0() を実行した場合


・上記コード内の関数 void And_RI_1() を実行した場合


Exceptions

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

See Also