using System; using System.Runtime.InteropServices; using TUCAMAPI; namespace TUCamera { public class TUCameraDrawMax : TUCameraIFrameProcess { private TUCamera m_camera; private FrameProcesserState m_state = FrameProcesserState.STOP; private byte[] pBuf = null; private object lockObj = new object(); public TUCameraDrawMax(TUCamera camera) { m_camera = camera; } public void DoProcess(ref TUCAM_FRAME frame) { if (m_state != FrameProcesserState.PLAY) { return; } int nSize = (int)(frame.uiImgSize + frame.usHeader); if (pBuf == null || pBuf.Length != nSize) { pBuf = new byte[nSize]; } Marshal.Copy(frame.pBuffer, pBuf, 0, nSize); Buffer.BlockCopy(pBuf, (int)(frame.usHeader), pBuf, 0, (int)(frame.uiImgSize)); Pause(); //Console.WriteLine("返回全图buf"); m_camera.CallbackDrawAll(pBuf, lockObj, frame.ucChannels); //Console.WriteLine("返回全图buf结束"); } private int m_roiX = 0; private int m_roiY = 0; private int m_roiWidth = 0; private int m_roiHeight = 0; private int m_resolutionW = 0; private int m_resolutionH = 0; public void Start() { Console.WriteLine("获取当前ROI保存"); m_camera.GetROI(ref m_roiX, ref m_roiY, ref m_roiWidth, ref m_roiHeight); Console.WriteLine("设置最大ROI------开始"); m_camera.SetROIFull(ref m_resolutionW, ref m_resolutionH); Console.WriteLine("设置最大ROI------结束"); m_state = FrameProcesserState.PLAY; } public int GetResolutionW() { return m_resolutionW; } public int GetResolutionH() { return m_resolutionH; } public void Stop() { if (m_state != FrameProcesserState.STOP) { Console.WriteLine("抓取全图------结束"); Console.WriteLine("恢复原ROI-----开始"); m_camera.SetROI(ref m_roiX, ref m_roiY, ref m_roiWidth, ref m_roiHeight); Console.WriteLine("恢复原ROI-----结束"); m_state = FrameProcesserState.STOP; } } public void Pause() { m_state = FrameProcesserState.PAUSE; } public void Resume() { m_state = FrameProcesserState.PLAY; } public FrameProcesserState GetStatus() { return m_state; } } }