Ejemplo n.º 1
0
        int ISampleGrabberCB.BufferCB(double SampleTime, IntPtr pBuffer, int BufferLen)
        {
            if (m_callbackState > 0)
            {
                /*
                 #region Just as if BufferCB was called
                 * IntPtr pBuffer;
                 *
                 * pSample.GetPointer(out pBuffer);
                 * int BufferLen = pSample.GetActualDataLength();
                 #endregion
                 */
                if (m_pictureControl != null)
                {
                    lock (m_pictureControl.SynchronizationObject) {
                        unsafe {
                            DistortedDraw((byte *)pBuffer, m_displacementMap, m_pictureControl.DisplayBitmap);
                        }
                    }

                    m_pictureControl.Refresh();

                    if (m_takePictureEnd)
                    {
                        m_callbackState  = 0;
                        m_capturedBitmap = (Bitmap)m_pictureControl.DisplayBitmap;
                        m_callbackCompleted.Set();
                    }
                }
                else
                {
                    m_callbackState--;
                    if (m_callbackState <= 0)
                    {
                        using (Bitmap b = new Bitmap(m_configuration.Size.Width, m_configuration.Size.Height, BufferLen / m_configuration.Size.Height, m_configuration.PixelFormat, pBuffer)) {
                            m_capturedBitmap = new Bitmap(b);                                   // copy
                            m_capturedBitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
                        }

                        m_callbackCompleted.Set();
                    }
                }
            }

            return(0);
        }