リージョンと画像の AND 演算
Namespace: FVIL.RegionAssembly: 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 メンバ | 内容 |
---|---|---|
51 | FVIL.ErrorCode.LICENSE_ERROR | ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。 |
1 | FVIL.ErrorCode.FAILED_TO_ALLOCATE | メモリ不足の為、処理に失敗しました。 |
11 | FVIL.ErrorCode.INVALID_PARAMETER | リージョンまたはパラメータが無効です。 |
12 | FVIL.ErrorCode.INVALID_OBJECT | リージョンオブジェクトハンドルまたは画像オブジェクトが無効です。 |
Examples
以下のようなリージョンを使用した処理を示します。
【関数の結果】
ソースコード:・画像(処理範囲指定無しの場合)
・画像(処理範囲指定有りの場合)
・リージョン
C# | Copy |
---|---|
// $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 |
---|---|
' $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
Exception | Condition |
---|---|
FVIL..::..CFviException | この例外の原因については、上記のエラーコード表をご参照ください。 |