TUCameraDrawMax.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using TUCAMAPI;
  4. namespace TUCamera
  5. {
  6. public class TUCameraDrawMax : TUCameraIFrameProcess
  7. {
  8. private TUCamera m_camera;
  9. private FrameProcesserState m_state = FrameProcesserState.STOP;
  10. private byte[] pBuf = null;
  11. private object lockObj = new object();
  12. public TUCameraDrawMax(TUCamera camera)
  13. {
  14. m_camera = camera;
  15. }
  16. public void DoProcess(ref TUCAM_FRAME frame)
  17. {
  18. if (m_state != FrameProcesserState.PLAY)
  19. {
  20. return;
  21. }
  22. int nSize = (int)(frame.uiImgSize + frame.usHeader);
  23. if (pBuf == null || pBuf.Length != nSize)
  24. {
  25. pBuf = new byte[nSize];
  26. }
  27. Marshal.Copy(frame.pBuffer, pBuf, 0, nSize);
  28. Buffer.BlockCopy(pBuf, (int)(frame.usHeader), pBuf, 0, (int)(frame.uiImgSize));
  29. Pause();
  30. //Console.WriteLine("返回全图buf");
  31. m_camera.CallbackDrawAll(pBuf, lockObj, frame.ucChannels);
  32. //Console.WriteLine("返回全图buf结束");
  33. }
  34. private int m_roiX = 0;
  35. private int m_roiY = 0;
  36. private int m_roiWidth = 0;
  37. private int m_roiHeight = 0;
  38. private int m_resolutionW = 0;
  39. private int m_resolutionH = 0;
  40. public void Start()
  41. {
  42. Console.WriteLine("获取当前ROI保存");
  43. m_camera.GetROI(ref m_roiX, ref m_roiY, ref m_roiWidth, ref m_roiHeight);
  44. Console.WriteLine("设置最大ROI------开始");
  45. m_camera.SetROIFull(ref m_resolutionW, ref m_resolutionH);
  46. Console.WriteLine("设置最大ROI------结束");
  47. m_state = FrameProcesserState.PLAY;
  48. }
  49. public int GetResolutionW()
  50. {
  51. return m_resolutionW;
  52. }
  53. public int GetResolutionH()
  54. {
  55. return m_resolutionH;
  56. }
  57. public void Stop()
  58. {
  59. if (m_state != FrameProcesserState.STOP)
  60. {
  61. Console.WriteLine("抓取全图------结束");
  62. Console.WriteLine("恢复原ROI-----开始");
  63. m_camera.SetROI(ref m_roiX, ref m_roiY, ref m_roiWidth, ref m_roiHeight);
  64. Console.WriteLine("恢复原ROI-----结束");
  65. m_state = FrameProcesserState.STOP;
  66. }
  67. }
  68. public void Pause()
  69. {
  70. m_state = FrameProcesserState.PAUSE;
  71. }
  72. public void Resume()
  73. {
  74. m_state = FrameProcesserState.PLAY;
  75. }
  76. public FrameProcesserState GetStatus()
  77. {
  78. return m_state;
  79. }
  80. }
  81. }