487 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			487 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //using Emgu.CV;
 | |
| //using Emgu.CV.CvEnum;
 | |
| //using Emgu.CV.Structure;
 | |
| //using Euresys.Open_eVision_2_11;
 | |
| //using System;
 | |
| //using System.Collections.Generic;
 | |
| //using System.Drawing;
 | |
| //using System.Linq;
 | |
| //using System.Text;
 | |
| //using System.Threading.Tasks;
 | |
| 
 | |
| //namespace Project
 | |
| //{
 | |
| //    public static class Util_Vision
 | |
| //    {
 | |
| //        //private static object imageLockObj = new object();
 | |
| 
 | |
| //        //public struct SCodeData
 | |
| //        //{
 | |
| //        //    public Point[] corner;
 | |
| //        //    public string data;
 | |
| //        //    public string model;
 | |
| //        //    public string version;
 | |
| //        //    public string level;
 | |
| //        //    public string sid;
 | |
| //        //}
 | |
| 
 | |
| 
 | |
| //        //public static void DisplayQRData(List<SCodeData> DataArr, Rectangle roi, arCtl.ImageBox iv)
 | |
| //        //{
 | |
| //        //    iv.ClearShape();
 | |
| //        //    foreach (var item in DataArr)
 | |
| //        //    {
 | |
| //        //        var p = new PointF[4];
 | |
| //        //        p[0] = new PointF(item.corner[0].X + roi.Left, item.corner[0].Y + roi.Top);
 | |
| //        //        p[1] = new PointF(item.corner[1].X + roi.Left, item.corner[1].Y + roi.Top);
 | |
| //        //        p[2] = new PointF(item.corner[2].X + roi.Left, item.corner[2].Y + roi.Top);
 | |
| //        //        p[3] = new PointF(item.corner[3].X + roi.Left, item.corner[3].Y + roi.Top);
 | |
| 
 | |
| //        //        iv.AddShapeLine(p[0], p[1], Color.Gold, false, 5);
 | |
| //        //        iv.AddShapeLine(p[1], p[2], Color.Gold, false, 5);
 | |
| //        //        iv.AddShapeLine(p[2], p[3], Color.Gold, false, 5);
 | |
| //        //        iv.AddShapeLine(p[3], p[0], Color.Gold, false, 5);
 | |
| 
 | |
| //        //        if (item.data.isEmpty() == false)
 | |
| //        //        {
 | |
| //        //            iv.AddShapeText(item.corner[1], item.data, Color.Black, 200);
 | |
| //        //        }
 | |
| //        //    }
 | |
| //        //}
 | |
| 
 | |
| //        /// <summary>
 | |
| //        /// 마스킹이적용된 이미지가 반환됩니다. 마스킹
 | |
| //        /// </summary>
 | |
| //        /// <param name="orgEImage"></param>
 | |
| //        /// <param name="Message"></param>
 | |
| //        /// <param name="iv"></param>
 | |
| //        /// <param name="reelsize"></param>
 | |
| //        /// <returns></returns>
 | |
| //        //public static EImageBW8 FindReelOutline(EImageBW8 orgEImage, out string Message, out PointF CenterPX, out float Diameter, arCtl.ImageBox iv = null, eCartSize reelsize = eCartSize.Inch7)
 | |
| //        //{
 | |
| 
 | |
| //        //    EImageBW8 retval = null;// new EImageBW8(orgEImage.Width, orgEImage.Height); //마스킹이적용된 이미지
 | |
| 
 | |
| //        //    Message = string.Empty;
 | |
| //        //    CenterPX = PointF.Empty;
 | |
| //        //    Diameter = 0;
 | |
| 
 | |
| //        //    //EWorldShape EWorldShape1 = new EWorldShape(); // EWorldShape instance
 | |
| //        //    ECircleGauge ECircleGauge1 = new ECircleGauge(); // ECircleGauge instance
 | |
| //        //    ECircle Circle1 = new ECircle(); // ECircle instance
 | |
| //        //    ECircle measuredCircle = null; // ECircle instance
 | |
| //        //    iv.ClearShape("OUTLINE");
 | |
| 
 | |
| //        //    try
 | |
| //        //    {
 | |
| //        //        // EBW8Image1.Load("C:\\temp\\b.bmp");
 | |
| //        //        //ECircleGauge1.Attach(EWorldShape1);
 | |
| //        //        ECircleGauge1.Dragable = true;
 | |
| //        //        ECircleGauge1.Resizable = true;
 | |
| //        //        ECircleGauge1.Rotatable = true;
 | |
| //        //        // EWorldShape1.SetSensorSize(3289, 2406);
 | |
| //        //        // EWorldShape1.Process(EBW8Image1, true);
 | |
| //        //        ECircleGauge1.Thickness = 20;
 | |
| //        //        ECircleGauge1.TransitionChoice = ETransitionChoice.NthFromEnd;
 | |
| //        //        ECircleGauge1.FilteringThreshold = 3.00f;
 | |
| //        //        ECircleGauge1.SetCenterXY(2000f, 1400f);
 | |
| //        //        ECircleGauge1.Amplitude = 360f;
 | |
| //        //        ECircleGauge1.Tolerance = 500;
 | |
| //        //        ECircleGauge1.Diameter = 2200f;
 | |
| //        //        ECircleGauge1.Threshold = 20;
 | |
| //        //        ECircleGauge1.FilteringThreshold = 3.0f;
 | |
| //        //        ECircleGauge1.Measure(orgEImage);
 | |
| //        //        measuredCircle = ECircleGauge1.MeasuredCircle;
 | |
| //        //        if (measuredCircle.CenterX < 1 && measuredCircle.CenterY < 1)
 | |
| //        //        {
 | |
| //        //            Message = "outline not found";
 | |
| //        //            if (reelsize != eCartSize.None)
 | |
| //        //            {
 | |
| //        //                //마스크파일이 존재하면 해당 마스크를 사용한다
 | |
| //        //                var maskfilname = "Mask" + reelsize.ToString() + ".bmp";
 | |
| //        //                var filename = System.IO.Path.Combine(Util.CurrentPath, "Data", maskfilname);
 | |
| //        //                if (System.IO.File.Exists(filename))
 | |
| //        //                {
 | |
| //        //                    var maskimg = new EImageBW8(); // Image<Gray, byte>(filename);
 | |
| //        //                    maskimg.Load(filename);
 | |
| //        //                    retval = new EImageBW8(orgEImage.Width, orgEImage.Height);
 | |
| //        //                    EasyImage.Oper(EArithmeticLogicOperation.BitwiseAnd, orgEImage, maskimg, retval);
 | |
| //        //                }
 | |
| //        //                else Pub.log.AddE("마스크파일:" + maskfilname + "이존재하지 않아 사용하지 않습니다");
 | |
| //        //            }
 | |
| //        //        }
 | |
| //        //        else
 | |
| //        //        {
 | |
| //        //            retval = new EImageBW8(orgEImage.Width, orgEImage.Height);
 | |
| //        //            Diameter = measuredCircle.Diameter;
 | |
| //        //            CenterPX = new PointF(measuredCircle.CenterX, measuredCircle.CenterY);
 | |
| 
 | |
| //        //            var rect = new RectangleF(CenterPX.X - Diameter / 2.0f, CenterPX.Y - Diameter / 2.0f, Diameter, Diameter);
 | |
| //        //            var sh = iv.AddShapePoint(CenterPX.X, CenterPX.Y, 50, Color.Gold);
 | |
| //        //            sh.Tag = "OUTLINE";
 | |
| //        //            var shc = iv.AddShapeCircle(rect, Color.Lime, 50);
 | |
| //        //            shc.Tag = "OUTLINE";
 | |
| 
 | |
| //        //            //찾은 영역을 제외하고 마스크를 만든다.
 | |
| //        //            var dt = DateTime.Now;
 | |
| //        //            var maskimg = new Image<Gray, byte>(orgEImage.Width, orgEImage.Height);
 | |
| //        //            maskimg.SetZero();
 | |
| //        //            CvInvoke.Circle(maskimg, new Point((int)measuredCircle.CenterX, (int)measuredCircle.CenterY), (int)(Diameter / 2.0f), new Gray(255).MCvScalar, -1);
 | |
| 
 | |
| //        //            //maskimg.Save(@"c:\temp\mask_" + dt.ToString("HHmmss") + ".bmp");
 | |
| 
 | |
| //        //            //마스크와 결합
 | |
| //        //            var orgImage = new Image<Gray, byte>(orgEImage.Width, orgEImage.Height, orgEImage.RowPitch, orgEImage.GetImagePtr());
 | |
| //        //            {
 | |
| //        //                var retimg = new Image<Gray, byte>(retval.Width, retval.Height, retval.RowPitch, retval.GetImagePtr());
 | |
| //        //                {
 | |
| //        //                    CvInvoke.BitwiseAnd(orgImage, maskimg, retimg);
 | |
| //        //                }
 | |
| //        //            }
 | |
| //        //            //orgImage.Save(@"c:\temp\type1_src1_" + dt.ToString("HHmmss") + ".bmp");
 | |
| //        //            //maskimg.Save(@"c:\temp\type1_src2_" + dt.ToString("HHmmss") + ".bmp");
 | |
| //        //            //maskedimg.Save(@"c:\temp\type1_dest_" + dt.ToString("HHmmss") + ".bmp");
 | |
| //        //            //iv.AddShapeBox(rect, Color.Tomato).Tag = "OUTLINE";
 | |
| //        //        }
 | |
| //        //    }
 | |
| //        //    catch (EException ex)
 | |
| //        //    {
 | |
| //        //        // Insert exception handling code herem
 | |
| //        //        Message = ex.Message;
 | |
| //        //    }
 | |
| //        //    if (iv != null) iv.Invalidate();
 | |
| //        //    return retval;
 | |
| //        //}
 | |
| 
 | |
| 
 | |
| //        //public static PointF GetGainOffset(int idx)
 | |
| //        //{
 | |
| //        //    if (idx == 0) return new PointF(1.0f, 0.0f);
 | |
| //        //    else if (idx == 1) return new PointF(1.3f, 0.0f);
 | |
| //        //    else if (idx == 2) return new PointF(0.7f, 0.0f);
 | |
| 
 | |
| //        //    else if (idx == 3) return new PointF(1.0f, 50.0f);
 | |
| //        //    else if (idx == 4) return new PointF(1.0f, -50.0f);
 | |
| 
 | |
| //        //    else if (idx == 5) return new PointF(3.0f, 50.0f);  //아주어두운이미지용
 | |
| //        //    else if (idx == 6) return new PointF(0.5f, -20.0f); //아주밝은이미지용
 | |
| 
 | |
| //        //    //else if (idx == 7) return new PointF(1.0f, -150.0f);  //밝은이미지용
 | |
| //        //    //else if (idx == 8) return new PointF(1.0f, -170.0f); //밝은이미지용
 | |
| //        //    //else if (idx == 9) return new PointF(1.0f, -190.0f); //밝은이미지용
 | |
| 
 | |
| //        //    else return new PointF(1f, 0f);
 | |
| //        //}
 | |
| 
 | |
| //        //private static List<System.Drawing.PointF> GetGainOffsetList(string gainstr)
 | |
| //        //{
 | |
| //        //    var retval = new List<System.Drawing.PointF>();
 | |
| //        //    var list = gainstr.Split(';');
 | |
| //        //    foreach (var item in list)
 | |
| //        //    {
 | |
| //        //        var ptitem = item.Split(',');
 | |
| //        //        if (ptitem.Length == 2)
 | |
| //        //        {
 | |
| //        //            retval.Add(new System.Drawing.PointF(float.Parse(ptitem[0]), float.Parse(ptitem[1])));
 | |
| //        //        }
 | |
| //        //    }
 | |
| //        //    return retval;
 | |
| //        //}
 | |
| 
 | |
| //        //public static System.Collections.Generic.List<Util_Vision.SCodeData> DetectQR_eVision(
 | |
| //        //  EImageBW8 EBW8Image4,
 | |
| //        //  arCtl.ImageBox iv1, int idx,
 | |
| //        //  out string Message,
 | |
| //        //  string erodevaluestr = "3,1",
 | |
| //        //  string gainoffsetlist = "2,1",
 | |
| //        //  uint blob_area_min = 5000,
 | |
| //        //  uint blob_area_max = 50000,
 | |
| //        //  float blob_sigmaxy = 500f,
 | |
| //        //  float blob_sigmayy = 500f,
 | |
| //        //  float blob_sigmaxx = 5000f,
 | |
| //        //  string maskfile = "",
 | |
| //        //  Image<Bgr, byte> DispImage = null
 | |
| //        //  )
 | |
| //        //{
 | |
| //        //    Message = string.Empty;
 | |
| //        //    var pts = new System.Collections.Generic.List<Util_Vision.SCodeData>();
 | |
| //        //    System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
 | |
| //        //    wat.Restart();
 | |
| 
 | |
| //        //    //바코드리더
 | |
| //        //    EQRCodeReader EQRCode1 = new EQRCodeReader(); // EQRCodeReader instance
 | |
| //        //    EQRCode1.DetectionMethod = 15; //모든방법으로 데이터를 찾는다
 | |
| //        //    EQRCode1.TimeOut = 1000 * 1000; //timeout (1초)
 | |
| 
 | |
| //        //    //Blob 으로 바코드영역을 찾는다
 | |
| //        //    ECodedImage2 codedImage4 = new ECodedImage2(); // ECodedImage2 instance
 | |
| //        //    EImageEncoder codedImage4Encoder = new EImageEncoder(); // EImageEncoder instance
 | |
| //        //    EObjectSelection codedImage4ObjectSelection = new EObjectSelection(); // 
 | |
| //        //    codedImage4ObjectSelection.FeretAngle = 0.00f;
 | |
| //        //    using (var psegment = codedImage4Encoder.GrayscaleSingleThresholdSegmenter) //.BlackLayerEncoded = true;
 | |
| //        //    {
 | |
| //        //        psegment.BlackLayerEncoded = true;
 | |
| //        //        psegment.WhiteLayerEncoded = false;
 | |
| //        //        psegment.Mode = EGrayscaleSingleThreshold.MaxEntropy;
 | |
| //        //    }
 | |
| 
 | |
| //        //    //침식해서 바코드영역이 뭉치도록 한다. (바코드는 검은색 영역이 된다)
 | |
| //        //    List<uint> erodevalues = new List<uint>();
 | |
| //        //    var erodebuffer = erodevaluestr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
 | |
| //        //    foreach (var erbuf in erodebuffer) erodevalues.Add(uint.Parse(erbuf));
 | |
| 
 | |
| //        //    //마스크적용 - 210209
 | |
| //        //    if (maskfile.isEmpty() == false && System.IO.File.Exists(maskfile))
 | |
| //        //    {
 | |
| //        //        using (var maskmig = new EImageBW8())
 | |
| //        //        {
 | |
| //        //            maskmig.Load(maskfile);//이미지불러오지
 | |
| //        //            EasyImage.Oper(EArithmeticLogicOperation.BitwiseAnd, EBW8Image4, maskmig, EBW8Image4);
 | |
| //        //        }
 | |
| //        //    }
 | |
| 
 | |
| 
 | |
| //        //    var GainOffsetList = GetGainOffsetList(gainoffsetlist);
 | |
| //        //    uint objectCountT = 0;
 | |
| 
 | |
| //        //    for (int maxtype = 0; maxtype < 2; maxtype++)
 | |
| //        //    {
 | |
| //        //        //침식데이터도 여러개를 사용한다.
 | |
| //        //        foreach (var erodevalue in erodevalues)
 | |
| //        //        {
 | |
| //        //            //인코딩된 이미지가 들어간다
 | |
| //        //            var ErodeImageBW8 = new EImageBW8(EBW8Image4.Width, EBW8Image4.Height);
 | |
| //        //            EasyImage.ErodeBox(EBW8Image4, ErodeImageBW8, erodevalue);
 | |
| 
 | |
| 
 | |
| //        //            using (var psegment = codedImage4Encoder.GrayscaleSingleThresholdSegmenter)
 | |
| //        //            {
 | |
| //        //                if (maxtype == 0)
 | |
| //        //                    psegment.Mode = EGrayscaleSingleThreshold.MinResidue;
 | |
| //        //                else if (maxtype == 1)
 | |
| //        //                    psegment.Mode = EGrayscaleSingleThreshold.MaxEntropy;
 | |
| //        //                else if (maxtype == 2)
 | |
| //        //                    psegment.Mode = EGrayscaleSingleThreshold.IsoData;
 | |
| //        //            }
 | |
| 
 | |
| 
 | |
| //        //            codedImage4Encoder.Encode(ErodeImageBW8, codedImage4);
 | |
| //        //            codedImage4ObjectSelection.Clear();
 | |
| //        //            codedImage4ObjectSelection.AddObjects(codedImage4);
 | |
| //        //            codedImage4ObjectSelection.AttachedImage = ErodeImageBW8;
 | |
| 
 | |
| 
 | |
| //        //            //너무큰 개체를 제거한다.
 | |
| //        //            codedImage4ObjectSelection.RemoveUsingUnsignedIntegerFeature(EFeature.Area, blob_area_min, ESingleThresholdMode.LessEqual);
 | |
| //        //            codedImage4ObjectSelection.RemoveUsingUnsignedIntegerFeature(EFeature.Area, blob_area_max, ESingleThresholdMode.GreaterEqual);
 | |
| 
 | |
| //        //            //개체제거
 | |
| //        //            codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.SigmaXY, blob_sigmaxy, ESingleThresholdMode.GreaterEqual);
 | |
| //        //            codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.SigmaYY, blob_sigmayy, ESingleThresholdMode.LessEqual);
 | |
| //        //            codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.SigmaXX, blob_sigmaxx, ESingleThresholdMode.GreaterEqual);
 | |
| 
 | |
| //        //            //찾은데이터수량
 | |
| //        //            var objectCount = codedImage4ObjectSelection.ElementCount;
 | |
| //        //            objectCountT += objectCount;
 | |
| 
 | |
| //        //            //데이터표시
 | |
| //        //            //찾은영역을 표시한다.
 | |
| //        //            for (uint i = 0; i < objectCount; i++)
 | |
| //        //            {
 | |
| //        //                //각 요소를 가져와서 처리한다.
 | |
| //        //                var CElement = codedImage4ObjectSelection.GetElement(i);
 | |
| //        //                var sigXY = CElement.SigmaXY;
 | |
| //        //                var sigYY = CElement.SigmaYY;
 | |
| //        //                var rCnt = CElement.RunCount;
 | |
| //        //                var rArea = CElement.Area;
 | |
| 
 | |
| //        //                var boxW = CElement.BoundingBoxWidth * COMM.SETTING.Data.RosRectScale;
 | |
| //        //                var boxH = CElement.BoundingBoxHeight * COMM.SETTING.Data.RosRectScale;    //좀더크게간다 210209
 | |
| //        //                var boxCX = CElement.BoundingBoxCenterX;
 | |
| //        //                var boxCY = CElement.BoundingBoxCenterY;
 | |
| 
 | |
| //        //                var boxRate = (boxW * 1.0) / boxH;
 | |
| 
 | |
| //        //                var rect = new RectangleF(boxCX - boxW / 2.0f, boxCY - boxH / 2.0f, boxW, boxH);
 | |
| 
 | |
| //        //                //외각상자를 표시한다
 | |
| //        //                iv1.AddShapeBox(rect, Color.Tomato, 10);
 | |
| //        //                if (DispImage != null)
 | |
| //        //                    CvInvoke.Rectangle(DispImage,
 | |
| //        //                        new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height),
 | |
| //        //                        new Bgr(Color.Tomato).MCvScalar, 2);
 | |
| 
 | |
| //        //                //해당영역을 ROI로 잡고 이미지를 검색한다
 | |
| //        //                var RoiImage = new EROIBW8();
 | |
| //        //                RoiImage.Attach(EBW8Image4);
 | |
| 
 | |
| //        //                //ROI로 사용할 영역의 오류를 체크해야한다
 | |
| //        //                var rLeft = (int)rect.Left;
 | |
| //        //                var rTop = (int)rect.Top;
 | |
| //        //                var rWid = (int)rect.Width;
 | |
| //        //                var rHei = (int)rect.Height;
 | |
| 
 | |
| //        //                //roi 오류수정 210621
 | |
| //        //                if (rLeft < 2) rLeft = 1;
 | |
| //        //                if (rTop < 2) rTop = 1;
 | |
| //        //                if (rWid < 10) rWid = 10;
 | |
| //        //                if (rHei < 10) rHei = 10;
 | |
| //        //                if (rLeft + rWid > EBW8Image4.Width) rWid = EBW8Image4.Width - rLeft - 1;
 | |
| //        //                if (rTop + rHei > EBW8Image4.Height) rHei = EBW8Image4.Height - rTop - 1;
 | |
| 
 | |
| //        //                var rourect = new Rectangle(rLeft, rTop, rWid, rHei);
 | |
| //        //                RoiImage.SetPlacement(rourect.Left, rourect.Top, rourect.Width, rourect.Height);  //ROI적용
 | |
| 
 | |
| //        //                var TargetImage = new EImageBW8(RoiImage.Width, RoiImage.Height);
 | |
| 
 | |
| //        //                //밝기를 변경해서 처리해야한다
 | |
| //        //                //int processCount = 9;
 | |
| 
 | |
| //        //                foreach (var param in GainOffsetList) //원본, gain +-, offset +- 5가지 색상처리함
 | |
| //        //                {
 | |
| 
 | |
| //        //                    EasyImage.ScaleRotate(RoiImage, 0, 0, 0, 0, 1.0f, 1.0f, 0f, TargetImage);
 | |
| //        //                    //EasyImage.Copy(RoiImage, TargetImage);
 | |
| 
 | |
| //        //                    //밝기를 변경해서 사용할 것이므로 해당 변경된 밝기를 저장할 이미지를 생성한다. 210128
 | |
| //        //                    //var roiimg = new EImageBW8(TargetImage);
 | |
| //        //                    //var param = Util_Vision.GetGainOffset(bright);
 | |
| //        //                    if (param.X != 1.0f || param.Y != 0.0f) EasyImage.GainOffset(TargetImage, TargetImage, param.X, param.Y);
 | |
| //        //                    //else RoiImage.CopyTo(TargetImage); ;// TargetImage.CopyTo(roiimg);    //변경하지 않고 그대로 사용한다
 | |
| 
 | |
| //        //                    //적용파일을 모두 저장해준다.
 | |
| //        //                    //var roifilename = @"c:\temp\roi_" + i.ToString() + "_g" + param.X.ToString() + "_o" + param.Y.ToString() + ".bmp";
 | |
| //        //                    //TargetImage.Save(roifilename);
 | |
| 
 | |
| //        //                    EQRCode1.SearchField = TargetImage;
 | |
| //        //                    var EQRCode2Result = EQRCode1.Read();
 | |
| //        //                    for (int j = 0; j < EQRCode2Result.Length; j++)
 | |
| //        //                    {
 | |
| //        //                        var QrData = EQRCode2Result[j];
 | |
| //        //                        if (QrData.IsDecodingReliable)
 | |
| //        //                        {
 | |
| //        //                            var geo = QrData.Geometry;
 | |
| //        //                            var pos = geo.Position;
 | |
| //        //                            var cornous = pos.Corners;
 | |
| 
 | |
| //        //                            var resultData = new Util_Vision.SCodeData();
 | |
| 
 | |
| //        //                            //테두리좌표 읽기
 | |
| //        //                            var resultcorns = new List<Point>();
 | |
| //        //                            for (int k = 0; k < cornous.Length; k++)
 | |
| //        //                            {
 | |
| //        //                                var con = cornous[k];
 | |
| //        //                                resultcorns.Add(new Point((int)(con.X + rect.X), (int)(con.Y + rect.Y)));
 | |
| //        //                                con.Dispose();
 | |
| //        //                            }
 | |
| //        //                            resultData.corner = resultcorns.ToArray();
 | |
| 
 | |
| //        //                            //데이터읽기                        
 | |
| //        //                            resultData.model = QrData.Model.ToString();
 | |
| //        //                            resultData.version = QrData.Version.ToString();
 | |
| //        //                            resultData.level = QrData.Level.ToString();
 | |
| //        //                            resultData.sid = string.Empty;
 | |
| 
 | |
| //        //                            //바코드데이터확인
 | |
| //        //                            var decodestr = QrData.DecodedStream;
 | |
| //        //                            resultData.data = string.Empty;
 | |
| //        //                            foreach (var item in decodestr.DecodedStreamParts)
 | |
| //        //                            {
 | |
| //        //                                resultData.data += System.Text.Encoding.Default.GetString(item.DecodedData);
 | |
| //        //                                item.Dispose();
 | |
| //        //                            }
 | |
| 
 | |
| //        //                            var c = new StdLabelPrint.CAmkorSTDBarcode(resultData.data);
 | |
| //        //                            if (c.isValid) resultData.sid = c.SID;
 | |
| //        //                            else resultData.sid = string.Empty;
 | |
| //        //                            //if (c.isValid) break;
 | |
| //        //                            //else resultData.data = string.Empty;
 | |
| 
 | |
| //        //                            //결과데이터 추가
 | |
| //        //                            if (resultData.data.isEmpty() == false)
 | |
| //        //                            {
 | |
| //        //                                if (pts.Where(t => t.data == resultData.data).Any() == false)
 | |
| //        //                                {
 | |
| //        //                                    pts.Add(resultData);
 | |
| 
 | |
| //        //                                    //자료가잇다면 표시한다.
 | |
| //        //                                    var dispvalue = resultData.data;
 | |
| //        //                                    if (c.isValid == false) dispvalue += "\n" + c.Message;
 | |
| //        //                                    else if (c.DateError) dispvalue += "\n** Date Error **";
 | |
| //        //                                    iv1.AddShapeText(resultcorns[1].X, resultcorns[1].Y, dispvalue, (c.isValid ? Color.Yellow : Color.Red), 50);
 | |
| 
 | |
| //        //                                    if (DispImage != null)
 | |
| //        //                                        CvInvoke.PutText(DispImage,
 | |
| //        //                                            dispvalue,
 | |
| //        //                                            new Point(resultcorns[1].X, resultcorns[1].Y), FontFace.HersheyDuplex, 2,
 | |
| //        //                                            new Bgr(Color.Tomato).MCvScalar, 2);
 | |
| 
 | |
| //        //                                    //찾은테두리를 화면에 표시한다.
 | |
| //        //                                    foreach (var pt in resultcorns)
 | |
| //        //                                    {
 | |
| //        //                                        iv1.AddShapePoint(pt, 20f, Color.Lime);
 | |
| //        //                                        if (DispImage != null)
 | |
| //        //                                        {
 | |
| //        //                                            CvInvoke.Line(DispImage,
 | |
| //        //                                                new Point(pt.X - 10, pt.Y - 10),
 | |
| //        //                                                new Point(pt.X + 10, pt.Y + 10),
 | |
| //        //                                                new Bgr(Color.Lime).MCvScalar, 2);
 | |
| 
 | |
| //        //                                            CvInvoke.Line(DispImage,
 | |
| //        //                                                new Point(pt.X + 10, pt.Y - 10),
 | |
| //        //                                                new Point(pt.X - 10, pt.Y + 10),
 | |
| //        //                                                new Bgr(Color.Lime).MCvScalar, 2);
 | |
| //        //                                        }
 | |
| //        //                                    }
 | |
| //        //                                }
 | |
| //        //                            }
 | |
| 
 | |
| //        //                            decodestr.Dispose();
 | |
| //        //                            decodestr = null;
 | |
| 
 | |
| //        //                            cornous = null;
 | |
| //        //                            pos.Dispose();
 | |
| //        //                            geo.Dispose();
 | |
| //        //                        }
 | |
| //        //                        QrData.Dispose();
 | |
| //        //                    }
 | |
| 
 | |
| //        //                }
 | |
| //        //                TargetImage.Dispose();
 | |
| //        //                TargetImage = null;
 | |
| //        //                CElement.Dispose();
 | |
| //        //            }
 | |
| 
 | |
| //        //            ErodeImageBW8.Dispose(); //침식된 이미지
 | |
| //        //        }
 | |
| 
 | |
| //        //    }
 | |
| 
 | |
| 
 | |
| //        //    EQRCode1.Dispose();
 | |
| //        //    codedImage4ObjectSelection.Dispose();   //엔코더결과값소거
 | |
| //        //    codedImage4Encoder.Dispose();   //엔코더소거
 | |
| //        //    codedImage4.Dispose();  //코딩된이미지
 | |
| 
 | |
| //        //    wat.Stop();
 | |
| //        //    //iv1.AddShapeText(50, 50, wat.ElapsedMilliseconds.ToString() + "ms", Color.Lime, 50f);
 | |
| //        //    var mm = "[" + objectCountT.ToString() + "] " + wat.ElapsedMilliseconds.ToString() + "ms";
 | |
| //        //    var mmpt = new Point(20, 30 + (idx * 140));
 | |
| //        //    iv1.AddShapeText(mmpt.X, mmpt.Y, mm, Color.Lime, 100f);
 | |
| //        //    if (DispImage != null)
 | |
| //        //    {
 | |
| //        //        mmpt.Offset(0, 150);
 | |
| //        //        CvInvoke.PutText(DispImage, mm, mmpt, FontFace.HersheyDuplex, 6, new Bgr(Color.Lime).MCvScalar, 4);
 | |
| //        //        mmpt.Offset(1100, 0);
 | |
| //        //        CvInvoke.PutText(DispImage, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), mmpt, FontFace.HersheyDuplex, 6, new Bgr(Color.Gold).MCvScalar, 4);
 | |
| //        //    }
 | |
| 
 | |
| //        //    iv1.Invalidate();
 | |
| //        //    return pts;
 | |
| //        //}
 | |
| 
 | |
| 
 | |
| 
 | |
| //    }
 | |
| //}
 | 
