예제 #1
0
            public static MvSSharpnessMeasureProcessParam GetInstance()
            {
                MvSSharpnessMeasureProcessParam param = new MvSSharpnessMeasureProcessParam();

                param.pSrcImg     = IntPtr.Zero;
                param.bCmpFlag    = 0;
                param.nRegion     = 0;
                param.Pts         = IntPtr.Zero;
                param.CodeContent = IntPtr.Zero;
                param.reserve     = new IntPtr[MVConst.Len_27];

                return(param);
            }
예제 #2
0
        /// <summary>
        /// 主处理函数
        /// </summary>
        /// <param name="bmp">传入图片</param>
        /// <param name="mcList">条码信息</param>
        /// <returns>传出图片</returns>
        public int Process(Bitmap bmp, string code, List <MvBarCode.MvCodeInfo> mcList, int flag)
        {
            MvSSharpnessMeasureProcessParam  processParam  = MvSSharpnessMeasureProcessParam.GetInstance();
            MvSSharpnessMeasureProcessResult processResult = MvSSharpnessMeasureProcessResult.GetInstance();

            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);

            System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);

            var ptrImage = bmpData.Scan0;

            MvsCommon.MvSImage img = MvsCommon.MvSImage.GetInstance();
            img.Height    = bmpData.Height;
            img.Width     = bmpData.Width;
            img.ImageData = ptrImage;
            img.DataType  = Convert.ToInt32(MvsImgDataType.MVS_IMGDTP_U8);
            img.Type      = Convert.ToInt32(MvsImgType.MVS_IMGTP_UITL_Y);

            processParam.pSrcImg = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MvsCommon.MvSImage)));
            Marshal.StructureToPtr(img, processParam.pSrcImg, false);

            processParam.nRegion  = 1;
            processParam.bCmpFlag = flag;



            var    ptrPoint   = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MvsCommon.MvSPoint)) * 12);
            IntPtr ptrContent = IntPtr.Zero;

            ptrContent = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MvSCodeContent)) * 10);
            for (int j = 0; j < mcList.Count; j++)
            {
                for (int i = 0; i < mcList[j].Region.PtArray.Length; i++)
                {
                    MvsCommon.MvSPoint pt;

                    pt.x = mcList[j].Region.PtArray[i].X;
                    pt.y = mcList[j].Region.PtArray[i].Y;

                    Marshal.StructureToPtr(pt, ptrPoint + Marshal.SizeOf(typeof(MvsCommon.MvSPoint)) * i, false);
                }

                MvSCodeContent codeContent = MvSCodeContent.GetInstance();
                Array.Copy(Encoding.Default.GetBytes(mcList[j].Code), codeContent.content, mcList[j].CodeLen);
                //codeContent.content = Encoding.Default.GetBytes(mcList[j].Code);
                codeContent.len = mcList[j].CodeLen;

                Marshal.StructureToPtr(codeContent, ptrContent + Marshal.SizeOf(typeof(MvSCodeContent)) * j, false);
                //Marshal.StructureToPtr(codeContent, ptrContent, false);
            }

            processParam.Pts = ptrPoint;

            processParam.CodeContent = ptrContent;

            try
            {
                int result = MVSHARP.sharpnessMeasureProcess(m_handle, ref processParam, ref processResult);
            }



            catch (Exception ex)
            {
                MvBarCodeGlobalVar.Log.Error(ex);
            }

            bmp.UnlockBits(bmpData);

            return(processResult.score);
        }
예제 #3
0
 public static extern int sharpnessMeasureProcess(IntPtr handle, ref MvSSharpnessMeasureProcessParam param, ref MvSSharpnessMeasureProcessResult result);