Commit a62b84e3 LN

增加codeLibary代码

1 个父辈 8d9482bc
using Basler.Pylon;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeLibrary
{
public class BaslerCamera
{
public static BaslerCamera Instance= new BaslerCamera();
/// <summary>
/// 当前相机
/// </summary>
private Camera cameraCur = null;
/// <summary>
/// 所有相机列表
/// </summary>
private List<ICameraInfo> cameraAll;
/// <summary>
/// 所有相机的名称
/// </summary>
private List<string> cameraName;
/// <summary>
/// 获取连续图像
/// </summary>
public delegate void GrabImageEvent();
/// <summary>
/// 获取连续图像事件,需要跨线程操作
/// </summary>
public event GrabImageEvent GrabImage;
private BaslerCamera()
{
Load();
}
/// <summary>
/// 错误信息
/// </summary>
public string ErrInfo { set; get; }
/// <summary>
/// 相机总数
/// </summary>
public int Count
{
get { return cameraAll == null ? 0 : cameraAll.Count; }
}
/// <summary>
/// 相机名称,ModelName,SerialNumber
/// </summary>
public string[] CameraName
{
get {
if (cameraName == null)
{
cameraName = new List<string>();
}
return cameraName.ToArray(); }
}
/// <summary>
/// 当前相机是否打开
/// </summary>
public bool IsOpen
{
get
{
if (cameraCur == null)
return false;
else
return cameraCur.IsOpen;
}
}
/// <summary>
/// 相机图像宽度
/// </summary>
public int Width { set; get; }
/// <summary>
/// 相机图像高度
/// </summary>
public int Height { set; get; }
/// <summary>
/// 相机32位缓存
/// </summary>
public byte[] Buffer { get; private set; }
/// <summary>
/// 相机32位图像
/// </summary>
public Bitmap Image { get; private set; }
/// <summary>
/// 加载相机
/// </summary>
public void Load()
{
try
{
cameraAll = CameraFinder.Enumerate();
cameraName = new List<string>();
foreach (ICameraInfo info in cameraAll)
cameraName.Add(info[CameraInfoKey.ModelName].ToString() + " (" + info[CameraInfoKey.SerialNumber].ToString() + ")");
}
catch (Exception ex)
{
HDLogUtil.error("Basler Load Error:" + ex.StackTrace);
}
}
/// <summary>
/// 打开指定相机
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public bool Open(string name)
{
int n = cameraName.FindIndex(s => s == name);
if (n == -1)
return false;
else
return Open(n);
}
/// <summary>
/// 打开指定相机
/// </summary>
/// <param name="idx">索引</param>
/// <returns></returns>
public bool Open(int idx)
{
if (idx < 0 || idx >= cameraAll.Count) return false;
if (cameraCur != null) Close();
try
{
cameraCur = new Camera(cameraAll[idx]);
//cameraCur.ConnectionLost += OnConnectionLost;
//cameraCur.CameraOpened += OnCameraOpened;
//cameraCur.CameraClosed += OnCameraClosed;
//cameraCur.StreamGrabber.GrabStarted += OnGrabStarted;
cameraCur.StreamGrabber.ImageGrabbed += OnImageGrabbed;
//cameraCur.StreamGrabber.GrabStopped += OnGrabStopped;
cameraCur.Open();
Width = Convert.ToInt32(cameraCur.Parameters[PLCamera.Width].GetValue());
Height = Convert.ToInt32(cameraCur.Parameters[PLCamera.Height].GetValue());
cameraCur.Parameters[PLCamera.UserSetSelector].SetValue(PLCamera.UserSetSelector.UserSet1); //加载用户设置1
bool bln = cameraCur.Parameters[PLCamera.UserSetLoad].TryExecute(); //执行设置
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
return false;
}
}
/// <summary>
/// 关闭当前相机
/// </summary>
public void Close()
{
if (cameraCur != null)
{
cameraCur.Close();
cameraCur.Dispose();
cameraCur = null;
}
}
/// <summary>
/// 停止抓取数据
/// </summary>
public void Stop()
{
if (cameraCur != null)
cameraCur.StreamGrabber.Stop();
}
/// <summary>
/// 抓取一张图像
/// </summary>
public void GrabOne()
{
cameraCur.Parameters[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.SingleFrame);
//cameraCur.StreamGrabber.Start();
//IGrabResult grabResult = cameraCur.StreamGrabber.RetrieveResult(5000, TimeoutHandling.ThrowException);
IGrabResult grabResult = cameraCur.StreamGrabber.GrabOne(5000);
if (!grabResult.IsValid) return;
Image = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb);
BitmapData bmpData = Image.LockBits(new Rectangle(0, 0, grabResult.Width, grabResult.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
IntPtr ptrBmp = bmpData.Scan0;
int picSize = bmpData.Stride * grabResult.Height;
PixelDataConverter conv = new PixelDataConverter();
conv.OutputPixelFormat = PixelType.BGRA8packed;
conv.Convert(ptrBmp, picSize, grabResult);
Buffer = new byte[picSize];
System.Runtime.InteropServices.Marshal.Copy(ptrBmp, Buffer, 0, picSize);
Image.UnlockBits(bmpData);
//cameraCur.StreamGrabber.Stop();
}
/// <summary>
/// 抓取连续图像,触发GrabImage事件
/// </summary>
public void GrabContinuous()
{
cameraCur.Parameters[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.Continuous);
cameraCur.StreamGrabber.Start(GrabStrategy.OneByOne, GrabLoop.ProvidedByStreamGrabber);
}
private void OnImageGrabbed(object sender, ImageGrabbedEventArgs e)
{
try
{
IGrabResult grabResult = e.GrabResult;
if (!grabResult.IsValid) return;
Image = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb);
BitmapData bmpData = Image.LockBits(new Rectangle(0, 0, grabResult.Width, grabResult.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
IntPtr ptrBmp = bmpData.Scan0;
int picSize = bmpData.Stride * grabResult.Height;
PixelDataConverter conv = new PixelDataConverter();
conv.OutputPixelFormat = PixelType.BGRA8packed;
conv.Convert(ptrBmp, picSize, grabResult);
Buffer = new byte[picSize];
System.Runtime.InteropServices.Marshal.Copy(ptrBmp, Buffer, 0, picSize);
Image.UnlockBits(bmpData);
GrabImage?.Invoke();
}
catch (Exception ex)
{
ErrInfo = ex.Message;
}
finally
{
e.DisposeGrabResultIfClone();
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{2E0D9598-CB37-46DC-9C9B-D36D4D344451}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CodeLibrary</RootNamespace>
<AssemblyName>CodeLibrary</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Basler.Pylon, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e389355f398382ab, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\dll\Basler.Pylon.dll</HintPath>
</Reference>
<Reference Include="halcondotnet">
<HintPath>..\dll\halcondotnet.dll</HintPath>
</Reference>
<Reference Include="log4net">
<HintPath>..\dll\log4net.dll</HintPath>
</Reference>
<Reference Include="MvCameraControl.Net">
<HintPath>..\dll\MvCameraControl.Net.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="camera\Basler.cs" />
<Compile Include="camera\Common.cs" />
<Compile Include="camera\HIK.cs" />
<Compile Include="FrmBase.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmBase.Designer.cs">
<DependentUpon>FrmBase.cs</DependentUpon>
</Compile>
<Compile Include="FrmCodeLearn.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmCodeLearn.Designer.cs">
<DependentUpon>FrmCodeLearn.cs</DependentUpon>
</Compile>
<Compile Include="FrmCodeDecode.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmCodeDecode.Designer.cs">
<DependentUpon>FrmCodeDecode.cs</DependentUpon>
</Compile>
<Compile Include="HDCodeHelper.cs" />
<Compile Include="HDCodeLearnHelper.cs" />
<Compile Include="HDLogUtil.cs" />
<Compile Include="ImageHelper.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="CodeResourceControl.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="FrmBase.resx">
<DependentUpon>FrmBase.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmCodeLearn.resx">
<DependentUpon>FrmCodeLearn.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmCodeDecode.resx">
<DependentUpon>FrmCodeDecode.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Content Include="resources\resources.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="记录.txt" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CodeLibrary
{
public class CodeResourceControl
{
//public delegate string GetStrDelegate(string id, string defaultStr);
//public static event GetStrDelegate GetStrEvent;
//public delegate string GetStringDelegate(string id, string defaultStr, params object[] param);
//public static event GetStringDelegate GetStringEvent;
public static bool OpenResourceLog = false;
public static string China = "zh-CN";
public static string English = "en-US";
private static Dictionary<string, string> chineseMap = new Dictionary<string, string>();
internal static string GetString(object selCamera, string v)
{
throw new NotImplementedException();
}
private static Dictionary<string, string> englishMap = new Dictionary<string, string>();
public delegate string GetLanguageDelegate();
public static event GetLanguageDelegate GetLanguageEvent;
public static string GetLanguage()
{
if (GetLanguageEvent == null)
{
return China;
}
string result = GetLanguageEvent?.Invoke();
if (result == null)
{
return "";
}
return result;
}
private static string spiltStr = "_";
private static string Text = "Text";
public static string GetTextIdStr(string className, string controlName)
{
return className + spiltStr + controlName + spiltStr + Text;
}
public static string GetTextIdStr(string className)
{
return className + spiltStr + Text;
}
public static string GetString(string id, string defaultStr)
{
string strCurLanguage = "";
try
{
if (GetLanguage().Equals(China))
{
chineseMap.TryGetValue(id,out strCurLanguage);
}else if (GetLanguage().Equals(English))
{
englishMap.TryGetValue(id, out strCurLanguage);
}
if ((strCurLanguage==null||strCurLanguage.Equals("") )&& (!defaultStr.Equals("")))
{
strCurLanguage = defaultStr;
NoIdLog(id, defaultStr);
}
}
catch (Exception ex)
{
if (defaultStr.Equals(""))
{
}
else
{
strCurLanguage = "No id:[" + id + "], please add.";
strCurLanguage = defaultStr;
NoIdLog(id, defaultStr);
}
}
return strCurLanguage;
}
public static string GetString(string id, string defaultStr, params object[] param)
{
string strCurLanguage = GetString(id, defaultStr);
return String.Format(strCurLanguage, param);
}
private static void NoIdLog(string id, string defaultStr)
{
if (OpenResourceLog)
{
HDLogUtil.info("No id:[" + id + "], please add,use default string :" + defaultStr);
}
}
static CodeResourceControl()
{
try
{
chineseMap = new Dictionary<string, string>();
englishMap = new Dictionary<string, string>();
string path = Application.StartupPath + @"\resources\resources.txt";
string[] lines = File.ReadAllLines(path);
foreach (string line in lines)
{
string[] array = line.Split(',');
if (array.Length >= 3)
{
string key = array[0];
string chinese = array[1];
string english = array[2];
if (chineseMap.ContainsKey(key))
{
chineseMap.Remove(key);
}
if (englishMap.ContainsKey(key))
{
englishMap.Remove(key);
}
chineseMap.Add(key, chinese);
englishMap.Add(key, english);
}
}
HDLogUtil.error("加载中英文配置文件完成,长度【" + chineseMap.Count + "】");
}
catch (Exception ex)
{
HDLogUtil.error("CodeResourceControl" + ex.ToString());
}
}
/// <summary>
/// 请先选择相机
/// </summary>
public static string selCamera = "selCamera";
/// <summary>
/// 请先选择图片
/// </summary>
public static string selImage = "selImage";
/// <summary>
/// 提示
/// </summary>
public static string title = "title";
/// <summary>
/// 获取二维码图片为空
/// </summary>
public static string imageIsNull = "imageIsNull";
/// <summary>
/// 确定删除文件:
/// </summary>
public static string sureDelete = "sureDelete";
}
}
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeLibrary
{
public class DHBarCodeHelper
{ /// <summary>
/// 根据图片解析二维码
/// </summary>
/// <param name="ho_Image">Halcon中的图片对象</param>
/// <param name="codeCount">二维码数量</param>
/// <param name="codeParamPath">二维码参数路径,""表示不使用参数</param>
/// <param name="paramType">二维码类型,不传类型默认Data Matrix ECC 200</param>
/// <returns>解析到的二维码</returns>
public static List<CodeInfo> DecodeCode(HObject ho_Image, int codeCount, string codeParamPath, params string[] paramType)
{
List<string> codeType = new List<string>(paramType.ToList());
if (codeType.Count<string>() <= 0)
{
codeType.Add("CODE_39");
}
List<CodeInfo> codeList = new List<CodeInfo>();
foreach (string t in codeType)
{
List<CodeInfo> array = GetCode(ho_Image, t, codeParamPath, codeCount);
codeList.AddRange(array.ToArray<CodeInfo>());
}
return codeList;
}
private static List<CodeInfo> GetCode(HObject ho_Image, string symbolType, string hv_model_path, int codeCount)
{
List<CodeInfo> codeList = new List<CodeInfo>();
try
{
HTuple hv_Area = null;
HTuple hv_Row1 = null;
HTuple hv_Column = null;
HTuple hv_PointOrder = null;
HObject ho_SymbolXLDs;
HTuple hv_ResultHandles = null;
HTuple hv_DecodedDataStrings = null;
HTuple hv_DataCodeHandle = null;
HOperatorSet.GenEmptyObj(out ho_SymbolXLDs);
HOperatorSet.CreateBarCodeModel(symbolType, "default_parameters", "maximum_recognition", out hv_DataCodeHandle);
//string hv_model_path = GetCodeParamFilePath(symbolType);
if (!hv_model_path.Equals("") && File.Exists(hv_model_path))
{
HOperatorSet.ReadDataCode2dModel(hv_model_path, out hv_DataCodeHandle);
}
ho_SymbolXLDs.Dispose();
if (codeCount <= 0)
{
HOperatorSet.FindDataCode2d(ho_Image, out ho_SymbolXLDs, hv_DataCodeHandle,
new HTuple(), new HTuple(), out hv_ResultHandles, out hv_DecodedDataStrings);
}
else
{
HOperatorSet.FindDataCode2d(ho_Image, out ho_SymbolXLDs, hv_DataCodeHandle,
"stop_after_result_num", codeCount, out hv_ResultHandles, out hv_DecodedDataStrings);
}
HOperatorSet.AreaCenterXld(ho_SymbolXLDs, out hv_Area, out hv_Row1, out hv_Column, out hv_PointOrder);
if (HalconWindow != null)
{
ShowImage(HalconWindow, ho_Image, ho_SymbolXLDs);
}
HOperatorSet.ClearDataCode2dModel(hv_DataCodeHandle);
string[] resultList = hv_DecodedDataStrings.SArr;
if (resultList.Length > 0)
{
for (int i = 0; i < hv_DecodedDataStrings.SArr.Length; i++)
{
try
{
int x = (int)Math.Round(hv_Column.DArr[i]);
int y = (int)Math.Round(hv_Row1.DArr[i]);
string str = hv_DecodedDataStrings.SArr[i];
CodeInfo code = new CodeInfo(str, x, y);
codeList.Add(code);
}
catch (Exception ex)
{
HDLogUtil.error("处理二维码出错:索引=" + i + "," + resultList.ToString());
}
}
}
return codeList;
}
catch (Exception ex)
{
return codeList;
}
}
}
}
namespace CodeLibrary
{
partial class FrmBase
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// FrmBase
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FrmBase";
this.Text = "FrmBase";
this.VisibleChanged += new System.EventHandler(this.FrmBase_VisibleChanged);
this.ResumeLayout(false);
}
#endregion
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CodeLibrary
{
public partial class FrmBase : Form
{
public string CurrLanguage = "";
public string ClassName
{
get
{
return this.GetType().Name;
}
set
{
}
}
public FrmBase()
{
InitializeComponent();
}
public void LanguageProcess()
{
if (CurrLanguage.Equals(CodeResourceControl.GetLanguage()))
{
return;
}
string className = this.ClassName;
CurrLanguage = CodeResourceControl.GetLanguage();
string name= CodeResourceControl.GetString(CodeResourceControl.GetTextIdStr(className), this.Text);
if (!name.Equals("")) { this.Text=name; }
foreach (Control con in this.Controls)
{
if (con is Label || con is Button || con is RadioButton || con is CheckBox)
{
string newStr = CodeResourceControl.GetString(CodeResourceControl.GetTextIdStr(className, con.Name), con.Text);
if (!newStr.Equals(""))
{
con.Text = newStr;
con.Tag = newStr;
}
if (CurrLanguage.Equals(CodeResourceControl.English))
{
con.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
}
else
{
con.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
}
}
else if (con.Controls.Count > 0)
{
PreControlLanaguage(con);
}
}
}
private void PreControlLanaguage(Control partentControl)
{
string className = this.ClassName;
string newStr = CodeResourceControl.GetString(CodeResourceControl.GetTextIdStr(className, partentControl.Name), partentControl.Text);
if (!newStr.Equals(""))
{
partentControl.Text = newStr;
}
foreach (Control con in partentControl.Controls)
{
if (con is Label || con is Button || con is RadioButton || con is CheckBox)
{
newStr = CodeResourceControl.GetString(CodeResourceControl.GetTextIdStr(className, con.Name), con.Text);
if (!newStr.Equals(""))
{ con.Text = newStr; }
if (CurrLanguage.Equals(CodeResourceControl.English))
{
con.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
}
else
{
con.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
}
}
else if (con.Controls.Count > 0)
{
PreControlLanaguage(con);
}
}
}
private void FrmBase_VisibleChanged(object sender, EventArgs e)
{
if (this.Visible.Equals(true))
{
LanguageProcess();
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
namespace CodeLibrary
{
partial class FrmCodeDecode
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmCodeDecode));
this.txtPath = new System.Windows.Forms.TextBox();
this.btnSelImage = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.txtResult = new System.Windows.Forms.TextBox();
this.btnErZhi = new System.Windows.Forms.Button();
this.btnGray = new System.Windows.Forms.Button();
this.hWindowControl1 = new HalconDotNet.HWindowControl();
this.btnbarCode = new System.Windows.Forms.Button();
this.btnLearn = new System.Windows.Forms.Button();
this.btnDCode = new System.Windows.Forms.Button();
this.btnClearLog = new System.Windows.Forms.Button();
this.cmbCount = new System.Windows.Forms.ComboBox();
this.lblCount = new System.Windows.Forms.Label();
this.btnCameraImage = new System.Windows.Forms.Button();
this.btnExit = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.cmbCamera = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.cmbCodeType = new System.Windows.Forms.ComboBox();
this.label3 = new System.Windows.Forms.Label();
this.btnAn = new System.Windows.Forms.Button();
this.chbUseParam = new System.Windows.Forms.CheckBox();
this.txtParamPath = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.btnLight = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.btnScanTest = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// txtPath
//
this.txtPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.txtPath.Location = new System.Drawing.Point(1047, 92);
this.txtPath.Name = "txtPath";
this.txtPath.Size = new System.Drawing.Size(321, 21);
this.txtPath.TabIndex = 0;
//
// btnSelImage
//
this.btnSelImage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnSelImage.Location = new System.Drawing.Point(10, 12);
this.btnSelImage.Name = "btnSelImage";
this.btnSelImage.Size = new System.Drawing.Size(141, 33);
this.btnSelImage.TabIndex = 1;
this.btnSelImage.Text = "打开本地图片";
this.btnSelImage.UseVisualStyleBackColor = true;
this.btnSelImage.Click += new System.EventHandler(this.btnSelImage_Click);
//
// pictureBox1
//
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox1.BackColor = System.Drawing.Color.White;
this.pictureBox1.Location = new System.Drawing.Point(917, 115);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(451, 313);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 2;
this.pictureBox1.TabStop = false;
//
// txtResult
//
this.txtResult.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.txtResult.Location = new System.Drawing.Point(917, 431);
this.txtResult.Multiline = true;
this.txtResult.Name = "txtResult";
this.txtResult.Size = new System.Drawing.Size(450, 290);
this.txtResult.TabIndex = 3;
//
// btnErZhi
//
this.btnErZhi.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnErZhi.Location = new System.Drawing.Point(557, 12);
this.btnErZhi.Name = "btnErZhi";
this.btnErZhi.Size = new System.Drawing.Size(59, 33);
this.btnErZhi.TabIndex = 5;
this.btnErZhi.Text = "二值化";
this.btnErZhi.UseVisualStyleBackColor = true;
this.btnErZhi.Visible = false;
this.btnErZhi.Click += new System.EventHandler(this.btnErZhi_Click);
//
// btnGray
//
this.btnGray.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnGray.Location = new System.Drawing.Point(557, 50);
this.btnGray.Name = "btnGray";
this.btnGray.Size = new System.Drawing.Size(59, 33);
this.btnGray.TabIndex = 6;
this.btnGray.Text = "图像转灰";
this.btnGray.UseVisualStyleBackColor = true;
this.btnGray.Visible = false;
this.btnGray.Click += new System.EventHandler(this.btnGray_Click);
//
// hWindowControl1
//
this.hWindowControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.hWindowControl1.BackColor = System.Drawing.Color.Black;
this.hWindowControl1.BorderColor = System.Drawing.Color.Black;
this.hWindowControl1.ImagePart = new System.Drawing.Rectangle(0, 0, 640, 480);
this.hWindowControl1.Location = new System.Drawing.Point(11, 115);
this.hWindowControl1.Name = "hWindowControl1";
this.hWindowControl1.Size = new System.Drawing.Size(900, 606);
this.hWindowControl1.TabIndex = 8;
this.hWindowControl1.WindowSize = new System.Drawing.Size(900, 606);
//
// btnbarCode
//
this.btnbarCode.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnbarCode.Location = new System.Drawing.Point(896, 50);
this.btnbarCode.Name = "btnbarCode";
this.btnbarCode.Size = new System.Drawing.Size(167, 33);
this.btnbarCode.TabIndex = 9;
this.btnbarCode.Text = "一维码识别";
this.btnbarCode.UseVisualStyleBackColor = true;
this.btnbarCode.Click += new System.EventHandler(this.btnbarCode_Click);
//
// btnLearn
//
this.btnLearn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnLearn.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnLearn.Location = new System.Drawing.Point(1249, 12);
this.btnLearn.Name = "btnLearn";
this.btnLearn.Size = new System.Drawing.Size(109, 33);
this.btnLearn.TabIndex = 10;
this.btnLearn.Text = "学习";
this.btnLearn.UseVisualStyleBackColor = true;
this.btnLearn.Click += new System.EventHandler(this.btnLearn_Click);
//
// btnDCode
//
this.btnDCode.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnDCode.Location = new System.Drawing.Point(896, 12);
this.btnDCode.Name = "btnDCode";
this.btnDCode.Size = new System.Drawing.Size(167, 33);
this.btnDCode.TabIndex = 11;
this.btnDCode.Text = "二维码识别";
this.btnDCode.UseVisualStyleBackColor = true;
this.btnDCode.Click += new System.EventHandler(this.btnDCode_Click);
//
// btnClearLog
//
this.btnClearLog.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnClearLog.Location = new System.Drawing.Point(711, 50);
this.btnClearLog.Name = "btnClearLog";
this.btnClearLog.Size = new System.Drawing.Size(116, 33);
this.btnClearLog.TabIndex = 12;
this.btnClearLog.Text = "清理日志";
this.btnClearLog.UseVisualStyleBackColor = true;
this.btnClearLog.Click += new System.EventHandler(this.btnClearLog_Click);
//
// cmbCount
//
this.cmbCount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmbCount.FormattingEnabled = true;
this.cmbCount.Items.AddRange(new object[] {
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20"});
this.cmbCount.Location = new System.Drawing.Point(334, 16);
this.cmbCount.Name = "cmbCount";
this.cmbCount.Size = new System.Drawing.Size(66, 25);
this.cmbCount.TabIndex = 16;
//
// lblCount
//
this.lblCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblCount.Location = new System.Drawing.Point(157, 20);
this.lblCount.Name = "lblCount";
this.lblCount.Size = new System.Drawing.Size(171, 17);
this.lblCount.TabIndex = 15;
this.lblCount.Text = "条码数量:";
this.lblCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnCameraImage
//
this.btnCameraImage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnCameraImage.Location = new System.Drawing.Point(10, 50);
this.btnCameraImage.Name = "btnCameraImage";
this.btnCameraImage.Size = new System.Drawing.Size(141, 33);
this.btnCameraImage.TabIndex = 17;
this.btnCameraImage.Text = "相机获取图片";
this.btnCameraImage.UseVisualStyleBackColor = true;
this.btnCameraImage.Click += new System.EventHandler(this.btnCameraImage_Click);
//
// btnExit
//
this.btnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnExit.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnExit.Location = new System.Drawing.Point(1249, 50);
this.btnExit.Name = "btnExit";
this.btnExit.Size = new System.Drawing.Size(109, 33);
this.btnExit.TabIndex = 18;
this.btnExit.Text = "退出";
this.btnExit.UseVisualStyleBackColor = true;
this.btnExit.Click += new System.EventHandler(this.btnExit_Click);
//
// label1
//
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.Location = new System.Drawing.Point(914, 95);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(127, 17);
this.label1.TabIndex = 19;
this.label1.Text = "图片路径";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// cmbCamera
//
this.cmbCamera.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCamera.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmbCamera.FormattingEnabled = true;
this.cmbCamera.Location = new System.Drawing.Point(334, 54);
this.cmbCamera.Name = "cmbCamera";
this.cmbCamera.Size = new System.Drawing.Size(326, 25);
this.cmbCamera.TabIndex = 21;
//
// label2
//
this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.Location = new System.Drawing.Point(157, 58);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(171, 17);
this.label2.TabIndex = 20;
this.label2.Text = "相机列表:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// cmbCodeType
//
this.cmbCodeType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCodeType.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmbCodeType.FormattingEnabled = true;
this.cmbCodeType.Location = new System.Drawing.Point(506, 16);
this.cmbCodeType.Name = "cmbCodeType";
this.cmbCodeType.Size = new System.Drawing.Size(154, 25);
this.cmbCodeType.TabIndex = 23;
this.cmbCodeType.SelectedIndexChanged += new System.EventHandler(this.cmbCodeType_SelectedIndexChanged);
//
// label3
//
this.label3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label3.Location = new System.Drawing.Point(378, 20);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(122, 17);
this.label3.TabIndex = 22;
this.label3.Text = "条码类型:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnAn
//
this.btnAn.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnAn.Location = new System.Drawing.Point(645, 50);
this.btnAn.Name = "btnAn";
this.btnAn.Size = new System.Drawing.Size(59, 33);
this.btnAn.TabIndex = 25;
this.btnAn.Text = "变暗";
this.btnAn.UseVisualStyleBackColor = true;
this.btnAn.Visible = false;
this.btnAn.Click += new System.EventHandler(this.btnAn_Click);
//
// chbUseParam
//
this.chbUseParam.AutoSize = true;
this.chbUseParam.Checked = true;
this.chbUseParam.CheckState = System.Windows.Forms.CheckState.Checked;
this.chbUseParam.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.chbUseParam.Location = new System.Drawing.Point(711, 18);
this.chbUseParam.Name = "chbUseParam";
this.chbUseParam.Size = new System.Drawing.Size(75, 21);
this.chbUseParam.TabIndex = 26;
this.chbUseParam.Text = "使用参数";
this.chbUseParam.UseVisualStyleBackColor = true;
//
// txtParamPath
//
this.txtParamPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtParamPath.Enabled = false;
this.txtParamPath.Location = new System.Drawing.Point(205, 92);
this.txtParamPath.Name = "txtParamPath";
this.txtParamPath.Size = new System.Drawing.Size(706, 21);
this.txtParamPath.TabIndex = 28;
//
// label4
//
this.label4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label4.Location = new System.Drawing.Point(6, 93);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(193, 17);
this.label4.TabIndex = 27;
this.label4.Text = "参数路径";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnLight
//
this.btnLight.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnLight.Location = new System.Drawing.Point(645, 12);
this.btnLight.Name = "btnLight";
this.btnLight.Size = new System.Drawing.Size(59, 33);
this.btnLight.TabIndex = 24;
this.btnLight.Text = "提亮";
this.btnLight.UseVisualStyleBackColor = true;
this.btnLight.Visible = false;
this.btnLight.Click += new System.EventHandler(this.btnLigth_Click);
//
// button1
//
this.button1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button1.Location = new System.Drawing.Point(723, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(167, 33);
this.button1.TabIndex = 29;
this.button1.Text = "循环测试";
this.button1.UseVisualStyleBackColor = true;
this.button1.Visible = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// btnScanTest
//
this.btnScanTest.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnScanTest.Location = new System.Drawing.Point(1069, 12);
this.btnScanTest.Name = "btnScanTest";
this.btnScanTest.Size = new System.Drawing.Size(167, 33);
this.btnScanTest.TabIndex = 30;
this.btnScanTest.Text = "扫码测试";
this.btnScanTest.UseVisualStyleBackColor = true;
this.btnScanTest.Click += new System.EventHandler(this.btnScanTest_Click);
//
// FrmCodeDecode
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1375, 729);
this.Controls.Add(this.btnScanTest);
this.Controls.Add(this.button1);
this.Controls.Add(this.txtParamPath);
this.Controls.Add(this.label4);
this.Controls.Add(this.chbUseParam);
this.Controls.Add(this.btnAn);
this.Controls.Add(this.btnLight);
this.Controls.Add(this.cmbCodeType);
this.Controls.Add(this.cmbCamera);
this.Controls.Add(this.label2);
this.Controls.Add(this.btnExit);
this.Controls.Add(this.btnCameraImage);
this.Controls.Add(this.cmbCount);
this.Controls.Add(this.lblCount);
this.Controls.Add(this.btnClearLog);
this.Controls.Add(this.btnDCode);
this.Controls.Add(this.btnLearn);
this.Controls.Add(this.btnbarCode);
this.Controls.Add(this.hWindowControl1);
this.Controls.Add(this.btnGray);
this.Controls.Add(this.btnErZhi);
this.Controls.Add(this.txtResult);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.btnSelImage);
this.Controls.Add(this.txtPath);
this.Controls.Add(this.label1);
this.Controls.Add(this.label3);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FrmCodeDecode";
this.Text = "二维码识别";
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmCodeDecode_FormClosing);
this.Load += new System.EventHandler(this.FrmMain_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox txtPath;
private System.Windows.Forms.Button btnSelImage;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.TextBox txtResult;
private System.Windows.Forms.Button btnErZhi;
private System.Windows.Forms.Button btnGray;
private HalconDotNet.HWindowControl hWindowControl1;
private System.Windows.Forms.Button btnbarCode;
private System.Windows.Forms.Button btnLearn;
private System.Windows.Forms.Button btnDCode;
private System.Windows.Forms.Button btnClearLog;
private System.Windows.Forms.ComboBox cmbCount;
private System.Windows.Forms.Label lblCount;
private System.Windows.Forms.Button btnCameraImage;
private System.Windows.Forms.Button btnExit;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox cmbCamera;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ComboBox cmbCodeType;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button btnAn;
private System.Windows.Forms.CheckBox chbUseParam;
private System.Windows.Forms.TextBox txtParamPath;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button btnLight;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button btnScanTest;
}
}

using CodeLibrary;
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace CodeLibrary
{
public partial class FrmCodeDecode : FrmBase
{
private Stopwatch stopwatch = new Stopwatch();
// private List<string> baslerNameList = new List<string>();
// private List<string> hikNameList = new List<string>();
public FrmCodeDecode()
{
InitializeComponent();
}
private string selCamera = CodeResourceControl.GetString(CodeResourceControl.selCamera, "请先选择相机");
private string selImage = CodeResourceControl.GetString(CodeResourceControl.selImage, "请先选择图片");
private string title = CodeResourceControl.GetString(CodeResourceControl.title, "提示");
private string imageIsNull = CodeResourceControl.GetString(CodeResourceControl.imageIsNull, "获取二维码图片为空");
private string sureDelete = CodeResourceControl.GetString(CodeResourceControl.sureDelete, "确定删除文件:");
private void FrmMain_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
cmbCount.Items.Clear(); cmbCount.Items.Add(-1);
for (int i = 1; i <= 300; i++)
{
cmbCount.Items.Add(i);
}
cmbCount.SelectedIndex = 0;
cmbCount.SelectedIndex = 0;
LoadCamera();
cmbCodeType.DataSource = HDCodeLearnHelper.codeTypeList;
if (HDCodeLearnHelper.codeTypeList.Count > 0)
{
cmbCodeType.SelectedIndex = 0;
}
else
{
cmbCodeType.Items.Add("QR Code");
cmbCodeType.SelectedIndex = 0;
}
}
private void LoadCamera()
{
// string[] camerName = BaslerCamera.Instance.CameraName;
// baslerNameList.AddRange(camerName);
cmbCamera.Items.Clear();
Camera.Type = CameraType.HIK;
Camera._cam.Load();
foreach (string str in Camera._cam.Name)
{
cmbCamera.Items.Add(str);
}
//camerName = HIKCamera.Instance.CameraName;
//hikNameList.AddRange(camerName);
//foreach (string str in camerName)
//{
// cmbCamera.Items.Add(str);
//}
if (cmbCamera.Items.Count > 0)
{
cmbCamera.SelectedIndex = 0;
}
}
private void btnSelImage_Click(object sender, EventArgs e)
{
System.Windows.Forms.OpenFileDialog openDialog = new System.Windows.Forms.OpenFileDialog();
openDialog.Title = selImage;
openDialog.Filter = "(*.jpg;*.png;*.bmp)|*.jpg;*.png;*.bmp";
// openDialog.Filter = "All Supported Images (*.bmp;*.dib;*.rle;*.gif;*.jpg;*.png)|*.bmp;*.dib;*.rle;*.gif;*.jpg;*.png|Bitmaps (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|Graphics Interchange Format (*.gif)|*.gif|Joint Photographic Experts (*.jpg)|*.jpg|Portable Network Graphics (*.png)|*.png|All Files (*.*)|*.*";
//openDialog.DefaultExt = "png";
System.Windows.Forms.DialogResult result = openDialog.ShowDialog();
if (result == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
txtPath.Text = openDialog.FileName;
string filename = txtPath.Text;
if (string.IsNullOrEmpty(filename))
{
MessageBox.Show(imageIsNull);
}
pictureBox1.Image = null;
//读取图片内容
Image img = (Image)Image.FromFile(filename).Clone();
pictureBox1.Image = img;
}
private void btnErZhi_Click(object sender, EventArgs e)
{
if (pictureBox1.Image == null || txtPath.Text.Equals(""))
{
MessageBox.Show(selImage, title, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Bitmap map = new Bitmap(pictureBox1.Image);
Bitmap newMap = ImageHelper.ConvertTo1Bpp1(map);
pictureBox1.Image = newMap;
}
private void btnGray_Click(object sender, EventArgs e)
{
if (pictureBox1.Image == null || txtPath.Text.Equals(""))
{
MessageBox.Show(selImage, title, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Bitmap map = new Bitmap(pictureBox1.Image);
Bitmap newMap = ImageHelper.ToGray(map);
pictureBox1.Image = newMap;
}
private void ShowCode(List<CodeInfo> list)
{
if (list.Count > 0)
{
txtResult.Text += "\r\n code list:";
foreach (CodeInfo code in list)
{
txtResult.Text += "\r\n" + "" + code.CodeType + " (X:" + code.X + ",Y:" + code.Y + ") " + code.CodeStr;
}
}
else
{
txtResult.Text += "\r\n no code ";
}
}
private void btnbarCode_Click(object sender, EventArgs e)
{
if (pictureBox1.Image == null)
{
MessageBox.Show(selImage, title, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int count = cmbCount.SelectedIndex;
txtResult.Text = "";
stopwatch.Restart();
HDCodeHelper.HalconWindow = this.hWindowControl1.HalconWindow;
Bitmap map = new Bitmap(pictureBox1.Image);
//if (chbZxing.Checked)
//{
// zxingDecode(map, "barcode");
//}
//else
{
List<CodeInfo> result = HDCodeHelper.DecodeBarCode(map);
ShowCode(result);
txtResult.Text += "\r\n elapsed time:" + stopwatch.Elapsed.ToString();
}
}
public void ShowImage(HObject ho_Image)
{
HTuple width, height;
HOperatorSet.GetImageSize(ho_Image, out width, out height);
int dWidth = (int)width.D;
int dHeight = (int)height.D;
this.hWindowControl1.HalconWindow.SetPart(0, 0, dHeight, dWidth);
HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow);
}
private void btnLearn_Click(object sender, EventArgs e)
{
FrmCodeLearn frm = new FrmCodeLearn();
frm.ShowDialog();
}
private void btnDCode_Click(object sender, EventArgs e)
{
if (pictureBox1.Image == null)
{
MessageBox.Show(selImage, title, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int count = cmbCount.SelectedIndex;
txtResult.Text = "";
stopwatch.Restart();
Bitmap map = new Bitmap(pictureBox1.Image);
HObject ho_image = HDCodeHelper.Bitmap2HObjectBpp24(map);
txtResult.Text += "\r\n elapsed time:" + stopwatch.Elapsed.ToString();
hWindowControl1.HalconWindow.SetPart(0, 0, map.Height, map.Width);
HOperatorSet.DispObj(ho_image, hWindowControl1.HalconWindow);
ShowImage(ho_image);
HDCodeHelper.HalconWindow = this.hWindowControl1.HalconWindow;
string codeParamPath = HDCodeHelper.GetCodeParamFilePath(cmbCodeType.Text);
if (chbUseParam.Checked.Equals(false))
{
codeParamPath = "";
}
//if (chbZxing.Checked)
//{
// zxingDecode(map, cmbCodeType.Text);
//}
//else
{
List<CodeInfo> codeList = new List<CodeInfo>();
if (cmbCodeType.Text.ToLower().Equals("barcode"))
{
codeList = HDCodeHelper.DecodeBarCode(ho_image);
}
else
{
codeList = HDCodeHelper.DecodeCode(ho_image, count, codeParamPath, cmbCodeType.Text);
}
//if (codeList.Count <= 0)
//{
// zxingDecode(map, cmbCodeType.Text);
//}
//else
{
ShowCode(codeList);
txtResult.Text += "\r\n elapsed time:" + stopwatch.Elapsed.ToString();
}
}
}
private void zxingDecode(Bitmap map,string type )
{
//List<string> results = ZXingCodeHelper.DeCodes(map, type);
//txtResult.Text = " zxing decode:";
//foreach (string code in results)
//{
// txtResult.Text += "\r\n" + "\r\n" + code;
//}
//txtResult.Text += "\r\n \r\n elapsed time:" + stopwatch.Elapsed.ToString();
}
private void btnClearLog_Click(object sender, EventArgs e)
{
HDLogUtil.ClearLog();
txtResult.Text = "";
}
private Bitmap GetCameraBitmap()
{
try
{
int index = cmbCamera.SelectedIndex;
string camerName = cmbCamera.Text;
if (index < 0)
{
MessageBox.Show(selCamera);
return null;
}
//if (baslerNameList.Contains(camerName))
//{
// BaslerCamera.Instance.Open(camerName);
// BaslerCamera.Instance.GrabOne();
// Bitmap bitmap = BaslerCamera.Instance.Image;
// BaslerCamera.Instance.Close();
// return bitmap;
//}
//else
//{
// HIKCamera.Instance.Open(camerName);
// HIKCamera.Instance.GrabOne();
// Bitmap bitmap = HIKCamera.Instance.Image;
// HIKCamera.Instance.Close();
// return bitmap;
//}
Bitmap map = Camera._cam.GrabOneImage(camerName);
if (map == null)
{
Camera._cam.Close(camerName);
map = Camera._cam.GrabOneImage(camerName);
}
return map;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return null;
}
private void btnCameraImage_Click(object sender, EventArgs e)
{
Bitmap bitmap = GetCameraBitmap();
if (bitmap != null)
{
HDLogUtil.info("从相机【" + cmbCamera.Text + "】获取到一张图片");
pictureBox1.Image = bitmap;
HObject hoImage = HDCodeHelper.Bitmap2HObjectBpp24(bitmap);
HDCodeLearnHelper.DefaultImage = hoImage;
}
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnLigth_Click(object sender, EventArgs e)
{
if (pictureBox1.Image == null || txtPath.Text.Equals(""))
{
MessageBox.Show(selImage, title, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Bitmap map = new Bitmap(pictureBox1.Image);
Bitmap newMap = ImageHelper.KiLighten(map, 10);
pictureBox1.Image = newMap;
}
private void btnAn_Click(object sender, EventArgs e)
{
if (pictureBox1.Image == null || txtPath.Text.Equals(""))
{
MessageBox.Show(selImage, title, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Bitmap map = new Bitmap(pictureBox1.Image);
Bitmap newMap = ImageHelper.KiLighten(map, -10);
pictureBox1.Image = newMap;
}
private void cmbCodeType_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbCodeType.SelectedIndex >= 0)
{
txtParamPath.Text = HDCodeHelper.GetCodeParamFilePath(cmbCodeType.Text);
}
}
private System.Timers.Timer testTimer = new System.Timers.Timer();
private int testCount = 0;
private void button1_Click(object sender, EventArgs e)
{
if (testTimer.Enabled)
{
HDLogUtil.info("停止扫码测试");
testTimer.Stop();
}
else
{
HDLogUtil.info("开始扫码测试");
testCount = 0;
testTimer.Interval = 1000;
testTimer.Elapsed += TestTimer_Elapsed;
testTimer.AutoReset = true;
testTimer.Start();
}
}
private void TestTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
if (pictureBox1.Image == null)
{
return;
}
int count = cmbCount.SelectedIndex;
txtResult.Text = "";
stopwatch.Restart();
testCount++;
Bitmap map = new Bitmap(pictureBox1.Image);
HObject ho_image = HDCodeHelper.Bitmap2HObjectBpp24(map);
txtResult.Text += "\r\n elapsed time:" + stopwatch.Elapsed.ToString();
hWindowControl1.HalconWindow.SetPart(0, 0, map.Height, map.Width);
HOperatorSet.DispObj(ho_image, hWindowControl1.HalconWindow);
ShowImage(ho_image);
HDCodeHelper.HalconWindow = this.hWindowControl1.HalconWindow;
string codeParamPath = HDCodeHelper.GetCodeParamFilePath(cmbCodeType.Text);
if (chbUseParam.Checked.Equals(false))
{
codeParamPath = "";
}
List<CodeInfo> codeList = new List<CodeInfo>();
if (cmbCodeType.Text.ToLower().Equals("barcode"))
{
codeList = HDCodeHelper.DecodeBarCode(ho_image);
}
else
{
codeList = HDCodeHelper.DecodeCode(ho_image, count, codeParamPath, cmbCodeType.Text);
}
ShowCode(codeList);
txtResult.Text += "\r\n elapsed time:" + stopwatch.Elapsed.ToString();
HDLogUtil.info("第【" + testCount + "】次扫码测试结束");
}
catch (Exception ex)
{
HDLogUtil.error(ex.ToString());
}
}
private void FrmCodeDecode_FormClosing(object sender, FormClosingEventArgs e)
{
Camera._cam.CloseAll();
}
//private void btnScanTest_Click(object sender, EventArgs e)
//{
// Image img = (Image)Image.FromFile(@"E:\GigE-MV-CE200-10GC (00E06252332)\16-05-15-984.bmp").Clone();
// using (Bitmap bitmap = new Bitmap(img))
// //using (Bitmap bitmap = GetCameraBitmap())
// {
// if (bitmap != null)
// {
// System.Threading.Thread.Sleep(1);
// //转换托盘大概100-150ms,不打印日志
// HalconDotNet.HObject ho_Image = HDCodeHelper.Bitmap2HObjectBpp24(bitmap);
// // LogUtil.info(" 相机【" + cameraName + "】转换图片完成,开始扫码");
// List<CodeInfo> cc = new List<CodeInfo>();
// string str = "";
// List<string> codeTypeList = new List<string>(HDCodeLearnHelper.codeTypeList);
// string r = "";
// int count = cmbCount.SelectedIndex;
// foreach (string codeType in codeTypeList)
// {
// //判断是否是一维码
// if (codeType.ToLower().Equals("barcode"))
// {
// cc = HDCodeHelper.DecodeBarCode(ho_Image);
// }
// else
// {
// string codeParamPath = HDCodeHelper.GetCodeParamFilePath(codeType);
// cc = HDCodeHelper.DecodeCode(ho_Image, count, codeParamPath, codeType);
// }
// foreach (CodeInfo c in cc)
// {
// r += (c.CodeStr) + "##";
// }
// }
// MessageBox.Show(r);
// // ShowCode(cc);
// ho_Image.Dispose();
// bitmap.Dispose();
// }
// }
//}
private void btnScanTest_Click(object sender, EventArgs e)
{
using (Bitmap bitmap = GetCameraBitmap())
{
if (bitmap != null)
{
HDLogUtil.info("获取图片完成,开始转换图片,并扫码");
System.Threading.Thread.Sleep(1);
//转换托盘大概100-150ms,不打印日志
Bitmap bit = new Bitmap(bitmap);
HalconDotNet.HObject ho_Image = HDCodeHelper.Bitmap2HObjectBpp24(bit);
// LogUtil.info(" 相机【" + cameraName + "】转换图片完成,开始扫码");
List<CodeInfo> cc = new List<CodeInfo>();
string str = "";
List<string> codeTypeList = new List<string>(HDCodeLearnHelper.codeTypeList);
string r = "";
int count = cmbCount.SelectedIndex;
foreach (string codeType in codeTypeList)
{
//判断是否是一维码
if (codeType.ToLower().Equals("barcode"))
{
cc = HDCodeHelper.DecodeBarCode(ho_Image);
}
else
{
string codeParamPath = HDCodeHelper.GetCodeParamFilePath(codeType);
cc = HDCodeHelper.DecodeCode(ho_Image, count, codeParamPath, codeType);
}
foreach (CodeInfo c in cc)
{
r += (c.CodeStr) + "##";
}
}
MessageBox.Show(r);
// ShowCode(cc);
ho_Image.Dispose();
bitmap.Dispose();
}
}
}
private void btnCopyN_Click(object sender, EventArgs e)
{
string text = cmbCamera.Text;
Clipboard.SetDataObject(text);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAYGAAAAEAIAColAAAFgAAACgAAABgAAAAwAAAAAEAIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JieVNiYnsTYm
J7E2JiaxNiYnsTYmJ7E2JiaxNiYnsTYmJrE2JiaxNiYnsTYmJrE2JiaxNiYnsTYmJrE2JiaxNiYnsTYm
JrE2JiexNiYnsTYmJ7E2JiexNiYnsTYmJ7E2JiexNiYnsTYmJ7E2JiavNiYnBAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJyY2JiexNiYnsTYmJ7E2JiexNiYmsTYmJ7E2JiexNiYmsTYm
J7E2JiexNiYmsTYmJ7E2JiexNiYmsTYmJ7E2JiexNiYmsTYmJ7E2JiexNiYmsTYmJ7E2JiexNiYmsTYm
J7E2JiexNiYmsTYmJ7E2Jic2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JiYONiYnMjYmJxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zUmJ/81Jif/NiYn/zUm
J/81Jif/NiYn/zUmJ/81Jif/NiYn/zUmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zYm
J/82Jif7NicnBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJzY1Jif/NiYn/zYm
J/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYm
J/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82JidOAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANSYnBjYmJ402Jif3NSYn/zUlJ/02Jie3NiYmIAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiUm/zYlJv81JSb/NiUm/zYl
Jv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv81JSb/NiUm/zUl
Jv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv82Jib7NycnBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADYmJzY1JSb/NiUm/zUlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYl
Jv82JidOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1JicENSYnqzYlJv82JSb/NSUm/zYl
Jv82JSb/NiYn3zYmJw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zUmJv81Jib/NiYn/zUmJv81JSb/NiUn/zUlJv81JSb/NiUn/zUlJv81JSb/NiUn/zUl
Jv81JSb/NiUn/zUlJv81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/82Jib7NycnBgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJzY1JSf/NiYn/zUlJ/82JSb/NSYm/zYl
J/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYl
J/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JidOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUm
JwQ1JietNSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYmJ2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zUm
J/81Jif/NiYn/zUmJ/81Jif/NiYn/zUmJ/81Jif/NiYn/zUmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zYm
J/81Jif/NiYn/zYmJ/82Jif7NicnBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYm
Jy41JifZNiYn2TUmJ9k2JifZNSYm2TYmJ9k2JifZNSYm2TYmJ9k2JifZNSYm2TYmJ+s2Jif/NSYn/zYm
J/82Jif/NiYn+TYmJ/E2JifxNSYn8TYmJ/E2JifxNSYn8TYmJ/E2JifxNSYn8TYmJ/E2JidKAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANSYnBjUmJ6s2Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYm
J5EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiUm/zYl
Jv81JSb/NiUm/zYmJ8c1JSeNNSUnjTUlJ401JSeNNSUnjTUlJ401JSeNNSUnjTUlJ401JSeNNSUnjTUl
J401JSeNNSUnjTUlJ401JSeNNiYnszUlJv81JSb/NiUm/zUlJv82Jib7NycnBgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAANiYnVjUlJv82Jif9NiYneDUmKAAAAAAANiYnFDYmJ5U2Jif5NiUm/zUlJv81JSb/NiUm/zUl
Jv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYmJ+k2JidyNiYnCAAAAAA2JicCNSUnoTYlJv82JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYmJ+s2JicwAAAAAAAAAAAAAAAANiYnCjYmJ702JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zUmJv81Jib/NiYn/zYmJ4MAAAAAAAAAAAAAAAA2JicmNiYn9zYmJvc2Jif3NiYn9zYm
Jvc2Jif3NiYn9zYmJvc2JifzNiYnBgAAAAAAAAAANiYnVjYmJ/s2JidgAAAAADcnJwA2JideNiYn7TUl
J/81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/82Jif7NiYn+zYl
J/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NiYn3TYm
J0o2JiedNSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NiYn6TYmJywAAAAAAAAAAAAA
AAA2JicKNiYnvTYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81Jif/NiYn/zYmJ4MAAAAAAAAAAAAA
AAA3JycANiYmBDYmJgQ2JiYENiYmBDYmJgQ2JiYENiYmBDYmJgQ2JicENSYoAAAAAAAAAAAANiYnSjYm
J0oAAAAANSUmDDYmJ6k2Jif/NiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn7zYm
J7E2Jid2NiYnRDYmJxw2JicGNiYmBjYmJxA2JicoNSUnRjYmJ2w2JiedNiYn1zYmJ/02Jif/NSYn/zYm
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JidWNiUm/zUlJv81JSb/NiUm/zUl
Jv82JieRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ042JSb/NSUm/zYlJv82JSb/NSUm/zYm
J40AAAAANiYnYjYlJv82JieVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANSUmlzYlJv82JSb/NSUm/zYl
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2Jie/NiYn/zUlJ/81JSf/NiYn/zYmJ/M2JicUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAg
IAA2JifFNSYm/zYlJ/82JSb/NSYm/zYmJ+01JScGNiYnBDYmJ9U2JieVAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANSYmlzYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJx42Jif9NiYn/zYmJ/81Jif/NiYn/zYmJ5MAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JidONSYn/zYmJ/82Jif/NSYn/zYmJ/81JidMAAAAADYm
J1I2JieVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANSYmlzYmJ/82Jif/NSYn/zYmJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ3A1JSb/NiUm/zUl
Jv81JSb/NiUm/zYmJzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JiYENiYn4TYl
Jv82JSb/NSUm/zYlJv82JiedAAAAADUlJgA2JideAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANSUmlzYl
Jv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADYmJ701JSf/NiYn/zUlJ/81JSf/NiYn2TcnJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANiYniTYlJ/82JSb/NSYm/zYlJ/82JifhNiYoAAAAAAA3JycCAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANSYmlzYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JicaNiUnIDYmJyA2JicgNiUnIDYmJxAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnCDYmJ/c1Jif/NiYn/zYmJ/81Jif/NiYnkwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnOjYmJ/82Jif/NSYn/zYm
J/82Jif/NiYnHgAAAAA4KCgANiYnIDYmJyA2JicgNiYnIDYmJyA2JicgNSYmpTYmJ/82Jif/NSYn/zYm
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiUm/zYl
Jv81JSb/NiUm/zYmJ4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnOjUl
Jv81JSb/NiUm/zUlJv81JSb/NiYnWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANiYnBDYmJ/E2JSb/NSUm/zYlJv82JSb/NiYnUgAAAAA4KCgENiYn+TYlJv82JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zUmJv81Jib/NiYn/zYmJ4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANiYnbDUlJv81JSf/NiYn/zUlJ/81JSf/NiYnKAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ7s2JSb/NSYm/zYlJ/82JSb/NiYnfAAA
AAA4KCgENiYn+TYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81Jif/NiYn/zYm
J4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnlzUmJ/81Jif/NiYn/zYm
J/82Jif7NiYnCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYm
J402Jif/NSYn/zYmJ/82Jif/NiYnoQAAAAA3JycENiYn+TYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYm
J/82Jif/NSYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiUm/zYlJv81JSb/NiUm/zYmJ4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANiYnuTUlJv81JSb/NiUm/zUlJv82JifrNiYmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ2Y2JSb/NSUm/zYlJv82JSb/NiYnuwAAAAA4KCgENiYn+TYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JidoNSUnfDUlJ3w1JSd8NSUnfDYmJ0g2JiaDNiYngzYm
J4M2JiaDNiYngzYmJ4M2JiaDNiYnZAAAAAAAAAAANiYn0zUlJv81JSf/NiYn/zUlJ/82JifbAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ0o2JSb/NSYm/zYl
J/82JSb/NiYn0QAAAAA1JSUANiYmEjUlJxI1JScSNiYmEjUlJxI1JicaNSYn+zYlJ/82JSb/NSYm/zYl
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADcnJxI1Jif/NiYn/zUmJ/81Jif/NiYn/zUmJ/81Jif/NiYnxwAAAAAAAAAANiYn5TUm
J/81Jif/NiYn/zYmJ/82JifTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADYmJzo2Jif/NSYn/zYmJ/82Jif/NiYn4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JScINSYn+zYmJ/82Jif/NSYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcnJxI1JSb/NiUm/zUlJv81JSb/NiUm/zUl
Jv81JSb/NiUnxwAAAAAAAAAANiUn6zUlJv81JSb/NiUm/zUlJv82JifTAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJzY2JSb/NSUm/zYlJv82JSb/NiYn6QAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JigINSUn+zYlJv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcn
JxI1Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiUnxwAAAAAAAAAANiYn2zUmJv81JSf/NiYn/zUm
J/82JifpOCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYm
J0Q2JSb/NSYm/zYlJ/82JSb/NiYn6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1JScINSYn+zYl
J/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADcnJxI2Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYnxwAA
AAAAAAAANiYnvTYmJv82Jif/NiYn/zYmJ/82Jif9NiYnDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ1w2Jib/NiYn/zYmJv82Jib/NiYn2wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JigINiYn+zYmJv82Jib/NiYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcnJxI1JSb/NSUn/zUl
Jv81JSb/NiYn7zUlJuE1JSbhNSUnsQAAAAAAAAAANiYnlzUlJv81JSf/NiUm/zUlJ/81JSf/NiYnMAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ3w1JSb/NSUn/zUl
Jv81JSb/NiYnwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1JScINSUn+zUlJv81JSb/NSUn/zUl
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADcnJxI1Jib/NiYn/zUmJv81Jib/NiYnbgAAAAAAAAAAAAAAAAAAAAAAAAAANiYnZjUm
Jv81JSf/NiYn/zUmJ/81JSf/NiYnXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJyA2Jif3NiYn/zYm
Jv82Jib/NiYn/zYmJ7cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANiYnszUlJ/81JSf/NiUm/zUlJ/81JSf/NiYnegAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANSUmADYmJ7E1JSb/NSUn/zUlJv81JSb/NiYn/zYmJ0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnMjYmJ/01JSf/NiYn/zUm
J/81JSf/NiYn9zYmJzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnYjYlJ/82JSb/NSYm/zYlJ/82JSb/NiYnxTUl
JwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JicQNSYnFDUl
JxQ1JScUNSYnFDUlJxQ1JicUNiYnFDUmJxQ1JicUNiYnFDUmJxQ1JicUNiYnFDUmJxQ1JicUNiYnFDYm
JxAAAAAAAAAAADYmJ502Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ9s2JicSAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2Jic2NiYn9TYm
Jv82Jib/NiYn/zYmJv82Jif9NiYnPDUlJwo1JicUNSUnFDUmJxQ1JicUNSUnFDUmJxQ1JicUNSUnFDUm
JxQ1JicUNSUnFDUmJxQ1JicUNSUnFDUmJxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zYmJ/k2JicyAAAAADYmJxQ2JifpNiUm/zUlJ/81JSf/NiUm/zUl
J/82JifDNiYnDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADUmJyw1JifrNSUn/zUlJv81JSb/NSUn/zUlJv82JiedNiYnDDYmJ9k1JSb/NSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81JSb/NiYn/zYm
J/81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv82JifXNiYnDAAA
AAA2JidONiYn/TUmJ/81JSf/NiYn/zUmJ/81JSf/NiYnwzYmJxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnPDYmJ+s2JSb/NSYm/zYlJ/82JSb/NSYm/zYm
J902JicONiYnoTYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYl
J/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYm
Jv82Jib/NiYn/zYmJv82Jif/NiYnnTgoKAAAAAAANiYnizYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J9c2JicsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmKAI2JiduNiYn+TYm
Jv82Jib/NiYn/zYmJv82Jib/NiYn9TYmJzQ2JidaNiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYm
Jv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSf/NiYn/zYmJ1gAAAAANiYmBDYm
J681JSf/NiUm/zUlJ/81JSf/NiUm/zUlJ/82Jif1NiYncjYmJwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANiYnKjYmJ781JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSf7NiYnUjYmJyA2JifxNSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUl
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYm
J/81JSb/NiYn/zYmJ/81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiYn/zUm
Jv81JSf/NiYn/zYmJ+82JicgAAAAADYmJwg2Jie7NiYn/zUmJ/81JSf/NiYn/zUmJ/81JSf/NiYn/zYm
J9U2JidSNiYnAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJyg2JiefNiYn+zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYm
J/s2JidcNiYnBDYmJ8c2JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYl
J/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJ2Q2JidENiYnRDYmJ0Q2JidENiYnRDYm
J0Q2JidENiYnRDYmJ0Q2JidENiYnRDYmJ0Q2JidENiYnRDYmJ0Q2JiYkAAAAAAAAAAA2JicINiYnqzYm
J/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn2TYmJ3Q2JiccOCgoAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJxQ2JidiNiYnvTYmJ/02Jib/NiYn/zYm
Jv82Jib/NiYn/zYmJv82Jib/NiYn8TYmJ0wAAAAANiYnNDYlJpE2JSaRNSUmkTYlJpE2JSaRNSUmkTYl
JpE2JSaRNSUmkTYlJpE2JSaRNSUmkTYlJpE2JifLNiYn/zYmJv82Jib/NiYn/zYmJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUn/zUlJv81JSb/NSUn/zYm
Jy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAOCgoAAAAAAAAAAAANSUnAjYmJ342Jif9NiUm/zUlJ/81JSf/NiUm/zUlJ/81JSf/NiUm/zUl
J/82Jif9NiYnyzYmJ4s2JidUNiYnKjYmJwoAAAAAAAAAADcnJwI2JicWNiYnNjYmJ142JieRNiYnyzYm
Jvs1JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv82JifTNiYnKgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JieHNSUn/zUl
Jv81JSb/NSUn/zUlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zYmJ/81JSb/NiYn/zYmJy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnkzYmJ3o2JicOAAAAAAAAAAA2Jic+NiYn2zUm
J/81JSf/NiYn/zUmJ/81JSf/NiYn/zUmJ/81JSf/NiYn/zUmJ/81JSf/NiYn/zUmJ/82Jif3NiYn9TYm
J/02JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NiYn9zYm
J4U2JicIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JieHNSYm/zYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJy4AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnozYm
J/82JifrNiUndjYmJwwAAAAANiYnCDYmJ3o2JifvNiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYm
Jv82Jib/NiYn/zYmJ/s2JielNiYnJAAAAAA2JicONiYnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JSaHNiYn/zYmJv82Jib/NiYn/zYm
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUn/zUl
Jv81JSb/NSUn/zYmJy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANSYnozUlJ/81JSf/NiUm/zYmJ+k2JidyNiYnCgAAAAA2JicSNiYnejYm
J+M1JSf/NiUm/zUlJ/81JSf/NiUm/zUlJ/81JSf/NiUm/zUlJ/81JSb/NSUn/zUlJv81JSb/NSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv82JifpNiYnjTYmJyQAAAAANicnADYmJ1Q2JibjNSYnaAAA
AAAAAAAAAAAAADYmJww2Jic8NSUnPDYmJzw2Jic8NSUnPDYmJzw2Jic8NSUnPDYmJyIAAAAAAAAAAAAA
AAA2JieHNSUn/zUlJv81JSb/NSUn/zUlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zUmJv81Jib/NiYn/zYmJy4AAAAAAAAAAAAAAAA2JicgNiUnzzUm
Js82JibPNiUnzzUmJs82JibPNiUnzzUmJs82JidmAAAAAAAAAAAAAAAANiUnozUmJ/81JSf/NiYm/zUm
J/81JSf/NiYnswAAAAAAAAAAAAAAADYmJwQ2JidGNiYnmzYmJ+M1JSf/NiYm/zUmJ/81JSf/NiYm/zUm
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
AAA2JieHNSYn/zYlJ/82JSf/NSYn/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiUnozYmJv82Jib/NiYm/zYm
Jv82Jib/NiUnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUmJ1Q2Jib/NiYm/zYm
Jv82Jib/NiYm/zYlJ9sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYmkTYm
Jv82Jib/NiYm/zYmJv82Jib/NSYmaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JSeHNiYm/zYmJv82Jib/NiYm/zYlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUn/zUlJ/81JSf/NSUn/zYm
Jy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANiYnozUlJ/81JSf/NSUn/zUlJ/81JSf/NSUnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADYmJ1Q1JSf/NSUn/zUlJ/81JSf/NSUn/zUmJ9sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANiYmkTUlJ/81JSf/NSUn/zUlJ/81JSf/NiYmaAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JieHNSUn/zUl
J/81JSf/NSUn/zUmJucAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJ1Q2JicuNiYnLjYmJy42JicuNiYnLjYmJy42JicuNiYnLjYm
Jy42JicuNiYnLjYmJy42JicuNiYnLjYmJy42JicuNiYntTUmJ/81JSf/NiYn/zUmJ/81JSf/NiUnuwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUmJ1Q1JSf/NiYn/zUmJ/82JSb/NSYn/zYm
J+E2JicuNiYnLjYmJy42JicuNiYnLjYmJwQAAAAAAAAAAAAAAAAAAAAANiYmkTYlJ/82JSb/NSYn/zYl
J/82JSb/NiYmaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JieHNSYn/zYlJ/82JSb/NSYn/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jif/NiYnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUm
J1Q2Jif/NiYn/zYmJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYmJxYAAAAAAAAAAAAA
AAAAAAAANiYmkTYlJ/82Jif/NiYn/zYlJ/82Jif/NiYnyTYmJ6M2JiejNSYnozYmJ6M2JiejNSYnozYm
J6M2JiejNSYnozYmJ6M2JiejNSYnozYmJ6M2JiejNSYnozYmJ6M2JSfVNiYn/zYlJ/82Jif/NiYn/zYm
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUm/zUl
Jv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUl
Jv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUnuwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYlJ1Q1JSb/NSUm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zYmJxYAAAAAAAAAAAAAAAAAAAAANiYmkTUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJucAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJv81Jib/NiUn/zUmJv81Jib/NiUn/zUm
Jv81Jib/NiUn/zUmJv81Jib/NiUn/zUmJv81JSf/NiYn/zUmJ/81JSf/NiYn/zUmJ/81JSf/NiYn/zUm
J/81JSf/NiUnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUmJ1Q1JSf/NiYn/zUm
J/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYmJxYAAAAAAAAAAAAAAAAAAAAANiYmkTYl
J/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYl
J/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADUmJ1Q2Jif/NiYn/zYmJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYm
JxYAAAAAAAAAAAAAAAAAAAAANiYmkTYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYl
J/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYl
J/82Jif/NiYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUl
Jv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUnuwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYlJ1Q1JSb/NSUm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zYmJxYAAAAAAAAAAAAAAAAAAAAANiYmkTUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJucAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0JCgENSUpBjUlKQY1JSkGNSUpBjUlKQY0JCgGNSUpBjQl
KAY0JCgGNSUpBjQlKAY0JCgGNSUpBjQlKAY0JCgGNSUpBjQlKAY1JSkGNCUpBjUlKQY1JSkGNCUpBjUl
KQY1JSkGNCUpBjUlKQY1JSkGNSUoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUl
KAI1JSkGNCUpBjUlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjMjJgAAAAAAAAAAAAAA
AAAAAAAANSUoBDQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQl
KQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjUl
KQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////
///////////////////////////////////////////////////8AAAAP/gAAAD////8AAAAP/gAAAD/
4P/8AAAAP/gAAAD/wH/8AAAAP/gAAAD/gH/8AAAAP/gAAAD/AD/8AAAAP///g//+AH/8D//4P///g//8
AH/8D//4Pwf/g//4AP/8D//4Pwf/g//wAf/8D//4Pwf/g//gA//8DwB4Pwf/h//AB//8DwB4P4////+A
D7/8DwB4P////j8AHz/8DwB4P////j4APj/8DwB4P/AB/3wAfD/8DwB4PwAAH/gA+D/8DwB4eAAAB/AB
8D/8DwB54AAAAeAD4D/8DwB7wAAAAEAHwD/8D///AAf8AAAPgD/8D//+AD//wAAfAD/8D//8Af//8AA+
AD/8D//4A////AB////8AAAwD////gD////8AAAgH////4Dx///8AABgP////8Dh///8AADAf////+Bh
///8AADA/////+Ax///8AAGB//////Ax/D////+B//////gZ+D////8D//////gZ+D////8D//////wd
+D////8H//////wP+D////4H//////wP+D////4H//////4P+D/8D/4P//////4OAD/8D/4P//////4O
AD/8D/wP//////4GAD/8D/wP//////8GAD//8BwP//////8H+D//8AwP//////8H+D//8AwP//////8H
+D//8AwP//////8H+D//8AwP//////8H+D//8AwP//////8H+D//8P4P//////4H+D//8P4H//////4O
D///8P4H//////4OD///8P4H//////4OD///8P8D//////wOD/////8D//////wf//////8D//////gf
//////+B//////gf//////+B//////A////////A//////A////////Af////+B////8AADgP////8BA
AD/8AABwH////4CAAD/8AAAwD////wGAAD/8AAA4B////AMAAD/8AAAcAf//8AYAAD/8H//+AH//wA4A
AD/8H///gAf8AB//8D/8H//3wAAAAD//8D/8H//x8AAAAP//8D/8H//wfAAAA9//8D/8HwDwHwAAHx8A
cD/8HwDwH/AD/h8AcD/8HwDwH///+B8AcD/8HwDwHz/4+B8AcD/8HwDwHw/g+B8AcD/8HwDwHw/g+B8A
cD/8HwDwHw/g+B8AcD/8HwDwH///+B8AcD/8HwDwH/gf+B8A8D/8H//wH/gf+B//8D/8H//wH/gf+B//
8D/8H//wH/gf+B//8D/8H//wH/gf+B//8D/8AAAAH/gA+AAAAD/8AAAAH/gA+AAAAD/8AAAAH/gA+AAA
AD/8AAAAH/gA+AAAAD/8AAAAH/gA+AAAAD//////////////////////////////////////////////
//////////////////////////////////////////////////8=
</value>
</data>
</root>
\ No newline at end of file
namespace CodeLibrary
{
partial class FrmCodeLearn
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmCodeLearn));
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.btnStop = new System.Windows.Forms.Button();
this.btnOpen = new System.Windows.Forms.Button();
this.hWindowControl1 = new HalconDotNet.HWindowControl();
this.btnExit = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.cmbHalconCamera = new System.Windows.Forms.ComboBox();
this.cmbCodeType = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.txtParamPath = new System.Windows.Forms.TextBox();
this.lblCount = new System.Windows.Forms.Label();
this.cmbCount = new System.Windows.Forms.ComboBox();
this.richTextBox2 = new System.Windows.Forms.RichTextBox();
this.btnClearLog = new System.Windows.Forms.Button();
this.chbTest = new System.Windows.Forms.CheckBox();
this.btnSelImage = new System.Windows.Forms.Button();
this.txtPath = new System.Windows.Forms.TextBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.chbUseCamera = new System.Windows.Forms.CheckBox();
this.btnDelOld = new System.Windows.Forms.Button();
this.label4 = new System.Windows.Forms.Label();
this.chbHalcon = new System.Windows.Forms.CheckBox();
this.cmbCamera = new System.Windows.Forms.ComboBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// timer1
//
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// btnStop
//
this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnStop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnStop.Location = new System.Drawing.Point(949, 51);
this.btnStop.Name = "btnStop";
this.btnStop.Size = new System.Drawing.Size(144, 35);
this.btnStop.TabIndex = 3;
this.btnStop.Text = "结束学习";
this.btnStop.UseVisualStyleBackColor = true;
this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
//
// btnOpen
//
this.btnOpen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnOpen.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnOpen.Location = new System.Drawing.Point(949, 13);
this.btnOpen.Name = "btnOpen";
this.btnOpen.Size = new System.Drawing.Size(144, 35);
this.btnOpen.TabIndex = 1;
this.btnOpen.Text = "开始学习";
this.btnOpen.UseVisualStyleBackColor = true;
this.btnOpen.Click += new System.EventHandler(this.btnOpen_Click);
//
// hWindowControl1
//
this.hWindowControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.hWindowControl1.BackColor = System.Drawing.Color.Black;
this.hWindowControl1.BorderColor = System.Drawing.Color.Black;
this.hWindowControl1.ImagePart = new System.Drawing.Rectangle(0, 0, 640, 480);
this.hWindowControl1.Location = new System.Drawing.Point(6, 123);
this.hWindowControl1.Name = "hWindowControl1";
this.hWindowControl1.Size = new System.Drawing.Size(733, 600);
this.hWindowControl1.TabIndex = 5;
this.hWindowControl1.WindowSize = new System.Drawing.Size(733, 600);
//
// btnExit
//
this.btnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnExit.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnExit.Location = new System.Drawing.Point(1096, 51);
this.btnExit.Name = "btnExit";
this.btnExit.Size = new System.Drawing.Size(110, 35);
this.btnExit.TabIndex = 6;
this.btnExit.Text = "退出";
this.btnExit.UseVisualStyleBackColor = true;
this.btnExit.Click += new System.EventHandler(this.btnExit_Click);
//
// label1
//
this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.Location = new System.Drawing.Point(3, 19);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(110, 20);
this.label1.TabIndex = 7;
this.label1.Text = "相机:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// cmbHalconCamera
//
this.cmbHalconCamera.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbHalconCamera.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmbHalconCamera.FormattingEnabled = true;
this.cmbHalconCamera.Location = new System.Drawing.Point(131, 16);
this.cmbHalconCamera.Name = "cmbHalconCamera";
this.cmbHalconCamera.Size = new System.Drawing.Size(186, 25);
this.cmbHalconCamera.TabIndex = 8;
this.cmbHalconCamera.Visible = false;
//
// cmbCodeType
//
this.cmbCodeType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCodeType.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmbCodeType.FormattingEnabled = true;
this.cmbCodeType.Location = new System.Drawing.Point(131, 53);
this.cmbCodeType.Name = "cmbCodeType";
this.cmbCodeType.Size = new System.Drawing.Size(186, 25);
this.cmbCodeType.TabIndex = 10;
this.cmbCodeType.SelectedIndexChanged += new System.EventHandler(this.cmbCodeType_SelectedIndexChanged);
//
// label2
//
this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.Location = new System.Drawing.Point(3, 57);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(110, 20);
this.label2.TabIndex = 9;
this.label2.Text = "类型:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label3
//
this.label3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label3.Location = new System.Drawing.Point(12, 101);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(189, 17);
this.label3.TabIndex = 11;
this.label3.Text = "参数路径";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// txtParamPath
//
this.txtParamPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtParamPath.Enabled = false;
this.txtParamPath.Location = new System.Drawing.Point(207, 101);
this.txtParamPath.Name = "txtParamPath";
this.txtParamPath.Size = new System.Drawing.Size(529, 21);
this.txtParamPath.TabIndex = 12;
//
// lblCount
//
this.lblCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblCount.Location = new System.Drawing.Point(323, 58);
this.lblCount.Name = "lblCount";
this.lblCount.Size = new System.Drawing.Size(112, 20);
this.lblCount.TabIndex = 13;
this.lblCount.Text = "条码数量:";
this.lblCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// cmbCount
//
this.cmbCount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmbCount.FormattingEnabled = true;
this.cmbCount.Items.AddRange(new object[] {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20"});
this.cmbCount.Location = new System.Drawing.Point(441, 54);
this.cmbCount.Name = "cmbCount";
this.cmbCount.Size = new System.Drawing.Size(64, 25);
this.cmbCount.TabIndex = 14;
//
// richTextBox2
//
this.richTextBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.richTextBox2.Location = new System.Drawing.Point(745, 438);
this.richTextBox2.Name = "richTextBox2";
this.richTextBox2.Size = new System.Drawing.Size(465, 284);
this.richTextBox2.TabIndex = 15;
this.richTextBox2.Text = "";
//
// btnClearLog
//
this.btnClearLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnClearLog.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnClearLog.Location = new System.Drawing.Point(1096, 13);
this.btnClearLog.Name = "btnClearLog";
this.btnClearLog.Size = new System.Drawing.Size(110, 35);
this.btnClearLog.TabIndex = 16;
this.btnClearLog.Text = "清理日志";
this.btnClearLog.UseVisualStyleBackColor = true;
this.btnClearLog.Click += new System.EventHandler(this.btnClearLog_Click);
//
// chbTest
//
this.chbTest.AutoSize = true;
this.chbTest.Checked = true;
this.chbTest.CheckState = System.Windows.Forms.CheckState.Checked;
this.chbTest.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.chbTest.Location = new System.Drawing.Point(531, 56);
this.chbTest.Name = "chbTest";
this.chbTest.Size = new System.Drawing.Size(147, 21);
this.chbTest.TabIndex = 17;
this.chbTest.Text = "学习结束自动识别测试";
this.chbTest.UseVisualStyleBackColor = true;
this.chbTest.CheckedChanged += new System.EventHandler(this.chbTest_CheckedChanged);
//
// btnSelImage
//
this.btnSelImage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnSelImage.Location = new System.Drawing.Point(783, 15);
this.btnSelImage.Name = "btnSelImage";
this.btnSelImage.Size = new System.Drawing.Size(160, 32);
this.btnSelImage.TabIndex = 19;
this.btnSelImage.Text = "打开本地图片";
this.btnSelImage.UseVisualStyleBackColor = true;
this.btnSelImage.Click += new System.EventHandler(this.btnSelImage_Click);
//
// txtPath
//
this.txtPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.txtPath.Enabled = false;
this.txtPath.Location = new System.Drawing.Point(869, 101);
this.txtPath.Name = "txtPath";
this.txtPath.Size = new System.Drawing.Size(338, 21);
this.txtPath.TabIndex = 18;
//
// pictureBox1
//
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox1.BackColor = System.Drawing.Color.White;
this.pictureBox1.Location = new System.Drawing.Point(745, 123);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(465, 309);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 20;
this.pictureBox1.TabStop = false;
//
// chbUseCamera
//
this.chbUseCamera.AutoSize = true;
this.chbUseCamera.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.chbUseCamera.Location = new System.Drawing.Point(531, 18);
this.chbUseCamera.Name = "chbUseCamera";
this.chbUseCamera.Size = new System.Drawing.Size(123, 21);
this.chbUseCamera.TabIndex = 21;
this.chbUseCamera.Text = "相机获取实时图片";
this.chbUseCamera.UseVisualStyleBackColor = true;
this.chbUseCamera.CheckedChanged += new System.EventHandler(this.chbUseCamera_CheckedChanged);
//
// btnDelOld
//
this.btnDelOld.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnDelOld.Location = new System.Drawing.Point(783, 53);
this.btnDelOld.Name = "btnDelOld";
this.btnDelOld.Size = new System.Drawing.Size(160, 32);
this.btnDelOld.TabIndex = 22;
this.btnDelOld.Text = "删除旧参数";
this.btnDelOld.UseVisualStyleBackColor = true;
this.btnDelOld.Click += new System.EventHandler(this.btnDelOld_Click);
//
// label4
//
this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label4.Location = new System.Drawing.Point(745, 103);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(122, 17);
this.label4.TabIndex = 23;
this.label4.Text = "图片路径";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// chbHalcon
//
this.chbHalcon.AutoSize = true;
this.chbHalcon.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.chbHalcon.Location = new System.Drawing.Point(344, 19);
this.chbHalcon.Name = "chbHalcon";
this.chbHalcon.Size = new System.Drawing.Size(115, 21);
this.chbHalcon.TabIndex = 24;
this.chbHalcon.Text = "Halcon获取图片";
this.chbHalcon.UseVisualStyleBackColor = true;
this.chbHalcon.CheckedChanged += new System.EventHandler(this.chbHalcon_CheckedChanged);
//
// cmbCamera
//
this.cmbCamera.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCamera.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmbCamera.FormattingEnabled = true;
this.cmbCamera.Location = new System.Drawing.Point(131, 17);
this.cmbCamera.Name = "cmbCamera";
this.cmbCamera.Size = new System.Drawing.Size(186, 25);
this.cmbCamera.TabIndex = 25;
//
// FrmCodeLearn
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(1218, 729);
this.Controls.Add(this.cmbCamera);
this.Controls.Add(this.chbHalcon);
this.Controls.Add(this.label4);
this.Controls.Add(this.btnDelOld);
this.Controls.Add(this.chbUseCamera);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.btnSelImage);
this.Controls.Add(this.txtPath);
this.Controls.Add(this.chbTest);
this.Controls.Add(this.btnClearLog);
this.Controls.Add(this.richTextBox2);
this.Controls.Add(this.cmbCount);
this.Controls.Add(this.lblCount);
this.Controls.Add(this.txtParamPath);
this.Controls.Add(this.label3);
this.Controls.Add(this.cmbCodeType);
this.Controls.Add(this.label2);
this.Controls.Add(this.cmbHalconCamera);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnExit);
this.Controls.Add(this.hWindowControl1);
this.Controls.Add(this.btnStop);
this.Controls.Add(this.btnOpen);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FrmCodeLearn";
this.Text = "条码参数学习";
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FrmCamera_FormClosed);
this.Load += new System.EventHandler(this.FrmCamera_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnOpen;
private System.Windows.Forms.Button btnStop;
private System.Windows.Forms.Timer timer1;
private HalconDotNet.HWindowControl hWindowControl1;
private System.Windows.Forms.Button btnExit;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox cmbHalconCamera;
private System.Windows.Forms.ComboBox cmbCodeType;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtParamPath;
private System.Windows.Forms.Label lblCount;
private System.Windows.Forms.ComboBox cmbCount;
private System.Windows.Forms.RichTextBox richTextBox2;
private System.Windows.Forms.Button btnClearLog;
private System.Windows.Forms.CheckBox chbTest;
private System.Windows.Forms.Button btnSelImage;
private System.Windows.Forms.TextBox txtPath;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.CheckBox chbUseCamera;
private System.Windows.Forms.Button btnDelOld;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.CheckBox chbHalcon;
private System.Windows.Forms.ComboBox cmbCamera;
}
}
\ No newline at end of file
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CodeLibrary;
namespace CodeLibrary
{
public partial class FrmCodeLearn : FrmBase
{
private List<string> baslerNameList = new List<string>();
private List<string> hikNameList = new List<string>();
public FrmCodeLearn()
{
InitializeComponent();
}
private string selCamera =CodeResourceControl.GetString(CodeResourceControl.selCamera, "请先选择相机");
private string selImage = CodeResourceControl.GetString(CodeResourceControl.selImage, "请先选择图片");
private string title = CodeResourceControl.GetString(CodeResourceControl.title, "提示");
private string imageIsNull = CodeResourceControl.GetString(CodeResourceControl.imageIsNull, "获取二维码图片为空");
private string sureDelete = CodeResourceControl.GetString(CodeResourceControl.sureDelete, "确定删除文件:");
private Bitmap GetCameraBitmap()
{
Bitmap bitmap = null;
int index = cmbCamera.SelectedIndex;
string camerName = cmbCamera.Text;
if (index < 0)
{
MessageBox.Show(selCamera);
return null;
}
//if (baslerNameList.Contains(camerName))
//{
// BaslerCamera.Instance.Open(camerName);
// BaslerCamera.Instance.GrabOne();
// bitmap = BaslerCamera.Instance.Image;
// BaslerCamera.Instance.Close();
//}
//else
//{
// HIKCamera.Instance.Open(camerName);
// HIKCamera.Instance.GrabOne();
// bitmap = HIKCamera.Instance.Image;
// HIKCamera.Instance.Close();
//}
bitmap = Camera._cam.GrabOneImage(camerName);
return bitmap;
}
private void btnOpen_Click(object sender, EventArgs e)
{
string filePath = txtParamPath.Text;
string cameraName = "";
string codeType = this.cmbCodeType.Text;
int count = cmbCount.SelectedIndex + 1;
if (chbUseCamera.Checked)
{
if (chbHalcon.Checked)
{
cameraName = cmbHalconCamera.Text;
if (cameraName.Equals(""))
{
MessageBox.Show(selCamera,title, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
else
{
Bitmap bitmap = GetCameraBitmap();
if (bitmap != null)
{
HDLogUtil.info("从相机【" + cmbCamera.Text + "】获取到一张图片");
pictureBox1.Image = bitmap;
HObject hoImage = HDCodeHelper.Bitmap2HObjectBpp24(bitmap);
HDCodeLearnHelper.DefaultImage = hoImage;
}
else
{
return;
}
}
}
else
{
if (pictureBox1.Image == null)
{
MessageBox.Show(selImage,title ,MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Bitmap bitmap = new Bitmap( pictureBox1.Image);
HObject Image = HDCodeHelper.Bitmap2HObjectBpp24(bitmap);
HDCodeLearnHelper.DefaultImage = Image;
}
Task.Factory.StartNew(delegate ()
{
HDCodeLearnHelper.StartLearn(this.hWindowControl1.HalconWindow, cameraName, codeType, filePath, count,5000);
});
FormStatus(true);
}
private void LoadCamera()
{
//string[] camerName = BaslerCamera.Instance.CameraName;
//baslerNameList.AddRange(camerName);
cmbCamera.Items.Clear();
foreach (string str in Camera._cam.Name)
{
cmbCamera.Items.Add(str);
}
//camerName = HIKCamera.Instance.CameraName;
//hikNameList.AddRange(camerName);
//foreach (string str in camerName)
//{
// cmbCamera.Items.Add(str);
//}
if (cmbCamera.Items.Count > 0)
{
cmbCamera.SelectedIndex = 0;
}
}
private void FormStatus(bool open)
{
btnOpen.Enabled = !open;
btnStop.Enabled = open;
}
private void btnStop_Click(object sender, EventArgs e)
{
HDCodeLearnHelper.StopLearn();
FormStatus(false);
}
private void FrmCamera_Load(object sender, EventArgs e)
{
cmbCount.SelectedIndex = 0;
chbTest.Checked = HDCodeLearnHelper.IsNeedTest;
CheckForIllegalCrossThreadCalls = false;
HDLogUtil.logBox = this.richTextBox2;
if (HDCodeLearnHelper.codeTypeList.Count <= 0)
{
HDCodeLearnHelper.LoadConfig("", "");
}
LoadCamera();
FormStatus(false);
cmbHalconCamera.DataSource = HDCodeLearnHelper.cameraNameList;
if (HDCodeLearnHelper.cameraNameList.Count > 0)
{
cmbHalconCamera.SelectedIndex = 0;
}
cmbCodeType.DataSource = HDCodeLearnHelper.codeTypeList;
if (HDCodeLearnHelper.codeTypeList.Count > 0)
{
cmbCodeType.SelectedIndex = 0;
}
string filePath =HDCodeHelper.GetCodeParamFilePath(cmbCodeType.Text);
txtParamPath.Text = filePath;
cmbCount.Items.Clear();
for(int i = 1; i <= 300; i++)
{
cmbCount.Items.Add(i);
}
cmbCount.SelectedIndex = 0;
chbUseCamera.Checked = true;
timer1.Start();
}
private void FrmCamera_FormClosed(object sender, FormClosedEventArgs e)
{
if (btnStop.Enabled.Equals(true))
{
btnStop_Click(null, null);
HDLogUtil.logBox = null;
FormStatus(false);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (HDCodeLearnHelper.IsRun)
{
if (btnOpen.Enabled)
{
btnOpen.Enabled = false ;
}
}
else
{
if (btnOpen.Enabled.Equals(false))
{
btnOpen.Enabled = true;
}
}
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void cmbCodeType_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbCodeType.SelectedIndex >= 0)
{
txtParamPath.Text = HDCodeHelper.GetCodeParamFilePath(cmbCodeType.Text );
}
}
private void btnClearLog_Click(object sender, EventArgs e)
{
HDLogUtil.ClearLog();
}
private void chbTest_CheckedChanged(object sender, EventArgs e)
{
HDCodeLearnHelper.IsNeedTest = chbTest.Checked;
}
private void btnSelImage_Click(object sender, EventArgs e)
{
System.Windows.Forms.OpenFileDialog openDialog = new System.Windows.Forms.OpenFileDialog();
openDialog.Title = selImage;
openDialog.Filter = "(*.jpg;*.png;*.bmp)|*.jpg;*.png;*.bmp";
//openDialog.DefaultExt = "png";
System.Windows.Forms.DialogResult result = openDialog.ShowDialog();
if (result == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
txtPath.Text = openDialog.FileName;
string filename = txtPath.Text;
if (string.IsNullOrEmpty(filename))
{
MessageBox.Show(imageIsNull);
}
pictureBox1.Image = null;
//读取图片内容
Image img = (Image)Image.FromFile(filename).Clone();
pictureBox1.Image = img;
}
private void chbUseCamera_CheckedChanged(object sender, EventArgs e)
{
if (chbUseCamera.Checked)
{
cmbHalconCamera.Enabled = true ;
btnSelImage.Enabled = false;
}
else
{
cmbHalconCamera.Enabled = false ;
btnSelImage.Enabled = true ;
}
}
private void btnDelOld_Click(object sender, EventArgs e)
{
string path = txtParamPath.Text;
if (path.Equals(""))
{
return;
}
FileInfo file = new FileInfo(path);
DialogResult result = MessageBox.Show(sureDelete +file.Name+ "", title, MessageBoxButtons.YesNo);
if (result.Equals(DialogResult.Yes))
{
File.Delete(path);
}
}
private void chbHalcon_CheckedChanged(object sender, EventArgs e)
{
if (chbHalcon.Checked)
{
cmbHalconCamera.Visible = true;
cmbCamera.Visible = false;
}
else
{
cmbHalconCamera.Visible = false ;
cmbCamera.Visible = true ;
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>25</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAYGAAAAEAIAColAAAFgAAACgAAABgAAAAwAAAAAEAIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JieVNiYnsTYm
J7E2JiaxNiYnsTYmJ7E2JiaxNiYnsTYmJrE2JiaxNiYnsTYmJrE2JiaxNiYnsTYmJrE2JiaxNiYnsTYm
JrE2JiexNiYnsTYmJ7E2JiexNiYnsTYmJ7E2JiexNiYnsTYmJ7E2JiavNiYnBAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJyY2JiexNiYnsTYmJ7E2JiexNiYmsTYmJ7E2JiexNiYmsTYm
J7E2JiexNiYmsTYmJ7E2JiexNiYmsTYmJ7E2JiexNiYmsTYmJ7E2JiexNiYmsTYmJ7E2JiexNiYmsTYm
J7E2JiexNiYmsTYmJ7E2Jic2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JiYONiYnMjYmJxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zUmJ/81Jif/NiYn/zUm
J/81Jif/NiYn/zUmJ/81Jif/NiYn/zUmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zYm
J/82Jif7NicnBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJzY1Jif/NiYn/zYm
J/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYm
J/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82JidOAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANSYnBjYmJ402Jif3NSYn/zUlJ/02Jie3NiYmIAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiUm/zYlJv81JSb/NiUm/zYl
Jv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv81JSb/NiUm/zUl
Jv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv82Jib7NycnBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADYmJzY1JSb/NiUm/zUlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYl
Jv82JidOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1JicENSYnqzYlJv82JSb/NSUm/zYl
Jv82JSb/NiYn3zYmJw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zUmJv81Jib/NiYn/zUmJv81JSb/NiUn/zUlJv81JSb/NiUn/zUlJv81JSb/NiUn/zUl
Jv81JSb/NiUn/zUlJv81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/82Jib7NycnBgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJzY1JSf/NiYn/zUlJ/82JSb/NSYm/zYl
J/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYl
J/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JidOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUm
JwQ1JietNSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYmJ2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zUm
J/81Jif/NiYn/zUmJ/81Jif/NiYn/zUmJ/81Jif/NiYn/zUmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zYm
J/81Jif/NiYn/zYmJ/82Jif7NicnBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYm
Jy41JifZNiYn2TUmJ9k2JifZNSYm2TYmJ9k2JifZNSYm2TYmJ9k2JifZNSYm2TYmJ+s2Jif/NSYn/zYm
J/82Jif/NiYn+TYmJ/E2JifxNSYn8TYmJ/E2JifxNSYn8TYmJ/E2JifxNSYn8TYmJ/E2JidKAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANSYnBjUmJ6s2Jif/NSYn/zYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYm
J5EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiUm/zYl
Jv81JSb/NiUm/zYmJ8c1JSeNNSUnjTUlJ401JSeNNSUnjTUlJ401JSeNNSUnjTUlJ401JSeNNSUnjTUl
J401JSeNNSUnjTUlJ401JSeNNiYnszUlJv81JSb/NiUm/zUlJv82Jib7NycnBgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAANiYnVjUlJv82Jif9NiYneDUmKAAAAAAANiYnFDYmJ5U2Jif5NiUm/zUlJv81JSb/NiUm/zUl
Jv81JSb/NiUm/zUlJv81JSb/NiUm/zUlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYmJ+k2JidyNiYnCAAAAAA2JicCNSUnoTYlJv82JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYmJ+s2JicwAAAAAAAAAAAAAAAANiYnCjYmJ702JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zUmJv81Jib/NiYn/zYmJ4MAAAAAAAAAAAAAAAA2JicmNiYn9zYmJvc2Jif3NiYn9zYm
Jvc2Jif3NiYn9zYmJvc2JifzNiYnBgAAAAAAAAAANiYnVjYmJ/s2JidgAAAAADcnJwA2JideNiYn7TUl
J/81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/81JSf/NiYn/zUlJ/82Jif7NiYn+zYl
J/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NiYn3TYm
J0o2JiedNSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NiYn6TYmJywAAAAAAAAAAAAA
AAA2JicKNiYnvTYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81Jif/NiYn/zYmJ4MAAAAAAAAAAAAA
AAA3JycANiYmBDYmJgQ2JiYENiYmBDYmJgQ2JiYENiYmBDYmJgQ2JicENSYoAAAAAAAAAAAANiYnSjYm
J0oAAAAANSUmDDYmJ6k2Jif/NiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn/zYmJ/81Jif/NiYn7zYm
J7E2Jid2NiYnRDYmJxw2JicGNiYmBjYmJxA2JicoNSUnRjYmJ2w2JiedNiYn1zYmJ/02Jif/NSYn/zYm
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JidWNiUm/zUlJv81JSb/NiUm/zUl
Jv82JieRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ042JSb/NSUm/zYlJv82JSb/NSUm/zYm
J40AAAAANiYnYjYlJv82JieVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANSUmlzYlJv82JSb/NSUm/zYl
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2Jie/NiYn/zUlJ/81JSf/NiYn/zYmJ/M2JicUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAg
IAA2JifFNSYm/zYlJ/82JSb/NSYm/zYmJ+01JScGNiYnBDYmJ9U2JieVAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANSYmlzYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJx42Jif9NiYn/zYmJ/81Jif/NiYn/zYmJ5MAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JidONSYn/zYmJ/82Jif/NSYn/zYmJ/81JidMAAAAADYm
J1I2JieVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANSYmlzYmJ/82Jif/NSYn/zYmJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ3A1JSb/NiUm/zUl
Jv81JSb/NiUm/zYmJzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JiYENiYn4TYl
Jv82JSb/NSUm/zYlJv82JiedAAAAADUlJgA2JideAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANSUmlzYl
Jv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADYmJ701JSf/NiYn/zUlJ/81JSf/NiYn2TcnJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANiYniTYlJ/82JSb/NSYm/zYlJ/82JifhNiYoAAAAAAA3JycCAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANSYmlzYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JicaNiUnIDYmJyA2JicgNiUnIDYmJxAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnCDYmJ/c1Jif/NiYn/zYmJ/81Jif/NiYnkwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnOjYmJ/82Jif/NSYn/zYm
J/82Jif/NiYnHgAAAAA4KCgANiYnIDYmJyA2JicgNiYnIDYmJyA2JicgNSYmpTYmJ/82Jif/NSYn/zYm
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiUm/zYl
Jv81JSb/NiUm/zYmJ4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnOjUl
Jv81JSb/NiUm/zUlJv81JSb/NiYnWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANiYnBDYmJ/E2JSb/NSUm/zYlJv82JSb/NiYnUgAAAAA4KCgENiYn+TYlJv82JSb/NSUm/zYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zUmJv81Jib/NiYn/zYmJ4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANiYnbDUlJv81JSf/NiYn/zUlJ/81JSf/NiYnKAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ7s2JSb/NSYm/zYlJ/82JSb/NiYnfAAA
AAA4KCgENiYn+TYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81Jif/NiYn/zYm
J4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnlzUmJ/81Jif/NiYn/zYm
J/82Jif7NiYnCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYm
J402Jif/NSYn/zYmJ/82Jif/NiYnoQAAAAA3JycENiYn+TYmJ/82Jif/NSYn/zYmJ/82Jif/NSYn/zYm
J/82Jif/NSYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiUm/zYlJv81JSb/NiUm/zYmJ4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANiYnuTUlJv81JSb/NiUm/zUlJv82JifrNiYmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ2Y2JSb/NSUm/zYlJv82JSb/NiYnuwAAAAA4KCgENiYn+TYl
Jv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JidoNSUnfDUlJ3w1JSd8NSUnfDYmJ0g2JiaDNiYngzYm
J4M2JiaDNiYngzYmJ4M2JiaDNiYnZAAAAAAAAAAANiYn0zUlJv81JSf/NiYn/zUlJ/82JifbAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ0o2JSb/NSYm/zYl
J/82JSb/NiYn0QAAAAA1JSUANiYmEjUlJxI1JScSNiYmEjUlJxI1JicaNSYn+zYlJ/82JSb/NSYm/zYl
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADcnJxI1Jif/NiYn/zUmJ/81Jif/NiYn/zUmJ/81Jif/NiYnxwAAAAAAAAAANiYn5TUm
J/81Jif/NiYn/zYmJ/82JifTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADYmJzo2Jif/NSYn/zYmJ/82Jif/NiYn4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JScINSYn+zYmJ/82Jif/NSYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcnJxI1JSb/NiUm/zUlJv81JSb/NiUm/zUl
Jv81JSb/NiUnxwAAAAAAAAAANiUn6zUlJv81JSb/NiUm/zUlJv82JifTAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJzY2JSb/NSUm/zYlJv82JSb/NiYn6QAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JigINSUn+zYlJv82JSb/NSUm/zYlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcn
JxI1Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiUnxwAAAAAAAAAANiYn2zUmJv81JSf/NiYn/zUm
J/82JifpOCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYm
J0Q2JSb/NSYm/zYlJ/82JSb/NiYn6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1JScINSYn+zYl
J/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADcnJxI2Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYnxwAA
AAAAAAAANiYnvTYmJv82Jif/NiYn/zYmJ/82Jif9NiYnDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ1w2Jib/NiYn/zYmJv82Jib/NiYn2wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JigINiYn+zYmJv82Jib/NiYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcnJxI1JSb/NSUn/zUl
Jv81JSb/NiYn7zUlJuE1JSbhNSUnsQAAAAAAAAAANiYnlzUlJv81JSf/NiUm/zUlJ/81JSf/NiYnMAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJ3w1JSb/NSUn/zUl
Jv81JSb/NiYnwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1JScINSUn+zUlJv81JSb/NSUn/zUl
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADcnJxI1Jib/NiYn/zUmJv81Jib/NiYnbgAAAAAAAAAAAAAAAAAAAAAAAAAANiYnZjUm
Jv81JSf/NiYn/zUmJ/81JSf/NiYnXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJyA2Jif3NiYn/zYm
Jv82Jib/NiYn/zYmJ7cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANiYnszUlJ/81JSf/NiUm/zUlJ/81JSf/NiYnegAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANSUmADYmJ7E1JSb/NSUn/zUlJv81JSb/NiYn/zYmJ0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnMjYmJ/01JSf/NiYn/zUm
J/81JSf/NiYn9zYmJzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnYjYlJ/82JSb/NSYm/zYlJ/82JSb/NiYnxTUl
JwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JicQNSYnFDUl
JxQ1JScUNSYnFDUlJxQ1JicUNiYnFDUmJxQ1JicUNiYnFDUmJxQ1JicUNiYnFDUmJxQ1JicUNiYnFDYm
JxAAAAAAAAAAADYmJ502Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ9s2JicSAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2Jic2NiYn9TYm
Jv82Jib/NiYn/zYmJv82Jif9NiYnPDUlJwo1JicUNSUnFDUmJxQ1JicUNSUnFDUmJxQ1JicUNSUnFDUm
JxQ1JicUNSUnFDUmJxQ1JicUNSUnFDUmJxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zYmJ/k2JicyAAAAADYmJxQ2JifpNiUm/zUlJ/81JSf/NiUm/zUl
J/82JifDNiYnDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADUmJyw1JifrNSUn/zUlJv81JSb/NSUn/zUlJv82JiedNiYnDDYmJ9k1JSb/NSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/81JSb/NiYn/zYm
J/81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv82JifXNiYnDAAA
AAA2JidONiYn/TUmJ/81JSf/NiYn/zUmJ/81JSf/NiYnwzYmJxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnPDYmJ+s2JSb/NSYm/zYlJ/82JSb/NSYm/zYm
J902JicONiYnoTYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYl
J/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYm
Jv82Jib/NiYn/zYmJv82Jif/NiYnnTgoKAAAAAAANiYnizYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J9c2JicsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmKAI2JiduNiYn+TYm
Jv82Jib/NiYn/zYmJv82Jib/NiYn9TYmJzQ2JidaNiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYm
Jv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSf/NiYn/zYmJ1gAAAAANiYmBDYm
J681JSf/NiUm/zUlJ/81JSf/NiUm/zUlJ/82Jif1NiYncjYmJwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANiYnKjYmJ781JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSf7NiYnUjYmJyA2JifxNSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUl
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYm
J/81JSb/NiYn/zYmJ/81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiYn/zUmJv81Jib/NiYn/zUm
Jv81JSf/NiYn/zYmJ+82JicgAAAAADYmJwg2Jie7NiYn/zUmJ/81JSf/NiYn/zUmJ/81JSf/NiYn/zYm
J9U2JidSNiYnAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJyg2JiefNiYn+zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYm
J/s2JidcNiYnBDYmJ8c2JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYl
J/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJ2Q2JidENiYnRDYmJ0Q2JidENiYnRDYm
J0Q2JidENiYnRDYmJ0Q2JidENiYnRDYmJ0Q2JidENiYnRDYmJ0Q2JiYkAAAAAAAAAAA2JicINiYnqzYm
J/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn2TYmJ3Q2JiccOCgoAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYmJxQ2JidiNiYnvTYmJ/02Jib/NiYn/zYm
Jv82Jib/NiYn/zYmJv82Jib/NiYn8TYmJ0wAAAAANiYnNDYlJpE2JSaRNSUmkTYlJpE2JSaRNSUmkTYl
JpE2JSaRNSUmkTYlJpE2JSaRNSUmkTYlJpE2JifLNiYn/zYmJv82Jib/NiYn/zYmJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUn/zUlJv81JSb/NSUn/zYm
Jy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAOCgoAAAAAAAAAAAANSUnAjYmJ342Jif9NiUm/zUlJ/81JSf/NiUm/zUlJ/81JSf/NiUm/zUl
J/82Jif9NiYnyzYmJ4s2JidUNiYnKjYmJwoAAAAAAAAAADcnJwI2JicWNiYnNjYmJ142JieRNiYnyzYm
Jvs1JSb/NSUn/zUlJv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv82JifTNiYnKgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JieHNSUn/zUl
Jv81JSb/NSUn/zUlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zYmJ/81JSb/NiYn/zYmJy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnkzYmJ3o2JicOAAAAAAAAAAA2Jic+NiYn2zUm
J/81JSf/NiYn/zUmJ/81JSf/NiYn/zUmJ/81JSf/NiYn/zUmJ/81JSf/NiYn/zUmJ/82Jif3NiYn9TYm
J/02JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NSYm/zYlJ/82JSb/NiYn9zYm
J4U2JicIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JieHNSYm/zYlJ/82JSb/NSYm/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJy4AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYnozYm
J/82JifrNiUndjYmJwwAAAAANiYnCDYmJ3o2JifvNiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYmJv82Jib/NiYn/zYm
Jv82Jib/NiYn/zYmJ/s2JielNiYnJAAAAAA2JicONiYnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JSaHNiYn/zYmJv82Jib/NiYn/zYm
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUn/zUl
Jv81JSb/NSUn/zYmJy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANSYnozUlJ/81JSf/NiUm/zYmJ+k2JidyNiYnCgAAAAA2JicSNiYnejYm
J+M1JSf/NiUm/zUlJ/81JSf/NiUm/zUlJ/81JSf/NiUm/zUlJ/81JSb/NSUn/zUlJv81JSb/NSUn/zUl
Jv81JSb/NSUn/zUlJv81JSb/NSUn/zUlJv82JifpNiYnjTYmJyQAAAAANicnADYmJ1Q2JibjNSYnaAAA
AAAAAAAAAAAAADYmJww2Jic8NSUnPDYmJzw2Jic8NSUnPDYmJzw2Jic8NSUnPDYmJyIAAAAAAAAAAAAA
AAA2JieHNSUn/zUlJv81JSb/NSUn/zUlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zUmJv81Jib/NiYn/zYmJy4AAAAAAAAAAAAAAAA2JicgNiUnzzUm
Js82JibPNiUnzzUmJs82JibPNiUnzzUmJs82JidmAAAAAAAAAAAAAAAANiUnozUmJ/81JSf/NiYm/zUm
J/81JSf/NiYnswAAAAAAAAAAAAAAADYmJwQ2JidGNiYnmzYmJ+M1JSf/NiYm/zUmJ/81JSf/NiYm/zUm
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
AAA2JieHNSYn/zYlJ/82JSf/NSYn/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiUnozYmJv82Jib/NiYm/zYm
Jv82Jib/NiUnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUmJ1Q2Jib/NiYm/zYm
Jv82Jib/NiYm/zYlJ9sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiYmkTYm
Jv82Jib/NiYm/zYmJv82Jib/NSYmaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JSeHNiYm/zYmJv82Jib/NiYm/zYlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUn/zUlJ/81JSf/NSUn/zYm
Jy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAANiYnozUlJ/81JSf/NSUn/zUlJ/81JSf/NSUnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADYmJ1Q1JSf/NSUn/zUlJ/81JSf/NSUn/zUmJ9sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANiYmkTUlJ/81JSf/NSUn/zUlJ/81JSf/NiYmaAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JieHNSUn/zUl
J/81JSf/NSUn/zUmJucAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJ1Q2JicuNiYnLjYmJy42JicuNiYnLjYmJy42JicuNiYnLjYm
Jy42JicuNiYnLjYmJy42JicuNiYnLjYmJy42JicuNiYntTUmJ/81JSf/NiYn/zUmJ/81JSf/NiUnuwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUmJ1Q1JSf/NiYn/zUmJ/82JSb/NSYn/zYm
J+E2JicuNiYnLjYmJy42JicuNiYnLjYmJwQAAAAAAAAAAAAAAAAAAAAANiYmkTYlJ/82JSb/NSYn/zYl
J/82JSb/NiYmaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JieHNSYn/zYlJ/82JSb/NSYn/zYlJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jif/NiYnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUm
J1Q2Jif/NiYn/zYmJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYmJxYAAAAAAAAAAAAA
AAAAAAAANiYmkTYlJ/82Jif/NiYn/zYlJ/82Jif/NiYnyTYmJ6M2JiejNSYnozYmJ6M2JiejNSYnozYm
J6M2JiejNSYnozYmJ6M2JiejNSYnozYmJ6M2JiejNSYnozYmJ6M2JSfVNiYn/zYlJ/82Jif/NiYn/zYm
J+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNSUm/zUl
Jv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUl
Jv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUnuwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADYlJ1Q1JSb/NSUm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zYmJxYAAAAAAAAAAAAAAAAAAAAANiYmkTUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJucAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJv82Jib/NiYn/zYmJv81Jib/NiUn/zUmJv81Jib/NiUn/zUm
Jv81Jib/NiUn/zUmJv81Jib/NiUn/zUmJv81JSf/NiYn/zUmJ/81JSf/NiYn/zUmJ/81JSf/NiYn/zUm
J/81JSf/NiUnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUmJ1Q1JSf/NiYn/zUm
J/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYmJxYAAAAAAAAAAAAAAAAAAAAANiYmkTYl
J/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYl
J/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ/82JSb/NSYn/zYlJ+cAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2JifVNiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYn/zYm
J/82Jif/NiYn/zYmJ/82Jif/NiYn/zYmJ/82Jif/NiYnuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADUmJ1Q2Jif/NiYn/zYmJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYm
JxYAAAAAAAAAAAAAAAAAAAAANiYmkTYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYl
J/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYlJ/82Jif/NiYn/zYl
J/82Jif/NiYn/zYmJ+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA2JifVNSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUl
Jv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUm/zUlJv81JSb/NSUnuwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYlJ1Q1JSb/NSUm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zYmJxYAAAAAAAAAAAAAAAAAAAAANiYmkTUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUl
Jv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJv81JSb/NSYm/zUlJucAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0JCgENSUpBjUlKQY1JSkGNSUpBjUlKQY0JCgGNSUpBjQl
KAY0JCgGNSUpBjQlKAY0JCgGNSUpBjQlKAY0JCgGNSUpBjQlKAY1JSkGNCUpBjUlKQY1JSkGNCUpBjUl
KQY1JSkGNCUpBjUlKQY1JSkGNSUoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUl
KAI1JSkGNCUpBjUlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjMjJgAAAAAAAAAAAAAA
AAAAAAAANSUoBDQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQl
KQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjQlKQY0JCkGNSUpBjUl
KQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////
///////////////////////////////////////////////////8AAAAP/gAAAD////8AAAAP/gAAAD/
4P/8AAAAP/gAAAD/wH/8AAAAP/gAAAD/gH/8AAAAP/gAAAD/AD/8AAAAP///g//+AH/8D//4P///g//8
AH/8D//4Pwf/g//4AP/8D//4Pwf/g//wAf/8D//4Pwf/g//gA//8DwB4Pwf/h//AB//8DwB4P4////+A
D7/8DwB4P////j8AHz/8DwB4P////j4APj/8DwB4P/AB/3wAfD/8DwB4PwAAH/gA+D/8DwB4eAAAB/AB
8D/8DwB54AAAAeAD4D/8DwB7wAAAAEAHwD/8D///AAf8AAAPgD/8D//+AD//wAAfAD/8D//8Af//8AA+
AD/8D//4A////AB////8AAAwD////gD////8AAAgH////4Dx///8AABgP////8Dh///8AADAf////+Bh
///8AADA/////+Ax///8AAGB//////Ax/D////+B//////gZ+D////8D//////gZ+D////8D//////wd
+D////8H//////wP+D////4H//////wP+D////4H//////4P+D/8D/4P//////4OAD/8D/4P//////4O
AD/8D/wP//////4GAD/8D/wP//////8GAD//8BwP//////8H+D//8AwP//////8H+D//8AwP//////8H
+D//8AwP//////8H+D//8AwP//////8H+D//8AwP//////8H+D//8P4P//////4H+D//8P4H//////4O
D///8P4H//////4OD///8P4H//////4OD///8P8D//////wOD/////8D//////wf//////8D//////gf
//////+B//////gf//////+B//////A////////A//////A////////Af////+B////8AADgP////8BA
AD/8AABwH////4CAAD/8AAAwD////wGAAD/8AAA4B////AMAAD/8AAAcAf//8AYAAD/8H//+AH//wA4A
AD/8H///gAf8AB//8D/8H//3wAAAAD//8D/8H//x8AAAAP//8D/8H//wfAAAA9//8D/8HwDwHwAAHx8A
cD/8HwDwH/AD/h8AcD/8HwDwH///+B8AcD/8HwDwHz/4+B8AcD/8HwDwHw/g+B8AcD/8HwDwHw/g+B8A
cD/8HwDwHw/g+B8AcD/8HwDwH///+B8AcD/8HwDwH/gf+B8A8D/8H//wH/gf+B//8D/8H//wH/gf+B//
8D/8H//wH/gf+B//8D/8H//wH/gf+B//8D/8AAAAH/gA+AAAAD/8AAAAH/gA+AAAAD/8AAAAH/gA+AAA
AD/8AAAAH/gA+AAAAD/8AAAAH/gA+AAAAD//////////////////////////////////////////////
//////////////////////////////////////////////////8=
</value>
</data>
</root>
\ No newline at end of file
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CodeLibrary
{
public class HDCodeHelper
{
/// <summary>
/// 二维码参数文件保存的默认路径\CodeParam\
/// </summary>
public static string CodeParamPath = @"\CodeParam\";
/// <summary>
/// 显示的窗口
/// </summary>
public static HWindow HalconWindow = null;
/// <summary>
/// 根据图片路径解析二维码
/// </summary>
/// <param name="filePath">图片路径</param>
/// <param name="codeCount">二维码数量</param>
/// <param name="codeParamPath">二维码参数路径,""表示不使用参数</param>
/// <param name="paramType">二维码类型,不传类型默认Data Matrix ECC 200</param>
/// <returns>解析到的二维码</returns>
public static List<CodeInfo> DecodeCode(string filePath, int codeCount, string codeParamPath, params string[] paramType)
{
HObject ho_Image;
HOperatorSet.GenEmptyObj(out ho_Image);
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, filePath);
if (HalconWindow != null)
{
HOperatorSet.DispObj(ho_Image, HalconWindow);
}
return DecodeCode(ho_Image, codeCount, codeParamPath, paramType);
}
/// <summary>
/// 根据图片解析二维码
/// </summary>
/// <param name="map">图片对象</param>
/// <param name="codeCount">二维码数量</param>
/// <param name="codeParamPath">二维码参数路径,""表示不使用参数</param>
/// <param name="paramType">二维码类型,不传类型默认Data Matrix ECC 200</param>
/// <returns>解析到的二维码</returns>
public static List<CodeInfo> DecodeCode(Bitmap map, int codeCount, string codeParamPath, params string[] paramType)
{
HObject ho_image = Bitmap2HObjectBpp24(map);
return DecodeCode(ho_image, codeCount, codeParamPath, paramType);
}
/// <summary>
/// 根据图片解析二维码
/// </summary>
/// <param name="ho_Image">Halcon中的图片对象</param>
/// <param name="codeCount">二维码数量</param>
/// <param name="codeParamPath">二维码参数路径,""表示不使用参数</param>
/// <param name="paramType">二维码类型,不传类型默认Data Matrix ECC 200</param>
/// <returns>解析到的二维码</returns>
public static List<CodeInfo> DecodeCode(HObject ho_Image, int codeCount, string codeParamPath, params string[] paramType)
{
List<string> codeType = new List<string>(paramType.ToList());
if (codeType.Count<string>() <= 0)
{
codeType.Add("Data Matrix ECC 200");
}
List<CodeInfo> codeList = new List<CodeInfo>();
foreach (string t in codeType)
{
List<CodeInfo> array = DecodeCode(ho_Image, t, codeParamPath, codeCount);
codeList.AddRange(array.ToArray<CodeInfo>());
}
return codeList;
}
public static List<CodeInfo> DecodeCode(HObject ho_Image, string symbolType, string hv_model_path, int codeCount,int timeOut=2000)
{
HDLogUtil.info(" DecodeCode[" + symbolType + "][" + hv_model_path + "][" + codeCount + "] 开始");
List<CodeInfo> codeList = new List<CodeInfo>();
try
{
HTuple hv_Area = null;
HTuple hv_Row1 = null;
HTuple hv_Column = null;
HTuple hv_PointOrder = null;
HObject ho_SymbolXLDs;
HTuple hv_ResultHandles = null;
HTuple hv_DecodedDataStrings = null;
HTuple hv_DataCodeHandle = null;
HOperatorSet.GenEmptyObj(out ho_SymbolXLDs);
HOperatorSet.CreateDataCode2dModel(symbolType, "default_parameters", "maximum_recognition", out hv_DataCodeHandle);
//string hv_model_path = GetCodeParamFilePath(symbolType);
if (!hv_model_path.Equals("") && File.Exists(hv_model_path))
{
HOperatorSet.ReadDataCode2dModel(hv_model_path, out hv_DataCodeHandle);
}
// HOperatorSet.SetDataCode2dParam(hv_DataCodeHandle, "timeout", 3000);
ho_SymbolXLDs.Dispose();
// set_data_code_2d_param(DataCodeHandle, 'timeout', 200)
HOperatorSet.SetDataCode2dParam(hv_DataCodeHandle, "timeout", timeOut);
if (codeCount <= 0)
{
HOperatorSet.FindDataCode2d(ho_Image, out ho_SymbolXLDs, hv_DataCodeHandle,
new HTuple(), new HTuple(), out hv_ResultHandles, out hv_DecodedDataStrings);
}
else
{
HOperatorSet.FindDataCode2d(ho_Image, out ho_SymbolXLDs, hv_DataCodeHandle,
"stop_after_result_num", codeCount, out hv_ResultHandles, out hv_DecodedDataStrings);
}
HOperatorSet.AreaCenterXld(ho_SymbolXLDs, out hv_Area, out hv_Row1, out hv_Column, out hv_PointOrder);
if (HalconWindow != null)
{
ShowImage(HalconWindow, ho_Image, ho_SymbolXLDs);
}
HOperatorSet.ClearDataCode2dModel(hv_DataCodeHandle);
if (hv_DecodedDataStrings.Length > 0)
{
string[] resultList = hv_DecodedDataStrings.SArr;
for (int i = 0; i < hv_DecodedDataStrings.SArr.Length; i++)
{
try
{
int x = (int)Math.Round(hv_Column.DArr[i]);
int y = (int)Math.Round(hv_Row1.DArr[i]);
string str = hv_DecodedDataStrings.SArr[i];
CodeInfo code = new CodeInfo(str, x, y);
codeList.Add(code);
}
catch (Exception ex)
{
HDLogUtil.error("处理二维码出错:索引=" + i + "," + resultList.ToString());
}
}
}
HDLogUtil.info(" DecodeCode[" + symbolType + "][" + hv_model_path + "][" + codeCount + "] 结束,返回数量:"+codeList.Count);
return codeList;
}
catch (Exception ex)
{
HDLogUtil.error("DecodeCode出错:" + ex.ToString());
HDLogUtil.info(" DecodeCode[" + symbolType + "][" + hv_model_path + "][" + codeCount + "] 结束,返回数量:" + codeList.Count);
return codeList;
}
}
internal static void ShowImage(HWindow window, HObject ho_Image, HObject ho_SymbolXLDs)
{
if (window == null || ho_Image == null)
{
return;
}
Task.Factory.StartNew(delegate ()
{
try
{
HTuple width, height;
//int dWidth = 0; int dHeight = 0;
HOperatorSet.GetImageSize(ho_Image, out width, out height);
int dWidth = (int)width.D;
int dHeight = (int)height.D;
window.SetPart(0, 0, dHeight, dWidth);
HOperatorSet.SetColor(window, "red");
HOperatorSet.SetLineWidth(window, new HTuple(2));
if (ho_Image != null)
{
HOperatorSet.DispObj(ho_Image, window);
}
if (ho_SymbolXLDs != null)
{
HOperatorSet.DispObj(ho_SymbolXLDs, window);
}
}
catch (Exception ex)
{
}
});
}
/// <summary>
/// 将BitMap转换为HObject对象
/// </summary>
public static HObject Bitmap2HObjectBpp24(Bitmap bmp)
{
HObject ho_Image = null;
try
{
HOperatorSet.GenEmptyObj(out ho_Image);
ho_Image.Dispose();
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData srcBmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);
HOperatorSet.GenImageInterleaved(out ho_Image, srcBmpData.Scan0, "bgrx", bmp.Width, bmp.Height, 0, "byte", 0, 0, 0, 0, -1, 0);
bmp.UnlockBits(srcBmpData);
}
catch (Exception ex)
{
HDLogUtil.error("将BitMap转换为HObject对象出错:" + ex.ToString());
ho_Image = null;
}
return ho_Image;
}
internal static string GetCodeParamFilePath(string codeType)
{
if (CodeParamPath.Equals(""))
{
CodeParamPath = @"\CodeParam\";
}
string appPath = Application.StartupPath + CodeParamPath;
if (!Directory.Exists(appPath))
{
Directory.CreateDirectory(appPath);
}
string filePath = appPath + codeType + ".dcm";
return filePath;
}
public static List<CodeInfo> DecodeBarCode(string filePath)
{
HObject ho_Image;
HOperatorSet.GenEmptyObj(out ho_Image);
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, filePath);
return DecodeBarCode(ho_Image);
}
public static List<CodeInfo> DecodeBarCode(Bitmap bitmap)
{
HObject ho_image = Bitmap2HObjectBpp24(bitmap);
return DecodeBarCode(ho_image);
}
public static List<CodeInfo> DecodeBarCode(HObject ho_Image)
{
List<CodeInfo> codeList = new List<CodeInfo>();
try
{
HObject ho_GrayImage, ho_SymbolRegions;
HTuple hv_BarCodeHandle = null, hv_DecodedDataStrings = null, hv_DecodedDataTypes = null; ;
HOperatorSet.GenEmptyObj(out ho_GrayImage);
HOperatorSet.GenEmptyObj(out ho_SymbolRegions);
HTuple hv_Area = null;
HTuple hv_Row1 = null;
HTuple hv_Column = null;
HTuple hv_Orientation = null;
HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
HOperatorSet.GenEmptyObj(out ho_SymbolRegions);
ho_SymbolRegions.Dispose();
HOperatorSet.CreateBarCodeModel(new HTuple(), new HTuple(), out hv_BarCodeHandle);
HOperatorSet.FindBarCode(ho_GrayImage, out ho_SymbolRegions, hv_BarCodeHandle, "auto", out hv_DecodedDataStrings);
//HOperatorSet.AreaCenterXld(ho_SymbolRegions, out hv_Area, out hv_Row1, out hv_Column, out hv_PointOrder);
HOperatorSet.GetBarCodeResult(hv_BarCodeHandle, "all", "decoded_types", out hv_DecodedDataTypes);
HOperatorSet.GetBarCodeResult(hv_BarCodeHandle, "all", "orientation", out hv_Orientation);
HOperatorSet.AreaCenter(ho_SymbolRegions, out hv_Area, out hv_Row1, out hv_Column);
if (HalconWindow != null)
{
HOperatorSet.SetDraw(HalconWindow, "margin");
ShowImage(HalconWindow, ho_Image, ho_SymbolRegions);
}
string[] resultList = hv_DecodedDataStrings.SArr;
if (resultList.Length > 0)
{
for (int i = 0; i < hv_DecodedDataStrings.SArr.Length; i++)
{
try
{
int x = (int)Math.Round(hv_Column.DArr[i]);
int y = (int)Math.Round(hv_Row1.DArr[i]);
string str = hv_DecodedDataStrings.SArr[i];
string type = hv_DecodedDataTypes.SArr[i];
CodeInfo code = new CodeInfo(str, x, y, type);
code.Orientation = hv_Orientation.DArr[i];
codeList.Add(code);
if (HalconWindow != null)
{
HOperatorSet.SetTposition(HalconWindow, new HTuple(x), new HTuple(y));
HOperatorSet.WriteString(HalconWindow,new HTuple ( "(" + (i + 1).ToString() + ")"));
}
}
catch (Exception ex)
{
HDLogUtil.error("处理一维码出错:索引=" + i + "," + resultList.ToString());
}
}
}
HOperatorSet.ClearBarCodeModel(hv_BarCodeHandle);
return codeList;
}
catch (Exception ex)
{
return codeList;
}
}
}
public class CodeInfo
{
public string CodeStr = "";
public int X = 0;
public int Y = 0;
public string CodeType;
public double Orientation = 0;
public CodeInfo(string codeStr,int x,int y)
{
this.CodeStr = codeStr;
this.X = x;
this.Y = y;
}
public CodeInfo(string codeStr, int x, int y,string type)
{
this.CodeType = type;
this.CodeStr = codeStr;
this.X = x;
this.Y = y;
}
}
}
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace CodeLibrary
{
public class HDCodeLearnHelper
{
/// <summary>
/// 图片对象,学习时如果使用图片学习,需要先设置此属性
/// </summary>
public static HObject DefaultImage = null;
/// <summary>
/// 学习后是否自动测试,默认是
/// </summary>
public static bool IsNeedTest = true;
/// <summary>
/// 是否正在学习中
/// </summary>
public static bool IsRun = false;
internal static List<string> cameraNameList = new List<string>();
internal static List<string> codeTypeList = new List<string>();
private static char spiltChar = '#';
/// <summary>
/// 初始化摄像机名称和二维码类型
/// </summary>
/// <param name="nameStr">摄像机名称,多个用#分割</param>
/// <param name="codeStr">二维码类型,多个用#分割</param>
public static void LoadConfig(string nameStr, string codeStr)
{
cameraNameList = new List<string>();
codeTypeList = new List<string>();
try
{
string[] nameArray = nameStr.Split(spiltChar);
foreach (string str in nameArray)
{
HDLogUtil.info("加载到摄像机名称:" + str.Trim());
cameraNameList.Add(str.Trim());
}
string[] codeArray = codeStr.Split(spiltChar);
foreach (string str in codeArray)
{
HDLogUtil.info("加载到二维码类型:" + str.Trim());
codeTypeList.Add(str.Trim());
}
if (codeTypeList.Count <= 0)
{
codeTypeList.Add("Data Matrix ECC 200");
codeTypeList.Add("QR Code");
}
}
catch (Exception ex)
{
HDLogUtil.error("解析摄像机配置出错:" + ex.StackTrace);
}
}
private static HTuple hv_AcqHandle = null;
private static Stopwatch stopWatch = new Stopwatch();
/// <summary>
/// 开始学习二维码
/// </summary>
/// <param name="Window">显示的窗口</param>
/// <param name="camerName">摄像机名称,使用图片学习传""</param>
/// <param name="codeType">二维码类型</param>
/// <param name="paramPath">二维码参数文件路径</param>
/// <param name="codeCount">二维码数量</param>
/// <param name="timeOutMs">超时时间,默认5000毫秒</param>
public static void StartLearn(HWindow Window, string camerName, string codeType, string paramPath, int codeCount, int timeOutMs)
{
if (codeCount <= 0)
{
codeCount = 1;
}
if (timeOutMs <= 0)
{
timeOutMs = 5000;
}
if (camerName.Equals("") && DefaultImage == null)
{
return;
}
HDLogUtil.info("开始学习[" + camerName + "][" + codeType + "] [" + codeCount + "] [" + timeOutMs + "]");
learnCode(Window, camerName, codeType, paramPath, codeCount, timeOutMs);
}
private static bool IsTestEnd = false;
private static bool IsLearnEnd = false;
public static void StopLearn()
{
IsTestEnd = true;
IsLearnEnd = true;
IsRun = false;
}
private static bool OpenCamera(string cameraName)
{
if (cameraName.Equals(""))
{
return true;
}
try
{ //[1] HD USB Camera
if (cameraName.ToUpper().Contains("USB") || (cameraName.ToUpper().Contains("[") && cameraName.ToUpper().Contains("]")))
{
HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", cameraName, 0, -1, out hv_AcqHandle);
}
else
{
HOperatorSet.OpenFramegrabber("GigEVision", 0, 0, 0, 0, 0, 0, "default", -1, "default", -1, "false", "default", cameraName, 0, -1, out hv_AcqHandle);
}
return true;
}
catch (Exception ex)
{
HDLogUtil.error("open camera [" + cameraName + "]error :" + ex.ToString() + "");
CloseCamera(cameraName);
return false;
}
}
private static void CloseCamera(string cameraName)
{
if (cameraName.Equals(""))
{
return;
}
try
{
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
hv_AcqHandle = null;
}
catch (Exception ex)
{
HDLogUtil.error("close camera[" + cameraName + "]error:" + ex.ToString());
}
}
private static HObject GetImage(string cameraName)
{
if (cameraName.Equals(""))
{
return DefaultImage;
}
else
{
HObject ho_Image = null;
HOperatorSet.GenEmptyObj(out ho_Image);
ho_Image.Dispose();
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
return ho_Image;
}
}
private static List<string> findCode = new List<string>();
// Main procedure
private static bool learnCode(HWindow hv_ExpDefaultWinHandle, string cameraName, string codeType, string paramPath, int codeCount, int timeOutMs)
{
stopWatch.Restart();
IsRun = true;
IsLearnEnd = false;
IsTestEnd = false;
try
{
HTuple hv_code_type = codeType;
HTuple hv_model_path = paramPath;
HObject ho_SymbolXLDs = null;
HTuple hv_train_first = null, /*hv_AcqHandle = null,*/ hv_DataCodeHandle = null;
HTuple hv_ResultHandles = new HTuple(), hv_DecodedDataStrings = new HTuple();
HTuple hv_GenParamNames = new HTuple(), hv_ModelBeforeTraining = new HTuple();
HOperatorSet.GenEmptyObj(out ho_SymbolXLDs);
findCode = new List<string>();
hv_train_first = 1;
if (!OpenCamera(cameraName))
{
HDLogUtil.info("open camera [" + cameraName + "] fail,学习结束");
StopLearn();
return false;
}
if (File.Exists(hv_model_path))
{
try
{
HOperatorSet.ReadDataCode2dModel(hv_model_path, out hv_DataCodeHandle);
}
catch (Exception ex)
{
HOperatorSet.CreateDataCode2dModel(hv_code_type, new HTuple(), new HTuple(), out hv_DataCodeHandle);
}
}
else
{
HOperatorSet.CreateDataCode2dModel(hv_code_type, new HTuple(), new HTuple(), out hv_DataCodeHandle);
}
if ((int)(hv_train_first) != 0)
{
while (findCode.Count < codeCount && IsLearnEnd.Equals(false))
{
HObject ho_Image = GetImage(cameraName);
if (ho_Image != null)
{
ho_SymbolXLDs.Dispose();
HOperatorSet.FindDataCode2d(ho_Image, out ho_SymbolXLDs, hv_DataCodeHandle, "train", "all", out hv_ResultHandles, out hv_DecodedDataStrings);
if ((int)(new HTuple((new HTuple(hv_DecodedDataStrings.TupleLength())).TupleNotEqual(0))) != 0)
{
HOperatorSet.QueryDataCode2dParams(hv_DataCodeHandle, "get_model_params", out hv_GenParamNames);
HOperatorSet.GetDataCode2dParam(hv_DataCodeHandle, hv_GenParamNames, out hv_ModelBeforeTraining);
CodeResultAdd(hv_DecodedDataStrings, codeType, "学习");
}
ShowImage(hv_ExpDefaultWinHandle, ho_Image, ho_SymbolXLDs);
}
if (findCode.Count >= codeCount || stopWatch.ElapsedMilliseconds > timeOutMs)
{
HDLogUtil.info(" 持续时间[" + stopWatch.ElapsedMilliseconds + "]数量[" + findCode.Count + "]结束学习");
break;
}
Thread.Sleep(500);
}
//*参数写入文件
//HDLogUtil.info("[" + cameraName + "][" + codeType + "]保存参数到文件【" + paramPath + "】");
HOperatorSet.WriteDataCode2dModel(hv_DataCodeHandle, hv_model_path);
HOperatorSet.ClearDataCode2dModel(hv_DataCodeHandle);
}
//Read the previously saved data code model
findCode = new List<string>();
HOperatorSet.ReadDataCode2dModel(hv_model_path, out hv_DataCodeHandle);
while (findCode.Count < codeCount && IsTestEnd.Equals(false) && IsNeedTest)
{
HObject ho_Image = GetImage(cameraName);
if (ho_Image != null)
{
ho_SymbolXLDs.Dispose();
HOperatorSet.FindDataCode2d(ho_Image, out ho_SymbolXLDs, hv_DataCodeHandle, "stop_after_result_num", codeCount, out hv_ResultHandles, out hv_DecodedDataStrings);
ShowImage(hv_ExpDefaultWinHandle, ho_Image, ho_SymbolXLDs);
if ((int)(new HTuple((new HTuple(hv_DecodedDataStrings.TupleLength())).TupleNotEqual(0))) != 0)
{
CodeResultAdd(hv_DecodedDataStrings, codeType, "识别");
}
}
if (findCode.Count >= codeCount || stopWatch.ElapsedMilliseconds > timeOutMs)
{
HDLogUtil.info(" 持续时间[" + stopWatch.ElapsedMilliseconds + "]数量[" + findCode.Count + "]结束识别");
break;
}
Thread.Sleep(500);
}
HOperatorSet.ClearDataCode2dModel(hv_DataCodeHandle);
CloseCamera(cameraName);
ho_SymbolXLDs.Dispose();
StopLearn();
return true;
}
catch (Exception ex)
{
HDLogUtil.error("出错了:" + ex.ToString());
CloseCamera(cameraName);
StopLearn();
return false;
}
}
private static void CodeResultAdd(HTuple hv_DecodedDataStrings, string codeType, string logname)
{
string[] resultList = hv_DecodedDataStrings.SArr;
foreach (string str in resultList)
{
if (!findCode.Contains(str))
{
findCode.Add(str);
HDLogUtil.info(" " + logname + "到二维码[" + str + "]");
}
}
}
private static void ShowImage(HWindow hv_ExpDefaultWinHandle, HObject ho_Image, HObject ho_SymbolXLDs)
{
HDCodeHelper.ShowImage(hv_ExpDefaultWinHandle, ho_Image, ho_SymbolXLDs);
//if (hv_ExpDefaultWinHandle == null || ho_Image == null)
//{
// return;
//}
//Task.Factory.StartNew(delegate ()
//{
// try
// {
// HTuple width, height;
// //int dWidth = 0; int dHeight = 0;
// HOperatorSet.GetImageSize(ho_Image, out width, out height);
// int dWidth = (int)width.D;
// int dHeight = (int)height.D;
// hv_ExpDefaultWinHandle.SetPart(0, 0, dHeight, dWidth);
// HOperatorSet.SetColor(hv_ExpDefaultWinHandle, "red");
// HOperatorSet.SetLineWidth(hv_ExpDefaultWinHandle, new HTuple(2));
// HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
// HOperatorSet.DispObj(ho_SymbolXLDs, hv_ExpDefaultWinHandle);
// }
// catch (Exception ex)
// {
// }
//});
}
}
}
using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CodeLibrary
{
public class HDLogUtil
{
private static string logName = "";
public static string LogName
{
get { return logName; }
set
{
logName = value;
LOGGER = LogManager.GetLogger(LogName);
}
}
private static ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static Dictionary<int, DateTime> lastErrorLogTime = new Dictionary<int, DateTime>();
public static System.Windows.Forms.RichTextBox logBox = null;
public static int showCount = 50;
public static bool debug_opened = false;
static HDLogUtil()
{
XmlConfigurator.Configure();
}
public static void info(string msg)
{
LOGGER.Info("HDLogUtil" + " - " + msg);
AddToBox(msg);
}
public static void debug(string msg)
{
LOGGER.Debug("HDLogUtil" + " - " + msg);
if (debug_opened)
{
AddToBox(msg);
}
}
public static void error(string errorMsg)
{
LOGGER.Error("HDLogUtil" + " - " + errorMsg);
AddToBox(errorMsg);
}
private static void AddToBox(string msg)
{
try
{
if (logBox == null)
{
return;
}
ShowLogPro(msg);
}
catch (Exception ex)
{
LOGGER.Error("出错:" + ex.StackTrace);
}
}
private static int count = 0;
private static void ShowLogPro(string msg)
{
try
{
if (count > showCount)
{
count = 0;
logBox.Clear();
}
System.DateTime now = System.DateTime.Now;
logBox.AppendText(now.ToLongTimeString() + " " + msg + Environment.NewLine);
count++;
}
catch (Exception ex)
{
LOGGER.Error("出错:" + ex.ToString());
}
}
public static void ClearLog()
{
if (logBox != null)
{
logBox.Text = "";
count = 0;
}
}
}
}
//引用MvCameraControl.Net.dll
using System;
using MvCamCtrl.NET;
using System.Drawing;
using System.Drawing.Imaging;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace CodeLibrary
{
/// <summary>
/// 海康相机
/// </summary>
public class HIKCamera
{
public static HIKCamera Instance = new HIKCamera();
/// <summary>
/// 当前相机
/// </summary>
private MyCamera cameraCurr;
/// <summary>
/// 所有相机列表
/// </summary>
private MyCamera.MV_CC_DEVICE_INFO_LIST cameraAll;
/// <summary>
/// 所有相机的名称
/// </summary>
private List<string> cameraName = new List<string>();
/// <summary>
/// 海康相机
/// </summary>
private HIKCamera()
{
cameraAll = new MyCamera.MV_CC_DEVICE_INFO_LIST();
Load();
}
/// <summary>
/// 错误信息
/// </summary>
public string ErrInfo { set; get; }
/// <summary>
/// 相机总数
/// </summary>
public int Count
{
get { return (int)cameraAll.nDeviceNum; }
}
/// <summary>
/// 相机名称,ModelName,SerialNumber
/// </summary>
public string[] CameraName
{
get
{
if (cameraName == null)
{
cameraName = new List<string>();
}
return cameraName.ToArray(); }
}
/// <summary>
/// 当前相机是否打开
/// </summary>
public bool IsOpen
{
get
{
if (cameraCurr == null)
return false;
else
return true;
}
}
/// <summary>
/// 相机图像宽度
/// </summary>
public int Width { set; get; }
/// <summary>
/// 相机图像高度
/// </summary>
public int Height { set; get; }
/// <summary>
/// 相机32位缓存
/// </summary>
public byte[] Buffer { get; private set; }
/// <summary>
/// 相机32位图像
/// </summary>
public Bitmap Image { get; private set; }
/// <summary>
/// 加载相机
/// </summary>
public void Load()
{
try
{
int rtn = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref cameraAll);
if (rtn != MyCamera.MV_OK) return;
cameraName.Clear();
string s = "";
for (int i = 0; i < cameraAll.nDeviceNum; i++)
{
MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(cameraAll.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));
if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
{
IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo, 0);
MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO));
s = "GigE:" + gigeInfo.chModelName + " (" + gigeInfo.chSerialNumber + ")";
}
else if (device.nTLayerType == MyCamera.MV_USB_DEVICE)
{
IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stUsb3VInfo, 0);
MyCamera.MV_USB3_DEVICE_INFO usbInfo = (MyCamera.MV_USB3_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_USB3_DEVICE_INFO));
s = "USB:" + usbInfo.chModelName + " (" + usbInfo.chSerialNumber + ")";
}
cameraName.Add(s);
}
}
catch (Exception ex)
{
HDLogUtil.error("HIK Load Error:" + ex.StackTrace);
}
}
/// <summary>
/// 打开指定相机
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public bool Open(string name)
{
int n = cameraName.FindIndex(s => s == name);
if (n == -1)
return false;
else
return Open(n);
}
/// <summary>
/// 打开指定相机
/// </summary>
/// <param name="idx">索引</param>
/// <returns></returns>
public bool Open(int idx)
{
if (idx < 0 || idx >= Count) return false;
if (cameraCurr != null) Close();
try
{
MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(cameraAll.pDeviceInfo[idx], typeof(MyCamera.MV_CC_DEVICE_INFO));
cameraCurr = new MyCamera();
if (cameraCurr == null) return false;
int nRet = cameraCurr.MV_CC_CreateDevice_NET(ref device);
if (nRet != MyCamera.MV_OK) return false;
nRet = cameraCurr.MV_CC_OpenDevice_NET();
if (nRet != MyCamera.MV_OK)
{
cameraCurr.MV_CC_DestroyDevice_NET();
return false;
}
if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
{
int nPacketSize = cameraCurr.MV_CC_GetOptimalPacketSize_NET();
if (nPacketSize > 0) nRet = cameraCurr.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize);
}
cameraCurr.MV_CC_SetEnumValue_NET("AcquisitionMode", 2); //工作在连续模式
cameraCurr.MV_CC_SetEnumValue_NET("TriggerMode", 0); //连续模式
MyCamera.MVCC_INTVALUE pstValue = new MyCamera.MVCC_INTVALUE();
nRet = cameraCurr.MV_CC_GetWidth_NET(ref pstValue);
Width = (int)pstValue.nCurValue;
nRet = cameraCurr.MV_CC_GetHeight_NET(ref pstValue);
Height = (int)pstValue.nCurValue;
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
return false;
}
}
/// <summary>
/// 关闭当前相机
/// </summary>
public void Close()
{
if (cameraCurr != null)
{
cameraCurr.MV_CC_CloseDevice_NET();
cameraCurr.MV_CC_DestroyDevice_NET();
cameraCurr = null;
}
}
/// <summary>
/// 停止抓取数据
/// </summary>
public void Stop()
{
if (cameraCurr == null) return;
int rtn = cameraCurr.MV_CC_StopGrabbing_NET();
if (rtn != MyCamera.MV_OK) return;
}
/// <summary>
/// 抓取一张图像
/// </summary>
public void GrabOne()
{
int rtn = cameraCurr.MV_CC_StartGrabbing_NET();
if (rtn != MyCamera.MV_OK) return;
MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE();
rtn = cameraCurr.MV_CC_GetIntValue_NET("PayloadSize", ref stParam);
if (rtn != MyCamera.MV_OK) return;
uint dataSize = stParam.nCurValue;
byte[] dataArr = new byte[dataSize];
uint buffSize = dataSize * 3 + 2048;
byte[] buffArr = new byte[buffSize];
IntPtr pData = Marshal.UnsafeAddrOfPinnedArrayElement(dataArr, 0);
MyCamera.MV_FRAME_OUT_INFO_EX stFrameInfo = new MyCamera.MV_FRAME_OUT_INFO_EX();
rtn = cameraCurr.MV_CC_GetOneFrameTimeout_NET(pData, dataSize, ref stFrameInfo, 100000);
if (rtn != MyCamera.MV_OK) return;
MyCamera.MvGvspPixelType enDstPixelType = stFrameInfo.enPixelType;
switch (stFrameInfo.enPixelType)
{
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12_Packed:
enDstPixelType = stFrameInfo.enPixelType; break;
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_YUYV_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YCBCR411_8_CBYYCRYY:
enDstPixelType = MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed; break;
}
IntPtr pImage = Marshal.UnsafeAddrOfPinnedArrayElement(buffArr, 0);
MyCamera.MV_PIXEL_CONVERT_PARAM stConverPixelParam = new MyCamera.MV_PIXEL_CONVERT_PARAM();
stConverPixelParam.nWidth = stFrameInfo.nWidth;
stConverPixelParam.nHeight = stFrameInfo.nHeight;
stConverPixelParam.pSrcData = pData;
stConverPixelParam.nSrcDataLen = stFrameInfo.nFrameLen;
stConverPixelParam.enSrcPixelType = stFrameInfo.enPixelType;
stConverPixelParam.enDstPixelType = enDstPixelType;
stConverPixelParam.pDstBuffer = pImage;
stConverPixelParam.nDstBufferSize = buffSize;
rtn = cameraCurr.MV_CC_ConvertPixelType_NET(ref stConverPixelParam);
if (rtn != MyCamera.MV_OK) return;
if (enDstPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8)
{
Image = new Bitmap(stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nWidth * 1, PixelFormat.Format8bppIndexed, pImage);
ColorPalette cp = Image.Palette;
for (int i = 0; i < 256; i++)
cp.Entries[i] = Color.FromArgb(i, i, i);
Image.Palette = cp;
int picSize = Image.Width * Image.Height;
Buffer = new byte[picSize];
Array.Copy(buffArr, Buffer, picSize);
//Rectangle rect = new Rectangle(0, 0, Image.Width, Image.Height);
//BitmapData bmpData = Image.LockBits(rect, ImageLockMode.ReadWrite, Image.PixelFormat);
//IntPtr iPtr = bmpData.Scan0;
//int picSize = Image.Width * Image.Height;
//Buffer = new byte[picSize];
//Marshal.Copy(iPtr, Buffer, 0, picSize);
//Image.UnlockBits(bmpData);
}
else
{
for (int i = 0; i < stFrameInfo.nHeight; i++)
{
for (int j = 0; j < stFrameInfo.nWidth; j++)
{
byte chRed = buffArr[i * stFrameInfo.nWidth * 3 + j * 3];
buffArr[i * stFrameInfo.nWidth * 3 + j * 3] = buffArr[i * stFrameInfo.nWidth * 3 + j * 3 + 2];
buffArr[i * stFrameInfo.nWidth * 3 + j * 3 + 2] = chRed;
}
}
Image = new Bitmap(stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nWidth * 3, PixelFormat.Format24bppRgb, pImage);
int picSize = Image.Width * Image.Height * 3;
Buffer = new byte[picSize];
Array.Copy(buffArr, Buffer, picSize);
}
rtn = cameraCurr.MV_CC_StopGrabbing_NET();
if (rtn != MyCamera.MV_OK) return;
}
/// <summary>
/// 抓取连续图像,触发GrabImage事件
/// </summary>
/// <param name="hWnd"></param>
public void GrabContinuous(IntPtr hWnd)
{
int rtn = cameraCurr.MV_CC_StartGrabbing_NET();
if (rtn != MyCamera.MV_OK) return;
rtn = cameraCurr.MV_CC_Display_NET(hWnd);
if (rtn != MyCamera.MV_OK) return;
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace CodeLibrary
{
public class ImageHelper
{ /// <summary>
/// 图像灰度化
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
public static Bitmap ToGray(Bitmap bmp)
{
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
//利用公式计算灰度值
int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);
Color newColor = Color.FromArgb(gray, gray, gray);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}
/// <summary>
/// 图像灰度反转
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
public static Bitmap GrayReverse(Bitmap bmp)
{
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
Color newColor = Color.FromArgb(255 - color.R, 255 - color.G, 255 - color.B);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}
/// <summary>
/// 图像二值化1:取图片的平均灰度作为阈值,低于该值的全都为0,高于该值的全都为255
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
public static Bitmap ConvertTo1Bpp1(Bitmap bmp)
{
int average = 0;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
Color color = bmp.GetPixel(i, j);
average += color.B;
}
}
average = (int)average / (bmp.Width * bmp.Height);
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
int value = 255 - color.B;
Color newColor = value > average ? Color.FromArgb(0, 0, 0) : Color.FromArgb(255, 255, 255);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}
/// <summary>
/// 图像二值化2
/// </summary>
/// <param name="img"></param>
/// <returns></returns>
public static Bitmap ConvertTo1Bpp2(Bitmap img)
{
int w = img.Width;
int h = img.Height;
Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);
for (int y = 0; y < h; y++)
{
byte[] scan = new byte[(w + 7) / 8];
for (int x = 0; x < w; x++)
{
Color c = img.GetPixel(x, y);
if (c.GetBrightness() >= 0.5) scan[x / 8] |= (byte)(0x80 >> (x % 8));
}
Marshal.Copy(scan, 0, (IntPtr)((int)data.Scan0 + data.Stride * y), scan.Length);
}
return bmp;
}
/// <summary>
/// 图像明暗调整
/// </summary>
/// <param name="b">原始图</param>
/// <param name="degree">亮度[-255, 255]</param>
/// <returns></returns>
public static Bitmap KiLighten(Bitmap b, int degree)
{
if (b == null)
{
return null;
}
if (degree < -255) degree = -255;
if (degree > 255) degree = 255;
try
{
int width = b.Width;
int height = b.Height;
int pix = 0;
BitmapData data = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
byte* p = (byte*)data.Scan0;
int offset = data.Stride - width * 3;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
// 处理指定位置像素的亮度
for (int i = 0; i < 3; i++)
{
pix = p[i] + degree;
if (degree < 0) p[i] = (byte)Math.Max(0, pix);
if (degree > 0) p[i] = (byte)Math.Min(255, pix);
} // i
p += 3;
} // x
p += offset;
} // y
}
b.UnlockBits(data);
return b;
}
catch
{
return null;
}
} // end of Lighten
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("CodeLibrary")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CodeLibrary")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("2e0d9598-cb37-46dc-9c9b-d36d4d344451")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyVersion("1.0.0.0")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.*")]
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZXing;
using ZXing.Common;
using ZXing.Multi.QrCode;
namespace CodeLibrary
{
public class ZXingCodeHelper
{
public static List<string> DeCodes(Bitmap map, string codeType)
{
if (codeType.ToUpper().Equals("QR CODE"))
{
return DecodeQRCodes(map);
}
else if (codeType.ToUpper().Equals("DATA MATRIX ECC 200"))
{
return DecodeCodes(map);
}
else if (codeType.ToUpper().Equals("BARCODE"))
{
return DecodeCodes(map);
}
else
{
return DecodeCodes(map);
}
}
public static List<string> DecodeCodes(Bitmap bmp)
{
MultiFormatReader mreader = new MultiFormatReader();
ZXing.Multi.GenericMultipleBarcodeReader genericMultiple = new ZXing.Multi.GenericMultipleBarcodeReader(mreader);
LuminanceSource source = new BitmapLuminanceSource(bmp);
BinaryBitmap binarybitmap = new BinaryBitmap(new HybridBinarizer(source));
Result[] rr = genericMultiple.decodeMultiple(binarybitmap);
List<string> result = new List<string>();
if (rr != null)
{
foreach (Result res in rr)
{
if (res != null)
{
string text = res.ToString();
if (!IsGBCode(text))
{
text = ConvertISO88591ToEncoding(text, Encoding.Default);
}
result.Add(text);
}
}
}
return result;
}
public static List<string> DecodeBarCodes(Bitmap bmp)
{
List<string> result = new List<string>();
BarcodeReader br = new BarcodeReader();
DecodingOptions decodeOption = new DecodingOptions();
decodeOption.PossibleFormats = new List<BarcodeFormat>() { BarcodeFormat.CODE_39, BarcodeFormat.CODE_128 };
br.Options = decodeOption;
Result res = br.Decode(bmp);
if (res != null)
{
result.Add(res.ToString());
}
return result;
}
public static List<string> DecodeDMCodes(Bitmap bmp)
{
ZXing.Datamatrix.DataMatrixReader qc = new ZXing.Datamatrix.DataMatrixReader();
List<string> result = new List<string>();
LuminanceSource source = new BitmapLuminanceSource(bmp);
BinaryBitmap binarybitmap = new BinaryBitmap(new HybridBinarizer(source));
IDictionary<DecodeHintType, object> hints = new Dictionary<DecodeHintType, object>();
hints.Add(DecodeHintType.CHARACTER_SET, "UTF-8");
hints.Add(DecodeHintType.TRY_HARDER, "3");
Result res = qc.decode(binarybitmap, hints);
if (res != null)
{
result.Add(res.ToString());
}
return result;
}
public static List<string> DecodeQRCodes(Bitmap bmp)
{
QRCodeMultiReader qc = new QRCodeMultiReader();
List<string> result = new List<string>();
LuminanceSource source = new BitmapLuminanceSource(bmp);
BinaryBitmap binarybitmap = new BinaryBitmap(new HybridBinarizer(source));
IDictionary<DecodeHintType, object> hints = new Dictionary<DecodeHintType, object>();
hints.Add(DecodeHintType.CHARACTER_SET, "GB2312");
hints.Add(DecodeHintType.TRY_HARDER, "3");
Result[] r = qc.decodeMultiple(binarybitmap, hints);
if (r != null)
{
foreach (Result res in r)
{
if (res != null)
{
string text = res.ToString();
//if (!IsGBCode(text))
//{
// string chStr = "生产日期(或厂家批次):";
// int index = text.IndexOf(chStr);
// if (index > 0)
// {
// string sub1 = text.Substring(0, index);
// int sub3startIndex =index+ chStr.Length;
// string sub3 = text.Substring(sub3startIndex,text.Length- sub3startIndex);
// string sub1r = ConvertISO88591ToEncoding(sub1, Encoding.Default);
// string sub3r = ConvertISO88591ToEncoding(sub3, Encoding.Default);
// text = sub1r + chStr + sub3r;
// }
// else
// {
// text = ConvertISO88591ToEncoding(text, Encoding.Default);
// }
//}
result.Add(text);
}
}
}
return result;
}
//public static string DecodeQRCode(Bitmap bmp)
//{
// string text = "";
// DecodingOptions option = new DecodingOptions();
// //option.PossibleFormats = new List<BarcodeFormat>() { BarcodeFormat.QR_CODE, BarcodeFormat.All_1D };
// option.PossibleFormats = new List<BarcodeFormat>() { BarcodeFormat.QR_CODE };
// BarcodeReader br = new BarcodeReader();
// br.Options = option;
// Result rs = br.Decode(bmp);
// if (rs == null)
// {
// text = "";
// }
// else
// {
// text = rs.ToString();
// if (!IsGBCode(text))
// {
// text = ConvertISO88591ToEncoding(text, Encoding.Default);
// }
// }
// return text;
//}
//转换
private static string ConvertISO88591ToEncoding(string srcString, Encoding dstEncode)
{
String sResult;
Encoding ISO88591Encoding = Encoding.GetEncoding("ISO-8859-1");
Encoding GB2312Encoding = Encoding.GetEncoding("GB2312"); //这个地方很特殊,必须利用GB2312编码
byte[] srcBytes = ISO88591Encoding.GetBytes(srcString);
//将原本存储ISO-8859-1的字节数组当成GB2312转换成目标编码(关键步骤)
byte[] dstBytes = Encoding.Convert(GB2312Encoding, dstEncode, srcBytes);
char[] dstChars = new char[dstEncode.GetCharCount(dstBytes, 0, dstBytes.Length)];
dstEncode.GetChars(dstBytes, 0, dstBytes.Length, dstChars, 0);//利用char数组存储字符
sResult = new string(dstChars);
return sResult;
}
/// <summary>
/// 判断一个word是否为GB2312编码的汉字
/// </summary>
/// <param name="word"></param>
/// <returns></returns>
private static bool IsGBCode(string word)
{
byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(word);
if (bytes.Length <= 1) // if there is only one byte, it is ASCII code or other code
{
return false;
}
else
{
byte byte1 = bytes[0];
byte byte2 = bytes[1];
if (byte1 >= 176 && byte1 <= 247 && byte2 >= 160 && byte2 <= 254) //判断是否是GB2312
{
return true;
}
else
{
return false;
}
}
}
}
}
using Basler.Pylon;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeLibrary
{
public class BaslerCManager
{
/// <summary>
/// 当前相机
/// </summary>
// private Camera cameraCur = null;
private static Dictionary<string, BaslerCameraBean> cameraMap = new Dictionary<string, BaslerCameraBean>();
/// <summary>
/// 所有相机列表
/// </summary>
private static List<ICameraInfo> cameraAll;
/// <summary>
/// 所有相机的名称
/// </summary>
private static List<string> cameraName;
/// <summary>
/// 获取连续图像
/// </summary>
public delegate void GrabImageEvent();
///// <summary>
///// 获取连续图像事件,需要跨线程操作
///// </summary>
//public event GrabImageEvent GrabImage;
private BaslerCManager()
{
Load();
}
/// <summary>
/// 错误信息
/// </summary>
public static string ErrInfo { set; get; }
/// <summary>
/// 相机总数
/// </summary>
public int Count
{
get { return cameraAll == null ? 0 : cameraAll.Count; }
}
/// <summary>
/// 相机名称,ModelName,SerialNumber
/// </summary>
public static string[] CameraName
{
get
{
if (cameraName == null)
{
cameraName = new List<string>();
}
return cameraName.ToArray();
}
}
public static BaslerCameraBean GetCamera(string cName)
{
if (cameraMap.ContainsKey(cName))
{
return cameraMap[cName];
}
return null;
}
public static void AddCamera(string name, BaslerCameraBean bean)
{
if (cameraMap.ContainsKey(name))
{
cameraMap.Remove(name);
}
cameraMap.Add(name, bean);
}
/// <summary>
/// 当前相机是否打开
/// </summary>
public static bool IsOpen(string name)
{
BaslerCameraBean bean = GetCamera(name);
if (bean == null)
{ return false; }
else
{
return bean.cameraCur.IsOpen;
}
}
/// <summary>
/// 加载相机
/// </summary>
public static void Load()
{
try
{
cameraAll = CameraFinder.Enumerate();
cameraName = new List<string>();
foreach (ICameraInfo info in cameraAll)
cameraName.Add(info[CameraInfoKey.ModelName].ToString() + " (" + info[CameraInfoKey.SerialNumber].ToString() + ")");
}
catch (Exception ex)
{
HDLogUtil.error("Basler Load Error:" + ex.StackTrace);
}
}
/// <summary>
/// 打开指定相机
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static bool Open(string name, GrabImageEvent grab=null)
{
int n = cameraName.FindIndex(s => s == name);
if (n == -1)
return false;
else
{
if (cameraMap.ContainsKey(name))
{
if (cameraMap[name].cameraCur != null)
{
cameraMap[name].cameraCur.Close();
}
cameraMap.Remove(name);
}
Camera cameraCur = null;
if (n < 0 || n >= cameraAll.Count) { return false ; }
try
{
cameraCur = new Camera(cameraAll[n]);
BaslerCameraBean bean = new BaslerCameraBean(cameraCur);
bean.Open( );
AddCamera(name, bean);
}
catch (Exception ex)
{
ErrInfo = ex.Message;
return false ;
}
return true;
}
}
/// <summary>
/// 关闭当前相机
/// </summary>
public static void Close(string name)
{
BaslerCameraBean bean = GetCamera(name);
if (bean != null && bean.cameraCur != null)
{
bean.Close();
}
}
public static void CloseAll()
{
foreach(string key in cameraMap.Keys)
{
Close(key);
}
}
/// <summary>
/// 停止抓取数据
/// </summary>
public static void Stop(string name)
{
BaslerCameraBean bean = GetCamera(name);
if (bean != null)
{
bean.Stop();
}
}
/// <summary>
/// 抓取一张图像
/// </summary>
public static Bitmap GrabOne(string name)
{
BaslerCameraBean bean = GetCamera(name);
if (bean != null && bean.cameraCur != null)
{
return bean.GrabOne();
}
return null;
}
}
}
using Basler.Pylon;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static CodeLibrary.BaslerCamera;
namespace CodeLibrary
{
public class BaslerCameraBean
{
public Camera cameraCur = null;
/// <summary>
/// 相机图像宽度
/// </summary>
public int Width { set; get; }
/// <summary>
/// 相机图像高度
/// </summary>
public int Height { set; get; }
/// <summary>
/// 相机32位缓存
/// </summary>
public byte[] Buffer { get; private set; }
/// <summary>
/// 相机32位图像
/// </summary>
public Bitmap Image { get; private set; }
/// <summary>
/// 获取连续图像事件,需要跨线程操作
/// </summary>
public event GrabImageEvent GrabImage;
/// <summary>
/// 错误信息
/// </summary>
public string ErrInfo { set; get; }
public BaslerCameraBean (Camera c)
{
this.cameraCur = c;
}
public BaslerCameraBean (Camera c ,int width,int height)
{
this.cameraCur = c;
this.Width = width;
this.Height = height;
}
public void Open()
{
cameraCur.StreamGrabber.ImageGrabbed += OnImageGrabbed;
//cameraCur.StreamGrabber.GrabStopped += OnGrabStopped;
cameraCur.Open();
int Width = Convert.ToInt32(cameraCur.Parameters[PLCamera.Width].GetValue());
int Height = Convert.ToInt32(cameraCur.Parameters[PLCamera.Height].GetValue());
cameraCur.Parameters[PLCamera.UserSetSelector].SetValue(PLCamera.UserSetSelector.UserSet1); //加载用户设置1
bool bln = cameraCur.Parameters[PLCamera.UserSetLoad].TryExecute(); //执行设置
}
/// <summary>
/// 关闭当前相机
/// </summary>
public void Close()
{
if (cameraCur != null)
{
cameraCur.Close();
cameraCur.Dispose();
cameraCur = null;
}
}
/// <summary>
/// 停止抓取数据
/// </summary>
public void Stop()
{
if (cameraCur != null)
cameraCur.StreamGrabber.Stop();
}
/// <summary>
/// 抓取一张图像
/// </summary>
public Bitmap GrabOne()
{
cameraCur.Parameters[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.SingleFrame);
//cameraCur.StreamGrabber.Start();
//IGrabResult grabResult = cameraCur.StreamGrabber.RetrieveResult(5000, TimeoutHandling.ThrowException);
IGrabResult grabResult = cameraCur.StreamGrabber.GrabOne(5000);
if (!grabResult.IsValid) return null ;
Image = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb);
BitmapData bmpData = Image.LockBits(new Rectangle(0, 0, grabResult.Width, grabResult.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
IntPtr ptrBmp = bmpData.Scan0;
int picSize = bmpData.Stride * grabResult.Height;
PixelDataConverter conv = new PixelDataConverter();
conv.OutputPixelFormat = PixelType.BGRA8packed;
conv.Convert(ptrBmp, picSize, grabResult);
Buffer = new byte[picSize];
System.Runtime.InteropServices.Marshal.Copy(ptrBmp, Buffer, 0, picSize);
Image.UnlockBits(bmpData);
return Image;
//cameraCur.StreamGrabber.Stop();
}
/// <summary>
/// 抓取连续图像,触发GrabImage事件
/// </summary>
public void GrabContinuous()
{
cameraCur.Parameters[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.Continuous);
cameraCur.StreamGrabber.Start(GrabStrategy.OneByOne, GrabLoop.ProvidedByStreamGrabber);
}
private void OnImageGrabbed(object sender, ImageGrabbedEventArgs e)
{
try
{
IGrabResult grabResult = e.GrabResult;
if (!grabResult.IsValid) return;
Image = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb);
BitmapData bmpData = Image.LockBits(new Rectangle(0, 0, grabResult.Width, grabResult.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
IntPtr ptrBmp = bmpData.Scan0;
int picSize = bmpData.Stride * grabResult.Height;
PixelDataConverter conv = new PixelDataConverter();
conv.OutputPixelFormat = PixelType.BGRA8packed;
conv.Convert(ptrBmp, picSize, grabResult);
Buffer = new byte[picSize];
System.Runtime.InteropServices.Marshal.Copy(ptrBmp, Buffer, 0, picSize);
Image.UnlockBits(bmpData);
GrabImage?.Invoke();
}
catch (Exception ex)
{
ErrInfo = ex.Message;
}
finally
{
e.DisposeGrabResultIfClone();
}
}
}
}
using System;
using Basler.Pylon;
using System.Drawing;
using System.Drawing.Imaging;
using System.Collections.Generic;
namespace CodeLibrary
{
partial class Basler : ClsCamera
{
/// <summary>
/// 当前相机
/// </summary>
private global::Basler.Pylon.Camera[] cameraCurr;
/// <summary>
/// 所有相机列表
/// </summary>
private List<ICameraInfo> cameraAll;
///// <summary>
///// 所有相机的名称
///// </summary>
//private List<string> cameraName;
///// <summary>
///// 连续抓图事件
///// </summary>
//public event Continuous Continuous_Event;
public override void Close(string name)
{
int index = Array.FindIndex(_name, s => s == name);
if (index == -1)
return;
if (cameraCurr[index] != null)
{
_isOpen[index] = false;
cameraCurr[index].Close();
cameraCurr[index].Dispose();
cameraCurr[index] = null;
}
}
public override void Close(int index)
{
if (cameraCurr[index] != null)
{
_isOpen[index] = false;
cameraCurr[index].Close();
cameraCurr[index].Dispose();
cameraCurr[index] = null;
}
}
public override void CloseAll()
{
for (int i = 0; i < cameraCurr.Length; i++)
{
if (cameraCurr[i] != null)
{
_isOpen[i] = false;
cameraCurr[i].Close();
cameraCurr[i].Dispose();
cameraCurr[i] = null;
}
}
}
public override Bitmap GrabOne(int index)
{
if (cameraCurr[index] != null)
{
try
{
cameraCurr[index].Parameters[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.SingleFrame);
//cameraCur.StreamGrabber.Start();
//IGrabResult grabResult = cameraCur.StreamGrabber.RetrieveResult(5000, TimeoutHandling.ThrowException);
IGrabResult grabResult = cameraCurr[index].StreamGrabber.GrabOne(5000);
if (!grabResult.IsValid)
{
_errInfo = grabResult.ErrorDescription;
return null;
}
Bitmap _image = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format24bppRgb);
BitmapData bmpData = _image.LockBits(new Rectangle(0, 0, grabResult.Width, grabResult.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
IntPtr ptrBmp = bmpData.Scan0;
int picSize = bmpData.Stride * grabResult.Height;
PixelDataConverter conv = new PixelDataConverter();
conv.OutputPixelFormat = PixelType.BGR8packed;
conv.Convert(ptrBmp, picSize, grabResult);
//_buffer = new byte[picSize];
//System.Runtime.InteropServices.Marshal.Copy(ptrBmp, _buffer, 0, picSize);
_image.UnlockBits(bmpData);
_errInfo = "OK";
return _image;
}
catch (Exception ex)
{
_errInfo = ex.Message;
return null;
}
}
return null;
}
public override Bitmap GrabOne(string name)
{
int idx = Array.FindIndex(_name, s => s == name);
if (idx == -1)
return null;
else
return GrabOne(idx);
}
//public override void GrabStop(int index)
//{
// if (cameraCurr[index] != null)
// cameraCurr[index].StreamGrabber.Stop();
//}
public override bool Load()
{
try
{
cameraAll = CameraFinder.Enumerate();
cameraName = new List<string>();
foreach (ICameraInfo info in cameraAll)
cameraName.Add(info[CameraInfoKey.ModelName].ToString() + " (" + info[CameraInfoKey.SerialNumber].ToString() + ")");
_name = cameraName.ToArray();
_count = cameraName.Count;
_isOpen = new bool[_count];
_width = new int[_count];
_height = new int[_count];
cameraCurr = new global::Basler.Pylon.Camera[_count];
_errInfo = "OK";
return true;
}
catch (Exception ex)
{
_errInfo = ex.Message;
return false;
}
}
public override bool Open(int index)
{
// _index = index;
if (index < 0 || index >= _count)
{
_errInfo = "Not find";
return false;
}
if (cameraCurr[index] != null) Close(index);
try
{
cameraCurr[index] = new global::Basler.Pylon.Camera(cameraAll[index]);
//cameraCur.ConnectionLost += OnConnectionLost;
//cameraCur.CameraOpened += OnCameraOpened;
//cameraCur.CameraClosed += OnCameraClosed;
//cameraCur.StreamGrabber.GrabStarted += OnGrabStarted;
// cameraCurr[index].StreamGrabber.ImageGrabbed += OnImageGrabbed;
//cameraCur.StreamGrabber.GrabStopped += OnGrabStopped;
cameraCurr[index].Open();
_width[index] = Convert.ToInt32(cameraCurr[index].Parameters[PLCamera.Width].GetValue());
_height[index] = Convert.ToInt32(cameraCurr[index].Parameters[PLCamera.Height].GetValue());
cameraCurr[index].Parameters[PLCamera.UserSetSelector].SetValue(PLCamera.UserSetSelector.UserSet1); //加载用户设置1
bool bln = cameraCurr[index].Parameters[PLCamera.UserSetLoad].TryExecute(); //执行设置
_isOpen[index] = true;
_errInfo = "OK";
return true;
}
catch (Exception ex)
{
_errInfo = ex.Message;
return false;
}
}
public override bool Open(string name)
{
int n = cameraName.FindIndex(s => s == name);
if (n == -1)
{
_errInfo = "Not find";
return false;
}
else
return Open(n);
}
public override bool OpenAll()
{
bool rtn = true;
for (int i = 0; i < cameraName.Count; i++)
{
rtn = Open(i);
if (!rtn) break;
}
return rtn;
}
public override Bitmap GrabOneImage(string name)
{
int n = cameraName.FindIndex(s => s == name);
if (n == -1)
{
_errInfo = "Not find";
return null;
}
if (cameraCurr[n] != null)
{
return GrabOne(name);
}
return null;
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace CodeLibrary
{
/// <summary>
/// 相机
/// </summary>
public class Camera
{
public static ClsCamera _cam;
private static CameraType _type;
/// <summary>
/// 相机
/// </summary>
private Camera()
{ }
/// <summary>
/// 相机类型
/// </summary>
public static CameraType Type
{
set
{
if (_cam != null)
{
return;
// _cam.CloseAll();
}
_type = value;
switch (_type)
{
case CameraType.HIK:
_cam = new HIK();
// ((HIK)_cam).Continuous_Event += Camera_Continuous_Event;
break;
case CameraType.Basler:
_cam = new Basler();
// ((Basler)_cam).Continuous_Event += Camera_Continuous_Event;
break;
}
}
get
{
return _type;
}
}
}
/// <summary>
/// 相机类型
/// </summary>
public enum CameraType
{
/// <summary>
/// 海康
/// </summary>
HIK,
/// <summary>
/// Basle
/// </summary>
Basler
}
public abstract class ClsCamera
{
/// <summary>
/// 所有相机的名称
/// </summary>
protected List<string> cameraName;
protected string _errInfo;
protected bool[] _isOpen;
protected int _count;
protected string[] _name;
protected int[] _width;
protected int[] _height;
//protected byte[] _buffer;
// protected Bitmap _image;
// protected int _index;
public delegate void Continuous();
public virtual string ErrInfo => _errInfo;
public virtual bool[] IsOpen => _isOpen;
public virtual int Count => _count;
public virtual string[] Name => _name;
//public virtual int[] Width => _width;
//public virtual int[] Height => _height;
//public virtual byte[] Buffer => _buffer;
// public virtual Bitmap Image => _image;
public abstract bool Load();
public abstract bool OpenAll();
public abstract bool Open(int index);
public abstract bool Open(string name);
public abstract void CloseAll();
public abstract void Close(int index);
public abstract void Close(string name);
// public abstract bool GrabOne();
public abstract Bitmap GrabOne(int index);
public abstract Bitmap GrabOne(string name);
// public abstract bool GrabContinuous(int index);
// public abstract void GrabStop(int index);
public abstract Bitmap GrabOneImage(string name);
}
}
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using MvCamCtrl.NET;
namespace CodeLibrary
{
partial class HIK : ClsCamera
{
/// <summary>
/// 当前相机
/// </summary>
private MyCamera[] cameraCurr;
/// <summary>
/// 所有相机列表
/// </summary>
private MyCamera.MV_CC_DEVICE_INFO_LIST cameraAll;
public override void Close(int index)
{
if (cameraCurr[index] != null)
{
_isOpen[index] = false;
cameraCurr[index].MV_CC_CloseDevice_NET();
cameraCurr[index].MV_CC_DestroyDevice_NET();
cameraCurr[index] = null;
}
}
public override void Close(string name)
{
int index = cameraName.FindIndex(s => s == name);
if (index == -1)
{
_errInfo = "Not find";
return;
}
if (cameraCurr[index] != null)
{
_isOpen[index] = false;
cameraCurr[index].MV_CC_CloseDevice_NET();
cameraCurr[index].MV_CC_DestroyDevice_NET();
cameraCurr[index] = null;
}
}
public override void CloseAll()
{
for (int i = 0; i < cameraCurr.Length; i++)
{
if (cameraCurr[i] != null)
{
_isOpen[i] = false;
cameraCurr[i].MV_CC_CloseDevice_NET();
cameraCurr[i].MV_CC_DestroyDevice_NET();
cameraCurr[i] = null;
}
}
}
public override Bitmap GrabOne(int index)
{
if (cameraCurr[index] == null)
{
_errInfo = "Camera null";
return null;
}
try
{
int rtn = cameraCurr[index].MV_CC_StartGrabbing_NET();
if (rtn != MyCamera.MV_OK)
{
_errInfo = "Can not grab one : " + rtn;
return null;
}
return ImageCapture(index);
_errInfo = "OK";
// return true;
}
catch (Exception ex)
{
_errInfo = ex.Message;
return null;
}
finally
{
cameraCurr[index].MV_CC_StopGrabbing_NET();
}
}
public override Bitmap GrabOne(string name)
{
int idx = Array.FindIndex(_name, s => s == name);
if (idx == -1)
return null;
else
return GrabOne(idx);
}
public override bool Load()
{
try
{
cameraAll = new MyCamera.MV_CC_DEVICE_INFO_LIST();
int rtn = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref cameraAll);
if (rtn != MyCamera.MV_OK)
{
_errInfo = "Load failed";
return false;
}
cameraName = new List<string>();
string s = "";
for (int i = 0; i < cameraAll.nDeviceNum; i++)
{
MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(cameraAll.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));
if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
{
IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo, 0);
MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO));
s = "GigE:" + gigeInfo.chModelName + " (" + gigeInfo.chSerialNumber + ")";
}
else if (device.nTLayerType == MyCamera.MV_USB_DEVICE)
{
IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stUsb3VInfo, 0);
MyCamera.MV_USB3_DEVICE_INFO usbInfo = (MyCamera.MV_USB3_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_USB3_DEVICE_INFO));
s = "USB:" + usbInfo.chModelName + " (" + usbInfo.chSerialNumber + ")";
}
cameraName.Add(s);
}
_name = cameraName.ToArray();
_count = cameraName.Count;
_isOpen = new bool[_count];
_width = new int[_count];
_height = new int[_count];
cameraCurr = new MyCamera[_count];
_errInfo = "OK";
return true;
}
catch (Exception ex)
{
_errInfo = ex.Message;
return false;
}
}
public override bool Open(int index)
{
// _index = index;
if (index < 0 || index >= _count)
{
_errInfo = "Not find";
return false;
}
if (cameraCurr[index] != null) Close(index);
try
{
MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(cameraAll.pDeviceInfo[index], typeof(MyCamera.MV_CC_DEVICE_INFO));
cameraCurr[index] = new MyCamera();
int nRet = cameraCurr[index].MV_CC_CreateDevice_NET(ref device);
if (nRet != MyCamera.MV_OK) return false;
nRet = cameraCurr[index].MV_CC_OpenDevice_NET();
if (nRet != MyCamera.MV_OK)
{
cameraCurr[index].MV_CC_DestroyDevice_NET();
_errInfo = "Can not open";
return false;
}
if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
{
int nPacketSize = cameraCurr[index].MV_CC_GetOptimalPacketSize_NET();
if (nPacketSize > 0) nRet = cameraCurr[index].MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize);
}
//cameraCurr[index].MV_CC_SetEnumValue_NET("AcquisitionMode", 2); //工作在连续模式
cameraCurr[index].MV_CC_SetEnumValue_NET("TriggerMode", 0); //连续模式
MyCamera.MVCC_INTVALUE pstValue = new MyCamera.MVCC_INTVALUE();
nRet = cameraCurr[index].MV_CC_GetWidth_NET(ref pstValue);
_width[index] = (int)pstValue.nCurValue;
nRet = cameraCurr[index].MV_CC_GetHeight_NET(ref pstValue);
_height[index] = (int)pstValue.nCurValue;
_isOpen[index] = true;
_errInfo = "OK";
return true;
}
catch (Exception ex)
{
HDLogUtil.error("打开相机出错:" + ex.ToString());
_errInfo = ex.Message;
return false;
}
}
public override bool Open(string name)
{
int n = cameraName.FindIndex(s => s == name);
if (n == -1)
{
_errInfo = name + "Not find";
return false;
}
else
return Open(n);
}
public override Bitmap GrabOneImage(string name)
{
int n = cameraName.FindIndex(s => s == name);
if (n == -1)
{
_errInfo = name + "Not find";
return null;
}
if (cameraCurr[n] != null)
{
}
else
{
Open(name);
}
return GrabOne(name);
}
public override bool OpenAll()
{
bool rtn = true;
for (int i = 0; i < cameraName.Count; i++)
{
rtn = Open(i);
if (!rtn) break;
}
return rtn;
}
private Bitmap ImageCapture(int index)
{
MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE();
int rtn = cameraCurr[index].MV_CC_GetIntValue_NET("PayloadSize", ref stParam);
if (rtn != MyCamera.MV_OK) return null;
uint dataSize = stParam.nCurValue;
byte[] dataArr = new byte[dataSize];
uint buffSize = dataSize * 3 + 2048;
byte[] buffArr = new byte[buffSize];
IntPtr pData = Marshal.UnsafeAddrOfPinnedArrayElement(dataArr, 0);
MyCamera.MV_FRAME_OUT_INFO_EX stFrameInfo = new MyCamera.MV_FRAME_OUT_INFO_EX();
rtn = cameraCurr[index].MV_CC_GetOneFrameTimeout_NET(pData, dataSize, ref stFrameInfo, 100000);
if (rtn != MyCamera.MV_OK) return null;
MyCamera.MvGvspPixelType enDstPixelType = stFrameInfo.enPixelType;
switch (stFrameInfo.enPixelType)
{
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12_Packed:
enDstPixelType = stFrameInfo.enPixelType; break;
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_YUYV_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YCBCR411_8_CBYYCRYY:
enDstPixelType = MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed; break;
}
IntPtr pImage = Marshal.UnsafeAddrOfPinnedArrayElement(buffArr, 0);
MyCamera.MV_PIXEL_CONVERT_PARAM stConverPixelParam = new MyCamera.MV_PIXEL_CONVERT_PARAM();
stConverPixelParam.nWidth = stFrameInfo.nWidth;
stConverPixelParam.nHeight = stFrameInfo.nHeight;
stConverPixelParam.pSrcData = pData;
stConverPixelParam.nSrcDataLen = stFrameInfo.nFrameLen;
stConverPixelParam.enSrcPixelType = stFrameInfo.enPixelType;
stConverPixelParam.enDstPixelType = enDstPixelType;
stConverPixelParam.pDstBuffer = pImage;
stConverPixelParam.nDstBufferSize = buffSize;
rtn = cameraCurr[index].MV_CC_ConvertPixelType_NET(ref stConverPixelParam);
if (rtn != MyCamera.MV_OK) return null;
if (enDstPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8)
{
Bitmap _image = new Bitmap(stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nWidth * 1, PixelFormat.Format8bppIndexed, pImage);
ColorPalette cp = _image.Palette;
for (int i = 0; i < 256; i++)
cp.Entries[i] = Color.FromArgb(i, i, i);
_image.Palette = cp;
//int picSize = _image.Width * _image.Height;
//byte[] _buffer = new byte[picSize];
//Array.Copy(buffArr, _buffer, picSize);
return _image;
}
else
{
for (int i = 0; i < stFrameInfo.nHeight; i++)
{
for (int j = 0; j < stFrameInfo.nWidth; j++)
{
byte chRed = buffArr[i * stFrameInfo.nWidth * 3 + j * 3];
buffArr[i * stFrameInfo.nWidth * 3 + j * 3] = buffArr[i * stFrameInfo.nWidth * 3 + j * 3 + 2];
buffArr[i * stFrameInfo.nWidth * 3 + j * 3 + 2] = chRed;
}
}
Bitmap _image = new Bitmap(stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nWidth * 3, PixelFormat.Format24bppRgb, pImage);
//int picSize = _image.Width * _image.Height * 3;
//byte[] _buffer = new byte[picSize];
//Array.Copy(buffArr, _buffer, picSize);
return _image;
}
}
}
}
\ No newline at end of file
using MvCamCtrl.NET;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace CodeLibrary
{
public class HIKCManager
{ /// <summary>
/// 当前相机
/// </summary>
// private Camera cameraCur = null;
private static Dictionary<string, HIKCameraBean> cameraMap = new Dictionary<string, HIKCameraBean>();
/// <summary>
/// 当前相机
/// </summary>
// private MyCamera cameraCurr;
/// <summary>
/// 所有相机列表
/// </summary>
private static MyCamera.MV_CC_DEVICE_INFO_LIST cameraAll;
/// <summary>
/// 所有相机的名称
/// </summary>
private static List<string> cameraName = new List<string>();
/// <summary>
/// 海康相机
/// </summary>
public HIKCManager()
{
cameraAll = new MyCamera.MV_CC_DEVICE_INFO_LIST();
Load();
}
public static HIKCameraBean GetCamera(string cName)
{
if (cameraMap.ContainsKey(cName))
{
return cameraMap[cName];
}
return null;
}
public static void AddCamera(string name, HIKCameraBean bean)
{
if (cameraMap.ContainsKey(name))
{
cameraMap.Remove(name);
}
cameraMap.Add(name, bean);
}
/// <summary>
/// 错误信息
/// </summary>
public static string ErrInfo { set; get; }
/// <summary>
/// 相机总数
/// </summary>
public static int Count
{
get { return (int)cameraAll.nDeviceNum; }
}
/// <summary>
/// 相机名称,ModelName,SerialNumber
/// </summary>
public static string[] CameraName
{
get
{
if (cameraName == null)
{
cameraName = new List<string>();
}
return cameraName.ToArray();
}
}
/// <summary>
/// 当前相机是否打开
/// </summary>
public static bool IsOpen(string cName)
{
HIKCameraBean bean = GetCamera(cName);
if (bean == null || bean.cameraCur == null)
{
return false;
}
else
{
return true;
}
}
/// <summary>
/// 加载相机
/// </summary>
public static void Load()
{
try
{
int rtn = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref cameraAll);
if (rtn != MyCamera.MV_OK) return;
cameraName.Clear();
string s = "";
for (int i = 0; i < cameraAll.nDeviceNum; i++)
{
MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(cameraAll.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));
if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
{
IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo, 0);
MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO));
s = "GigE:" + gigeInfo.chModelName + " (" + gigeInfo.chSerialNumber + ")";
}
else if (device.nTLayerType == MyCamera.MV_USB_DEVICE)
{
IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stUsb3VInfo, 0);
MyCamera.MV_USB3_DEVICE_INFO usbInfo = (MyCamera.MV_USB3_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_USB3_DEVICE_INFO));
s = "USB:" + usbInfo.chModelName + " (" + usbInfo.chSerialNumber + ")";
}
cameraName.Add(s);
}
}
catch (Exception ex)
{
HDLogUtil.error("HIK Load Error:" + ex.StackTrace);
}
}
/// <summary>
/// 打开指定相机
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static bool Open(string name)
{
int n = cameraName.FindIndex(s => s == name);
if (n == -1)
return false;
else
{
if (cameraMap.ContainsKey(name))
{
if (cameraMap[name].cameraCur != null)
{
cameraMap[name].Close();
}
cameraMap.Remove(name);
}
if (n < 0 || n >= cameraAll.pDeviceInfo.Length) { return false; }
try
{
MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(cameraAll.pDeviceInfo[n], typeof(MyCamera.MV_CC_DEVICE_INFO));
MyCamera cameraCur = new MyCamera();
HIKCameraBean bean = new HIKCameraBean(cameraCur);
bean.Open(device);
AddCamera(name, bean);
}
catch (Exception ex)
{
ErrInfo = ex.Message;
return false;
}
return true;
}
}
/// <summary>
/// 关闭当前相机
/// </summary>
public static void Close(string cName)
{
HIKCameraBean bean = GetCamera(cName);
if (bean != null && bean.cameraCur != null)
{
bean.cameraCur.MV_CC_CloseDevice_NET();
bean.cameraCur.MV_CC_DestroyDevice_NET();
bean.cameraCur = null;
}
}
public static void CloseAll()
{
foreach (string key in cameraMap.Keys)
{
Close(key);
}
}
/// <summary>
/// 停止抓取数据
/// </summary>
public static void Stop(string cName)
{
HIKCameraBean bean = GetCamera(cName);
if (bean == null || bean.cameraCur != null)
{ return; }
if (bean.cameraCur == null) return;
int rtn = bean.cameraCur.MV_CC_StopGrabbing_NET();
if (rtn != MyCamera.MV_OK) return;
}
/// <summary>
/// 抓取一张图像
/// </summary>
public static Bitmap GrabOne(string cName)
{
HIKCameraBean bean = GetCamera(cName);
if (bean == null || bean.cameraCur != null)
{ return null; }
return bean.GrabOne();
}
/// <summary>
/// 抓取连续图像,触发GrabImage事件
/// </summary>
/// <param name="hWnd"></param>
public static void GrabContinuous(string cName, IntPtr hWnd)
{
HIKCameraBean bean = GetCamera(cName);
if (bean == null || bean.cameraCur != null)
{ return ; }
int rtn = bean.cameraCur.MV_CC_StartGrabbing_NET();
if (rtn != MyCamera.MV_OK) return;
rtn = bean.cameraCur.MV_CC_Display_NET(hWnd);
if (rtn != MyCamera.MV_OK) return;
}
}
}
using MvCamCtrl.NET;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace CodeLibrary
{
public class HIKCameraBean
{
/// <summary>
/// 当前相机
/// </summary>
public MyCamera cameraCur;
/// <summary>
/// 海康相机
/// </summary>
internal HIKCameraBean(MyCamera cameraCur)
{
this.cameraCur = cameraCur;
}
/// <summary>
/// 错误信息
/// </summary>
public string ErrInfo { set; get; }
/// <summary>
/// 当前相机是否打开
/// </summary>
public bool IsOpen
{
get
{
if (cameraCur == null)
return false;
else
return true;
}
}
/// <summary>
/// 相机图像宽度
/// </summary>
public int Width { set; get; }
/// <summary>
/// 相机图像高度
/// </summary>
public int Height { set; get; }
/// <summary>
/// 相机32位缓存
/// </summary>
public byte[] Buffer { get; private set; }
/// <summary>
/// 相机32位图像
/// </summary>
public Bitmap Image { get; private set; }
/// <summary>
/// 打开指定相机
/// </summary>
/// <param name="idx">索引</param>
/// <returns></returns>
public bool Open(MyCamera.MV_CC_DEVICE_INFO device)
{
if (cameraCur == null) return false;
int nRet = cameraCur.MV_CC_CreateDevice_NET(ref device);
if (nRet != MyCamera.MV_OK) return false;
nRet = cameraCur.MV_CC_OpenDevice_NET();
if (nRet != MyCamera.MV_OK)
{
cameraCur.MV_CC_DestroyDevice_NET();
return false;
}
if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
{
int nPacketSize = cameraCur.MV_CC_GetOptimalPacketSize_NET();
if (nPacketSize > 0) nRet = cameraCur.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize);
}
cameraCur.MV_CC_SetEnumValue_NET("AcquisitionMode", 2); //工作在连续模式
cameraCur.MV_CC_SetEnumValue_NET("TriggerMode", 0); //连续模式
MyCamera.MVCC_INTVALUE pstValue = new MyCamera.MVCC_INTVALUE();
nRet = cameraCur.MV_CC_GetWidth_NET(ref pstValue);
Width = (int)pstValue.nCurValue;
nRet = cameraCur.MV_CC_GetHeight_NET(ref pstValue);
Height = (int)pstValue.nCurValue;
return true;
}
/// <summary>
/// 关闭当前相机
/// </summary>
public void Close()
{
if (cameraCur != null)
{
cameraCur.MV_CC_CloseDevice_NET();
cameraCur.MV_CC_DestroyDevice_NET();
cameraCur = null;
}
}
/// <summary>
/// 停止抓取数据
/// </summary>
public void Stop()
{
if (cameraCur == null) return;
int rtn = cameraCur.MV_CC_StopGrabbing_NET();
if (rtn != MyCamera.MV_OK) return;
}
/// <summary>
/// 抓取一张图像
/// </summary>
public Bitmap GrabOne()
{
int rtn = cameraCur.MV_CC_StartGrabbing_NET();
if (rtn != MyCamera.MV_OK) return null;
MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE();
rtn = cameraCur.MV_CC_GetIntValue_NET("PayloadSize", ref stParam);
if (rtn != MyCamera.MV_OK) return null;
uint dataSize = stParam.nCurValue;
byte[] dataArr = new byte[dataSize];
uint buffSize = dataSize * 3 + 2048;
byte[] buffArr = new byte[buffSize];
IntPtr pData = Marshal.UnsafeAddrOfPinnedArrayElement(dataArr, 0);
MyCamera.MV_FRAME_OUT_INFO_EX stFrameInfo = new MyCamera.MV_FRAME_OUT_INFO_EX();
rtn = cameraCur.MV_CC_GetOneFrameTimeout_NET(pData, dataSize, ref stFrameInfo, 100000);
if (rtn != MyCamera.MV_OK) return null;
MyCamera.MvGvspPixelType enDstPixelType = stFrameInfo.enPixelType;
switch (stFrameInfo.enPixelType)
{
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12_Packed:
enDstPixelType = stFrameInfo.enPixelType; break;
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG8:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_YUYV_Packed:
case MyCamera.MvGvspPixelType.PixelType_Gvsp_YCBCR411_8_CBYYCRYY:
enDstPixelType = MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed; break;
}
IntPtr pImage = Marshal.UnsafeAddrOfPinnedArrayElement(buffArr, 0);
MyCamera.MV_PIXEL_CONVERT_PARAM stConverPixelParam = new MyCamera.MV_PIXEL_CONVERT_PARAM();
stConverPixelParam.nWidth = stFrameInfo.nWidth;
stConverPixelParam.nHeight = stFrameInfo.nHeight;
stConverPixelParam.pSrcData = pData;
stConverPixelParam.nSrcDataLen = stFrameInfo.nFrameLen;
stConverPixelParam.enSrcPixelType = stFrameInfo.enPixelType;
stConverPixelParam.enDstPixelType = enDstPixelType;
stConverPixelParam.pDstBuffer = pImage;
stConverPixelParam.nDstBufferSize = buffSize;
rtn = cameraCur.MV_CC_ConvertPixelType_NET(ref stConverPixelParam);
if (rtn != MyCamera.MV_OK) return null;
if (enDstPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8)
{
Image = new Bitmap(stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nWidth * 1, PixelFormat.Format8bppIndexed, pImage);
ColorPalette cp = Image.Palette;
for (int i = 0; i < 256; i++)
cp.Entries[i] = Color.FromArgb(i, i, i);
Image.Palette = cp;
int picSize = Image.Width * Image.Height;
Buffer = new byte[picSize];
Array.Copy(buffArr, Buffer, picSize);
//Rectangle rect = new Rectangle(0, 0, Image.Width, Image.Height);
//BitmapData bmpData = Image.LockBits(rect, ImageLockMode.ReadWrite, Image.PixelFormat);
//IntPtr iPtr = bmpData.Scan0;
//int picSize = Image.Width * Image.Height;
//Buffer = new byte[picSize];
//Marshal.Copy(iPtr, Buffer, 0, picSize);
//Image.UnlockBits(bmpData);
}
else
{
for (int i = 0; i < stFrameInfo.nHeight; i++)
{
for (int j = 0; j < stFrameInfo.nWidth; j++)
{
byte chRed = buffArr[i * stFrameInfo.nWidth * 3 + j * 3];
buffArr[i * stFrameInfo.nWidth * 3 + j * 3] = buffArr[i * stFrameInfo.nWidth * 3 + j * 3 + 2];
buffArr[i * stFrameInfo.nWidth * 3 + j * 3 + 2] = chRed;
}
}
Image = new Bitmap(stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nWidth * 3, PixelFormat.Format24bppRgb, pImage);
int picSize = Image.Width * Image.Height * 3;
Buffer = new byte[picSize];
Array.Copy(buffArr, Buffer, picSize);
return Image;
}
rtn = cameraCur.MV_CC_StopGrabbing_NET();
if (rtn != MyCamera.MV_OK)
{
}
return null;
}
/// <summary>
/// 抓取连续图像,触发GrabImage事件
/// </summary>
/// <param name="hWnd"></param>
public void GrabContinuous(IntPtr hWnd)
{
int rtn = cameraCur.MV_CC_StartGrabbing_NET();
if (rtn != MyCamera.MV_OK) return;
rtn = cameraCur.MV_CC_Display_NET(hWnd);
if (rtn != MyCamera.MV_OK) return;
}
}
}
FrmCodeDecode_Text,二维码识别,Qr code recognition
FrmCodeDecode_label4_Text,参数路径,Parameters of the path
FrmCodeDecode_chbUseParam_Text,使用参数,operation parameter
FrmCodeDecode_btnAn_Text,变暗,darken
FrmCodeDecode_btnLight_Text,提亮,brighten
FrmCodeDecode_btnCopyN_Text,复制名称,Copy Name
FrmCodeDecode_label3_Text,条码类型:,Bar code type:
FrmCodeDecode_label2_Text,相机列表:,Camera list:
FrmCodeDecode_btnExit_Text,退出,Exit
FrmCodeDecode_btnCameraImage_Text,相机获取图片,camera image
FrmCodeDecode_lblCount_Text,条码数量:,Barcode number:
FrmCodeDecode_btnClearLog_Text,清理日志,Clear log
FrmCodeDecode_btnDCode_Text,二维码识别,Qr code recognition
FrmCodeDecode_btnLearn_Text,学习,learn
FrmCodeDecode_btnbarCode_Text,一维码识别,One dimensional code recognition
FrmCodeDecode_btnGray_Text,图像转灰,Turning grey
FrmCodeDecode_btnErZhi_Text,二值化,binaryzation 
FrmCodeDecode_btnSelImage_Text,打开本地图片,Open local image
FrmCodeDecode_label1_Text,图片路径,Image path
FrmCodeLearn_Text,条码参数学习,Bar code parameter learning
FrmCodeLearn_chbHalcon_Text,Halcon获取图片,Halcon Get photo
FrmCodeLearn_label4_Text,图片路径,Image path
FrmCodeLearn_btnDelOld_Text,删除旧参数,Delete old parameter
FrmCodeLearn_chbUseCamera_Text,相机获取实时图片,camera image
FrmCodeLearn_btnSelImage_Text,打开本地图片,Open local image
FrmCodeLearn_chbTest_Text,学习结束自动识别测试,Automatic identification test
FrmCodeLearn_btnClearLog_Text,清理日志,Clear log
FrmCodeLearn_lblCount_Text,条码数量:,Barcode number:
FrmCodeLearn_label3_Text,参数路径,Parameters of the path
FrmCodeLearn_label2_Text,类型:,Type:
FrmCodeLearn_label1_Text,相机:,camera:
FrmCodeLearn_btnExit_Text,退出,Exit
FrmCodeLearn_btnStop_Text,结束学习,End of learning
FrmCodeLearn_btnOpen_Text,开始学习,start to learn
selCamera,请先选择相机,Please select camera
selImage,请先选择图片,Please select picture
title,提示,Notice
imageIsNull,获取二维码图片为空,Get the two-dimensional code picture is empty
sureDelete,确定删除文件:,Make sure to delete the file:
\ No newline at end of file
20181123
增加相机本身获取图片的代码,后续扫码都直接从相机中获取图片,然后扫码
20190731
RC29西安三台料仓的二维码使用halcon无法识别,增加zxing的识别方式。
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!