Beispiel #1
0
        /// <summary>
        /// <para>/****************************************************************************</para>
        /// <para> * @fn           GetOneFrame</para>
        /// <para> * @brief        获取一帧图像数据</para>
        /// <para> * @param        pData                 IN-OUT            数据数组指针</para>
        /// <para> * @param        pnDataLen             IN                数据大小</para>
        /// <para> * @param        nDataSize             IN                数组缓存大小</para>
        /// <para> * @param        pFrameInfo            OUT               数据信息</para>
        /// <para> * @return       成功:0;错误:-1</para>
        /// <para> ****************************************************************************/</para>
        /// </summary>
        public int GetOneFrame(IntPtr pData, ref UInt32 pnDataLen, UInt32 nDataSize, ref MyCamera.MV_FRAME_OUT_INFO pFrameInfo)
        {
            int nRet = m_pCSI.MV_CC_GetOneFrame_NET(pData, nDataSize, ref pFrameInfo);

            pnDataLen = pFrameInfo.nFrameLen;
            if (MyCamera.MV_OK != nRet)
            {
                return(nRet);
            }
            return(nRet);
        }
Beispiel #2
0
        private void SaveImage(IntPtr pData, ref MyCamera.MV_FRAME_OUT_INFO pFrameInfo, IntPtr pUser)
        {
            try
            {
                if (ignoreImage)
                {
                    return;
                }

                //HTuple startTime;
                HOperatorSet.CountSeconds(out startTime);

                // Reduce the number of displayed images to a reasonable amount if the camera is acquiring images very fast.
                //if (!stopWatch.IsRunning || stopWatch.ElapsedMilliseconds > 10)
                {
                    //stopWatch.Restart();

                    //if (hPylonImage != null && hPylonImage.IsInitialized())
                    //{
                    //    hPylonImage.Dispose();
                    //}
                    hPylonImage = new HImage();
                    if (pFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8)
                    {
                        hPylonImage.GenImage1("byte", pFrameInfo.nWidth, pFrameInfo.nHeight, pData);
                    }
                    else if (pFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed)
                    {
                        hPylonImage.GenImageInterleaved(pData,
                                                        "rgb",
                                                        pFrameInfo.nWidth, pFrameInfo.nHeight,
                                                        -1, "byte",
                                                        pFrameInfo.nWidth, pFrameInfo.nHeight,
                                                        0, 0, -1, 0);
                    }
                    else
                    {
                        Util.Notify(string.Format("相机{0}编码格式不正确,当前格式{1}", cameraIndex, pFrameInfo.enPixelType));
                    }
                    TrigerImageEvent();
                }
            }
            catch (System.ArgumentException ex)
            {
                Util.WriteLog(this.GetType(), ex);
                Util.Notify(string.Format("相机{0}图像数据包丢失", cameraIndex));
            }
            catch (Exception ex)
            {
                Util.WriteLog(this.GetType(), ex);
                Util.Notify(string.Format("相机{0}图像数据返回出现异常", cameraIndex));
            }
        }
Beispiel #3
0
        private void ImageOut(IntPtr pixelPointer, ref MyCamera.MV_FRAME_OUT_INFO pFrameInfo, IntPtr pUser)
        {
            try
            {
                MyCamera.MV_SAVE_IMAGE_PARAM_EX stSaveParam = new MyCamera.MV_SAVE_IMAGE_PARAM_EX();
                stSaveParam.enImageType  = MyCamera.MV_SAVE_IAMGE_TYPE.MV_Image_Bmp;
                stSaveParam.enPixelType  = pFrameInfo.enPixelType;
                stSaveParam.pData        = pixelPointer;
                stSaveParam.nDataLen     = pFrameInfo.nFrameLen;
                stSaveParam.nHeight      = pFrameInfo.nHeight;
                stSaveParam.nWidth       = pFrameInfo.nWidth;
                stSaveParam.pImageBuffer = pBufForSave;
                stSaveParam.nBufferSize  = nSaveSize;
                stSaveParam.nJpgQuality  = 80;
                if (MyCamera.MV_OK != m_pOperator.SaveImage(ref stSaveParam))
                {
                    return;
                }

                //byte[] image = new byte[stSaveParam.nImageLen];
                //Marshal.Copy(pBufForSave, image, 0, (int)stSaveParam.nImageLen);
                //FileStream file = new FileStream("image.bmp", FileMode.Create, FileAccess.Write);
                //file.Write(image, 0, (int)stSaveParam.nImageLen);
                //file.Close();

                //Stopwatch sw = new Stopwatch();
                //sw.Start();

                //图像压缩
                HImage hImage    = new HImage("byte", pFrameInfo.nWidth, pFrameInfo.nHeight, pixelPointer);
                HImage hNewImage = hImage.ZoomImageFactor(0.25, 0.25, "constant");  //4倍
                Bitmap bImage    = GenertateGrayBitmap(hNewImage);
                //bImage.Save("image.bmp");
                byte[] image = GlobalFunction.ImageToBytes(bImage);

                //sw.Stop();
                //TimeSpan ts2 = sw.Elapsed;
                //string info = "压缩总共花费" + ts2.TotalMilliseconds.ToString() + "ms.";
                //LogHelper.AppLoger.Info(info);

                ThrowImage(image);
            }
            catch
            {
                if (IsGrabEnd == false)
                {
                    m_pOperator.StopGrabbing();
                    IsGrabEnd = true;
                }
                m_pOperator.Close();
            }
        }
Beispiel #4
0
        /****************************************************************************
        * @fn           GetOneFrame
        * @brief        获取一帧图像数据
        * @param        pData                 IN-OUT            数据数组指针
        * @param        pnDataLen             IN                数据大小
        * @param        nDataSize             IN                数组缓存大小
        * @param        pFrameInfo            OUT               数据信息
        * @return       成功:0;错误:-1
        ****************************************************************************/
        public int GetOneFrame(IntPtr pData, ref UInt32 pnDataLen, UInt32 nDataSize, ref MyCamera.MV_FRAME_OUT_INFO pFrameInfo)
        {
            pnDataLen = 0;
            int nRet = m_pCSI.MV_CC_GetOneFrame_NET(pData, nDataSize, ref pFrameInfo);

            if (MyCamera.MV_OK != nRet)
            {
                return(CO_FAIL);
            }

            pnDataLen = (uint)(pFrameInfo.nWidth * pFrameInfo.nWidth * (((((UInt32)pFrameInfo.enPixelType) >> 16) & 0xffff) >> 3));

            return(CO_OK);
        }
Beispiel #5
0
        private void SaveImage(IntPtr pData, ref MyCamera.MV_FRAME_OUT_INFO pFrameInfo, IntPtr pUser)
        {
            try
            {
                if (ignoreImage)
                {
                    return;
                }

                //HTuple startTime;
                if (Command != Command.Grab)
                {
                    HOperatorSet.CountSeconds(out startTime);
                }


                hPylonImage = new HImage();
                if (pFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8)
                {
                    hPylonImage.GenImage1("byte", pFrameInfo.nWidth, pFrameInfo.nHeight, pData);
                }
                else if (pFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed)
                {
                    hPylonImage.GenImageInterleaved(pData,
                                                    "rgb",
                                                    pFrameInfo.nWidth, pFrameInfo.nHeight,
                                                    -1, "byte",
                                                    pFrameInfo.nWidth, pFrameInfo.nHeight,
                                                    0, 0, -1, 0);
                }
                else
                {
                    Util.Notify(string.Format("相机{0}编码格式不正确,当前格式{1}", cameraIndex, pFrameInfo.enPixelType));
                }
                TrigerImageEvent();
            }
            catch (System.ArgumentException ex)
            {
                Util.WriteLog(this.GetType(), ex);
                Util.Notify(string.Format("相机{0}图像数据包丢失", cameraIndex));
            }
            catch (Exception ex)
            {
                Util.WriteLog(this.GetType(), ex);
                Util.Notify(string.Format("相机{0}图像数据返回出现异常", cameraIndex));
            }
        }
Beispiel #6
0
        /// <summary>
        /// 取图
        /// </summary>
        public void OnMVImageReadyEventCallback()
        {
            lock (obj)
            {
                try
                {
                    byte[] buffer      = new byte[SizeMax.Width * SizeMax.Height * 3];
                    IntPtr pData       = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0);
                    uint   nDataLen    = 0;
                    var    stFrameInfo = new MyCamera.MV_FRAME_OUT_INFO();
                    //  stFrameInfo = new MyCamera.MV_FRAME_OUT_INFO_EX();
                    //超时获取一帧,超时时间为1秒

                    var nRet = GetOneFrame(pData, ref nDataLen, (uint)SizeMax.Width * (uint)SizeMax.Height * 3, ref stFrameInfo);

                    // nRet = GetImageBGR(pData, (uint)SizeMax.Width * (uint)SizeMax.Height * 3, ref stFrameInfo);

                    if (MyCamera.MV_OK == nRet)
                    {
                        if (m_bitmap != null)
                        {
                            /* Update the bitmap with the image data. */
                            UpdateBitmap(m_bitmap, buffer, stFrameInfo.nWidth, stFrameInfo.nHeight, false);
                            /* To show the new image, request the display control to update itself. */
                        }
                        else /* A new bitmap is required. */
                        {
                            CreateBitmap(ref m_bitmap, stFrameInfo.nWidth, stFrameInfo.nHeight, false);
                            UpdateBitmap(m_bitmap, buffer, stFrameInfo.nWidth, stFrameInfo.nHeight, false);
                            //* Provide the display control with the new bitmap. This action automatically updates the display. */
                        }
                        bitmapInfo.Bitmap = (Bitmap)m_bitmap.Clone();
                        ImageReady?.Invoke(bitmapInfo);
                    }
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                }
            }
        }
        //回调函数
        private void SaveImageCallBack(IntPtr pData, ref MyCamera.MV_FRAME_OUT_INFO pFrameInfo, IntPtr pUser)
        {
            DateTime dataTime1 = DateTime.Now;

            if ((3 * pFrameInfo.nFrameLen + 2048) > m_nBufSizeForSaveImage)
            {
                m_nBufSizeForSaveImage = 3 * pFrameInfo.nFrameLen + 2048;
                m_pBufForSaveImage     = new byte[m_nBufSizeForSaveImage];
            }

            IntPtr pImage = Marshal.UnsafeAddrOfPinnedArrayElement(m_pBufForSaveImage, 0);

            MyCamera.MV_SAVE_IMAGE_PARAM stSaveParam = new MyCamera.MV_SAVE_IMAGE_PARAM();
            stSaveParam.enImageType  = MyCamera.MV_SAVE_IAMGE_TYPE.MV_Image_Bmp;
            stSaveParam.enPixelType  = pFrameInfo.enPixelType;
            stSaveParam.pData        = pData;
            stSaveParam.nDataLen     = pFrameInfo.nFrameLen;
            stSaveParam.nHeight      = pFrameInfo.nHeight;
            stSaveParam.nWidth       = pFrameInfo.nWidth;
            stSaveParam.pImageBuffer = pImage;
            stSaveParam.nBufferSize  = m_nBufSizeForSaveImage;
            stSaveParam.nImageLen    = 0;
            int nRet = m_pOperator.SaveImage(ref stSaveParam);

            MemoryStream ms = new MemoryStream();                        //新建内存流

            ms.Write(m_pBufForSaveImage, 0, (int)stSaveParam.nImageLen); //附值

            this.Dispatcher.Invoke(DispatcherPriority.Normal,
                                   (ThreadStart) delegate()
            {
                image_Camera.Source = imageSourceConverter.ConvertFrom(ms) as BitmapFrame;
                GC.Collect(); //强制回收资源
            }
                                   );

            Thread.Sleep(500);   //这个延时可以让UI的响应更为流畅,但是图片的刷新较慢,打印的事件lTime在40ms内
        }
Beispiel #8
0
        private void SaveImage(IntPtr pData, ref MyCamera.MV_FRAME_OUT_INFO pFrameInfo, IntPtr pUser)
        {
            try
            {
                if (ignoreImage)
                {
                    return;
                }

                //HTuple startTime;
                // HOperatorSet.CountSeconds(out startTime);

                // Reduce the number of displayed images to a reasonable amount if the camera is acquiring images very fast.
                //if (!stopWatch.IsRunning || stopWatch.ElapsedMilliseconds > 10)
                {
                    //stopWatch.Restart();

                    //if (hPylonImage != null && hPylonImage.IsInitialized())
                    //{
                    //    hPylonImage.Dispose();
                    //}
                    hPylonImage = new Cognex.VisionPro.CogImage8Grey();

                    if (pFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8)
                    {
                        //hPylonImage.GenImage1("byte", pFrameInfo.nWidth, pFrameInfo.nHeight, pData);
                        var cogRoot = new Cognex.VisionPro.CogImage8Root();



                        uint buffersize = new uint();


                        // m_pOperator.GetIntValue("PayloadSize",ref buffersize);



                        //byte[] ImagebufferPtr = new byte[pFrameInfo.nWidth * pFrameInfo.nHeight];
                        //var pBufForDriver = Marshal.AllocHGlobal((Int32)(buffersize));



                        //Marshal.Copy(pBufForDriver, ImagebufferPtr, 0, pFrameInfo.nWidth * pFrameInfo.nHeight - 1);

                        cogRoot.Initialize(pFrameInfo.nWidth, pFrameInfo.nHeight, pData, pFrameInfo.nWidth, null);

                        hPylonImage.SetRoot(cogRoot);
                        GC.Collect();
                        //Marshal.FreeHGlobal(pBufForDriver);


                        /*
                         * MyCamera.MV_FRAME_OUT info = new MyCamera.MV_FRAME_OUT();
                         * var stDevInfo = (MyCamera.MV_FRAME_OUT)Marshal.PtrToStructure(stDevList.pDeviceInfo[0], typeof(MyCamera.MV_FRAME_OUT));*/
                    }
                    else if (pFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed)
                    {/*
                      * hPylonImage.GenImageInterleaved(pData,
                      * "rgb",
                      *  pFrameInfo.nWidth, pFrameInfo.nHeight,
                      * -1, "byte",
                      * pFrameInfo.nWidth, pFrameInfo.nHeight,
                      * 0, 0, -1, 0);*/
                    }
                    else
                    {/*
                      * Util.Notify(string.Format("相机{0}编码格式不正确,当前格式{1}", cameraIndex, pFrameInfo.enPixelType));*/
                    }
                    TrigerImageEvent();
                }
            }
            catch (System.ArgumentException ex)
            {/*
              * Util.WriteLog(this.GetType(), ex);
              * Util.Notify(string.Format("相机{0}图像数据包丢失", cameraIndex));*/
            }
            catch (Exception ex)
            {/*
              * Util.WriteLog(this.GetType(), ex);
              * Util.Notify(string.Format("相机{0}图像数据返回出现异常", cameraIndex));*/
            }
        }