データマトリックス認識
Namespace: FVIL.DMAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
[SerializableAttribute] public class CFviDM : CFviImageParser |
Visual Basic |
---|
<SerializableAttribute> Public Class CFviDM Inherits CFviImageParser |
Remarks
データマトリックスをデコードするクラスです。
要求する入出力画像数:
項目 | 数 | 定数 |
---|---|---|
入力画像 | 1 | SrcImageCount フィールド |
出力画像 | 0 | DstImageCount フィールド |
処理対象画像の条件:
処理対象の画像は下記の条件を満たしている必要が有ります。
- 画像種別が FVIL.ImageType.UC8 である事
- チャネル数が 1 である事
初期値と範囲:
プロパティ | 初期値 | 範囲 | 説明 |
---|---|---|---|
Param | CFviDMParam のインスタンス | CFviDMParam のインスタンス ※インスタンスの差し替えは行えません。設定した場合は内容を複製します。 | データマトリックス認識パラメータ |
Result | CFviDMResult のインスタンス | CFviDMResult のインスタンス | データマトリックス認識結果 |
処理対象画像の有効性検査と有効化:
-
入力画像の有効性検査
このクラスの CheckValidity(CFviImage) 関数で入力画像の有効性を検査できます。 この関数はスタティックメンバですので、このクラスのインスタンスを生成せずに直接呼び出す事ができます。 -
入出力画像の整合性検査
このクラスの IsValid()()()() メソッドで入出力画像の整合性を検査できます。 このメソッドが false を返す場合は、前述の処理対象画像の条件を満たしていない為、 実行できない事を意味します。 -
出力画像の有効化
このクラスでは有効化はサポートしていません。
Validate()()()() または Validate(Int32) メソッドを実行した場合は常に例外を発行します。
関連する FIE 関数:
fnFIE_dm_alloc_obj
fnFIE_dm_execute
fnFIE_dm_set_slant_allowance
fnFIE_dm_get_slant_allowance
fnFIE_dm_set_size_minmax
fnFIE_dm_get_size_minmax
fnFIE_dm_set_cellwidth_minmax
fnFIE_dm_get_cellwidth_minmax
fnFIE_dm_set_minvar
fnFIE_dm_get_minvar
fnFIE_dm_set_color
fnFIE_dm_get_color
Examples
ソースコード:
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using fvalgcli; namespace User.SampleCode { public partial class DM { [FvPluginExecute] public void Execute() { // 1) インスタンスの準備. FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(Defs.TestImageDir + "/dm_kanjibase256.bmp"); FVIL.DM.CFviDMResult result = new FVIL.DM.CFviDMResult(); FVIL.DM.CFviDM parser = new FVIL.DM.CFviDM(src, result); // 2) 処理対象画像の有効性検査. if (FVIL.ErrorCode._SUCCESS != FVIL.DM.CFviDM.CheckValidity(src)) return; try { // 3) パラメータ設定. parser.Param.CellWidthMax = 15; parser.Param.CellWidthMin = 4; parser.Param.ColorType = FVIL.DM.ColorType.Dark; parser.Param.MinVar = 1000; parser.Param.SizeMax = 64; parser.Param.SizeMin = 10; parser.Param.SlantAllowance = 10; // 4) 画像処理実行. FVIL.CFviTimeCounter timer = new FVIL.CFviTimeCounter(); timer.Start(); parser.Execute(); double msec = timer.Stop(); Console.WriteLine("DM"); Console.WriteLine("execute. {0} msec", msec.ToString("0.###")); Console.WriteLine("Result.Count = {0}", parser.Result.Count); FVIL.DM.CFviDMData data0 = new FVIL.DM.CFviDMData(parser.Result[0]); Console.WriteLine("DMData"); Console.WriteLine(" Index = {0}", data0.Index); Console.WriteLine(" Center = ({0:f},{1:f})", data0.Center.X, data0.Center.Y); Console.WriteLine(" (Width, Height) = ({0:f},{1:f})", data0.Size.Width, data0.Size.Height); Console.WriteLine(" CellWidth = {0:f}", data0.CellWidth); Console.WriteLine(" CellHeight = {0:f}", data0.CellHeight); Console.WriteLine(" Text = {0}", data0.Text); // E) 確認用. SaveImage(parser); } catch (System.Exception ex) { Assert.Fail("{0}", ex.Message); } finally { src.Dispose(); result.Dispose(); parser.Dispose(); } } /// <summary> /// 確認用. /// </summary> /// <param name="parser"></param> private void SaveImage(FVIL.DM.CFviDM parser) { FVIL.Data.CFviImage src = parser.SrcImages[0]; // 画像表示の準備. FVIL.GDI.CFviDisplay display = new FVIL.GDI.CFviDisplay(); display.Image = src; display.DisplayRect = src.Window; // オーバレイの生成. FVIL.GDI.CFviOverlay pOverlay0 = new FVIL.GDI.CFviOverlay(); pOverlay0.Enable = true; pOverlay0.Scaling = true; pOverlay0.ScalingMode = FVIL.GDI.ScalingMode.Center; display.Overlays.Add(pOverlay0); // 解析結果の描画. FVIL.DM.CFviDMData data = new FVIL.DM.CFviDMData(); foreach (object item in parser.Result) { data.CopyFrom(item); // 描画用: 複合図形. FVIL.GDI.CFviGdiCluster _cluster = new FVIL.GDI.CFviGdiCluster(); { // : 中心. FVIL.GDI.CFviGdiPoint _center = new FVIL.GDI.CFviGdiPoint(); _center.CopyFrom(data.Center); _center.Size = new System.Drawing.Size(5, 3); _center.Pen.Color = Color.FromArgb(0xFF, 0x00, 0x00); _center.Style = FVIL.GDI.FigureStyle.Cross; // : CellOnes. FVIL.GDI.CFviGdiPoints _cellOnes = new FVIL.GDI.CFviGdiPoints(); _cellOnes.ConvertFrom(data.GetCellOnesAsDPNT_T_ARRAY()); _cellOnes.Pen.Color = Color.FromArgb(0xFF, 0x00, 0xFF); _cellOnes.Style = FVIL.GDI.FigureStyle.Square; _cellOnes.Size = new FVIL.Data.CFviPoint(0.5, 0.5); // : DelimitingPts. FVIL.GDI.CFviGdiPolyline _delimitingPts = new FVIL.GDI.CFviGdiPolyline(); _delimitingPts.CopyFrom(data.GetCornerAsCFviPolyline()); _delimitingPts.Pen.Color = Color.FromArgb(0x00, 0x00, 0xFF); _delimitingPts.FillAlpha = 0x3F; _delimitingPts.FillColor = Color.FromArgb(0x00, 0x00, 0xFF); _delimitingPts.FillEnable = true; // 複合図形. _cluster.Figures.Clear(); _cluster.Figures.Add(_center); _cluster.Figures.Add(_cellOnes); _cluster.Figures.Add(_delimitingPts); // --- 複合図形の基準位置を設定する. _cluster.BasePosition = _center.ToCFviPoint(); // 中心. } // 追加. pOverlay0.Figures.Add(_cluster); } // 保存. using (FVIL.Data.CFviImage canvas = new FVIL.Data.CFviImage()) { display.SaveImage(canvas); canvas.Save(Defs.ResultDir + "/DM.Execute.png"); } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli Namespace SampleCode Public Partial Class DM <FvPluginExecute> _ Public Sub Execute() ' 1) インスタンスの準備. Dim src As New FVIL.Data.CFviImage(Defs.TestImageDir & "\dm_kanjibase256.bmp") Dim result As New FVIL.DM.CFviDMResult() Dim parser As New FVIL.DM.CFviDM(src, result) ' 2) 処理対象画像の有効性検査. If FVIL.ErrorCode._SUCCESS <> FVIL.DM.CFviDM.CheckValidity(src) Then Return End If Try ' 3) パラメータ設定. parser.Param.CellWidthMax = 15 parser.Param.CellWidthMin = 4 parser.Param.ColorType = FVIL.DM.ColorType.Dark parser.Param.MinVar = 1000 parser.Param.SizeMax = 64 parser.Param.SizeMin = 10 parser.Param.SlantAllowance = 10 ' 4) 画像処理実行. Dim timer As New FVIL.CFviTimeCounter() timer.Start() parser.Execute() Dim msec As Double = timer.[Stop]() Console.WriteLine("DM") Console.WriteLine("execute. {0} msec", msec.ToString("0.###")) Console.WriteLine("Result.Count = {0}", parser.Result.Count) Dim data0 As New FVIL.DM.CFviDMData(parser.Result(0)) Console.WriteLine("DMData") Console.WriteLine(" Index = {0}", data0.Index) Console.WriteLine(" Center = ({0:f},{1:f})", data0.Center.X, data0.Center.Y) Console.WriteLine(" (Width, Height) = ({0:f},{1:f})", data0.Size.Width, data0.Size.Height) Console.WriteLine(" CellWidth = {0:f}", data0.CellWidth) Console.WriteLine(" CellHeight = {0:f}", data0.CellHeight) Console.WriteLine(" Text = {0}", data0.Text) ' E) 確認用. SaveImage(parser) Catch ex As System.Exception Assert.Fail("{0}", ex.Message) Finally src.Dispose() result.Dispose() parser.Dispose() End Try End Sub ''' <summary> ''' 確認用. ''' </summary> ''' <param name="parser"></param> Private Sub SaveImage(parser As FVIL.DM.CFviDM) Dim src As FVIL.Data.CFviImage = parser.SrcImages(0) ' 画像表示の準備. Dim display As New FVIL.GDI.CFviDisplay() display.Image = src display.DisplayRect = src.Window ' オーバレイの生成. Dim pOverlay0 As New FVIL.GDI.CFviOverlay() pOverlay0.Enable = True pOverlay0.Scaling = True pOverlay0.ScalingMode = FVIL.GDI.ScalingMode.Center display.Overlays.Add(pOverlay0) ' 解析結果の描画. Dim data As New FVIL.DM.CFviDMData() For Each item As Object In parser.Result data.CopyFrom(item) ' 描画用: 複合図形. Dim _cluster As New FVIL.GDI.CFviGdiCluster() If True Then ' : 中心. Dim _center As New FVIL.GDI.CFviGdiPoint() _center.CopyFrom(data.Center) _center.Size = New System.Drawing.Size(5, 3) _center.Pen.Color = Color.FromArgb(&Hff, &H0, &H0) _center.Style = FVIL.GDI.FigureStyle.Cross ' : CellOnes. Dim _cellOnes As New FVIL.GDI.CFviGdiPoints() _cellOnes.ConvertFrom(data.GetCellOnesAsDPNT_T_ARRAY()) _cellOnes.Pen.Color = Color.FromArgb(&Hff, &H0, &Hff) _cellOnes.Style = FVIL.GDI.FigureStyle.Square _cellOnes.Size = New FVIL.Data.CFviPoint(0.5, 0.5) ' : DelimitingPts. Dim _delimitingPts As New FVIL.GDI.CFviGdiPolyline() _delimitingPts.CopyFrom(data.GetCornerAsCFviPolyline()) _delimitingPts.Pen.Color = Color.FromArgb(&H0, &H0, &Hff) _delimitingPts.FillAlpha = &H3f _delimitingPts.FillColor = Color.FromArgb(&H0, &H0, &Hff) _delimitingPts.FillEnable = True ' 複合図形. _cluster.Figures.Clear() _cluster.Figures.Add(_center) _cluster.Figures.Add(_cellOnes) _cluster.Figures.Add(_delimitingPts) ' --- 複合図形の基準位置を設定する. _cluster.BasePosition = _center.ToCFviPoint() ' 中心. End If ' 追加. pOverlay0.Figures.Add(_cluster) Next ' 保存. Using canvas As New FVIL.Data.CFviImage() display.SaveImage(canvas) canvas.Save(Defs.ResultDir & "/DM.Execute.png") End Using End Sub End Class End Namespace |