Esempio n. 1
0
        //回调函数
        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内
        }