static void xfer_XferNotify(object sender, SapXferNotifyEventArgs args) { // refresh view SapView View = args.Context as SapView; View.Show(); // refresh frame rate SapTransfer transfer = sender as SapTransfer; if (transfer.UpdateFrameRateStatistics()) { SapXferFrameRateInfo stats = transfer.FrameRateStatistics; float framerate = 0.0f; if (stats.IsLiveFrameRateAvailable) { framerate = stats.LiveFrameRate; } // check if frame rate is stalled if (stats.IsLiveFrameRateStalled) { Console.WriteLine("Live Frame rate is stalled."); } // update FPS only if the value changed by +/- 0.1 else if ((framerate > 0.0f) && (Math.Abs(lastFrameRate - framerate) > 0.1f)) { Console.WriteLine("Grabbing at {0} frames/sec", framerate); lastFrameRate = framerate; } } }
static void DestroysObjects(SapAcqDevice acq, SapBuffer buf, SapTransfer xfer, SapView view) { if (xfer != null && xfer.Initialized) { xfer.Destroy(); xfer.Dispose(); } if (acq != null && acq.Initialized) { acq.Destroy(); acq.Dispose(); } if (buf != null && buf.Initialized) { buf.Destroy(); buf.Dispose(); } if (view != null && view.Initialized) { view.Destroy(); view.Dispose(); } }
public HighFrameDlg(int Frame, int Frame_Onboard, SapTransfer pXfer) { InitializeComponent(); UpDown_Frame.Value = (decimal)Frame; if (pXfer != null) { UpDown_Frame_Onboard.Value = (decimal)Frame_Onboard; // Check if on-board buffers is supported int capIntBuffers = 0; if (pXfer.IsCapabilityAvailable(SapTransfer.Cap.NB_INT_BUFFERS)) { pXfer.GetCapability(SapTransfer.Cap.NB_INT_BUFFERS, out capIntBuffers); } if (!(capIntBuffers == (int)SapTransfer.Val.NB_INT_BUFFERS_AUTO)) { // This feature is not supported; disable control UpDown_Frame_Onboard.Value = 2; UpDown_Frame_Onboard.Enabled = false; } } else { UpDown_Frame_Onboard.Enabled = false; UpDown_Frame_Onboard.Hide(); label2.Hide(); } }
public void CreateTranfer(SapTransfer xfer, SapAcqDevice acqDevice, SapBuffer buf) { if (acqDevice == null || buf == null) { } xfer = new SapAcqDeviceToBuf(acqDevice, buf); }
static void DestroysObjects(SapAcquisition acq, SapAcqDevice camera, SapBuffer buf, SapTransfer xfer, SapView view) { if (xfer != null) { xfer.Destroy(); xfer.Dispose(); } if (camera != null) { camera.Destroy(); camera.Dispose(); } if (acq != null) { acq.Destroy(); acq.Dispose(); } if (buf != null) { buf.Destroy(); buf.Dispose(); } if (view != null) { view.Destroy(); view.Dispose(); } //Console.WriteLine("\nPress any key to terminate\n"); //Console.ReadKey(true); }
void xfer_XferNotify(object sender, SapXferNotifyEventArgs args) { // refresh view SapBuffer buffer = args.Context as SapBuffer; string filename = _save_dir + string.Format("Frame-{2}--Aux time-{0}--Host time-{1}.bmp", (args.AuxTimeStamp / 1e6).ToString(), (args.HostTimeStamp / 1e7).ToString(), (args.GenericParamValue0 - 1).ToString()); buffer.Save(filename, "-format bmp"); //buffer.Save("test.bmp", "-format bmp"); Console.WriteLine("Aux time: {0}, Host time: {1}, Frame: {2}", (args.AuxTimeStamp / 1e6).ToString(), (args.HostTimeStamp / 1e7).ToString(), args.GenericParamValue0.ToString()); SapTransfer transfer = sender as SapTransfer; if (transfer.UpdateFrameRateStatistics()) { SapXferFrameRateInfo stats = transfer.FrameRateStatistics; float framerate = 0.0f; if (stats.IsLiveFrameRateAvailable) { framerate = stats.LiveFrameRate; } // check if frame rate is stalled if (stats.IsLiveFrameRateStalled) { Console.WriteLine("Live Frame rate is stalled."); } } }
public bool CAM_connect() { try { //server名称 int ServerCount = SapManager.GetServerCount(); int ServerIndex = ServerCount - 1; string ServerName = SapManager.GetServerName(ServerIndex); //设备Index int CameraCount = SapManager.GetResourceCount(ServerName, SapManager.ResourceType.AcqDevice); int ResourceIndex = CameraCount - 1; //if (CameraCount == 0) MessageBox.Show("没有相机。"); loc = new SapLocation(ServerName, ResourceIndex); //配置文件 string ConfigFileName; string ConfigPath = Environment.GetEnvironmentVariable("SAPERADIR") + "\\camFiles\\User\\"; string[] ccffiles = Directory.GetFiles(ConfigPath, "*.ccf"); int configFileCount = ccffiles.Length; ConfigFileName = ccffiles[0]; //创建对象 if (SapManager.GetResourceCount(ServerName, SapManager.ResourceType.AcqDevice) > 0) { AcqDevice = new SapAcqDevice(loc, ConfigFileName); Buffers = new SapBuffer(1, AcqDevice, SapBuffer.MemoryType.ScatterGather); Xfer = new SapAcqDeviceToBuf(AcqDevice, Buffers); if (!AcqDevice.Create()) { return(false); } } if (!Buffers.Create()) { return(false); } if (!Xfer.Create()) { return(false); } ////ManagedBusManager busMgr = new ManagedBusManager(); ////uint numCameras = busMgr.GetNumOfCameras(); ////ManagedPGRGuid guid = busMgr.GetCameraFromIndex(0); ////m_camera = new ManagedCamera(); ////m_camera.Connect(guid); //m_camera.IsConnected() //CameraInfo camInfo = m_camera.GetCameraInfo(); } catch (FC2Exception ex)//要修改 { MessageBox.Show("相机连接失败。"); MessageBox.Show("Failed to load form successfully: " + ex.Message); return(false); } return(true); }
public BayerDlg(SapBayer pBayer, SapTransfer pXfer, ImageBox pImageWnd, SapProcessing pPro) { InitializeComponent(); m_pBayer = pBayer; m_pXfer = pXfer; m_pPro = pPro; m_pImageWnd = pImageWnd; }
public FlatFieldDlg(SapFlatField pFlatField, SapTransfer pXfer, SapBuffer pBuffer) { InitializeComponent(); m_pBuffer = pBuffer; m_pFlatField = pFlatField; m_pXfer = pXfer; m_RecommendedDark = 0; m_RecommendedBright = 0; }
public void InitDevice(MyAcquisitionParams acqParams = null) { _acqParams = acqParams; if (acqParams == null) { string[] args = new string[0]; if (!ExampleUtils.GetOptions(args, acqParams)) { Console.WriteLine("\nPress any key to terminate\n"); Console.ReadKey(true); return; } } _loc = new SapLocation(acqParams.ServerName, acqParams.ResourceIndex); if (SapManager.GetResourceCount(acqParams.ServerName, SapManager.ResourceType.AcqDevice) > 0) { _acqDevice = new SapAcqDevice(_loc, acqParams.ConfigFileName); _buffers = new SapBufferWithTrash(2, _acqDevice, SapBuffer.MemoryType.ScatterGather); _transfer = new SapAcqDeviceToBuf(_acqDevice, _buffers); // Create acquisition object if (!_acqDevice.Create()) { Console.WriteLine("Error during SapAcqDevice creation!\n"); DestroysObjects(null, _acqDevice, _buffers, _transfer, _view); return; } } _transfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; _transfer.XferNotify += new SapXferNotifyHandler(xfer_XferNotify); _transfer.XferNotifyContext = _buffers; // Create buffer object if (!_buffers.Create()) { Console.WriteLine("Error during SapBuffer creation!\n"); DestroysObjects(null, _acqDevice, _buffers, _transfer, _view); return; } // Create buffer object if (!_transfer.Create()) { Console.WriteLine("Error during SapTransfer creation!\n"); DestroysObjects(null, _acqDevice, _buffers, _transfer, _view); return; } _transfer.Grab(); }
/// <summary> /// 清空 采集、传输、缓存对象 /// </summary> public void SeparaInterface_DisposeObjects() { if (m_Xfer != null) { m_Xfer.Dispose(); m_Xfer = null; } if (m_Buffers != null) { m_Buffers.Dispose(); m_Buffers = null; } if (m_Acquisition != null) { m_Acquisition.Dispose(); m_Acquisition = null; } }
public ColorConvDlg(SapColorConversion pColorConv, SapTransfer pXfer, ImageBox pImageWnd, SapProcessing pPro) { InitializeComponent(); m_pColorConv = pColorConv; m_pXfer = pXfer; m_pPro = pPro; m_pImageWnd = pImageWnd; m_MethodDict = new Dictionary <SapColorConversion.ColorMethod, string>(); m_MethodDict.Add(SapColorConversion.ColorMethod.Method1, "Bayer Method 1"); m_MethodDict.Add(SapColorConversion.ColorMethod.Method2, "Bayer Method 2"); m_MethodDict.Add(SapColorConversion.ColorMethod.Method3, "Bayer Method 3"); m_MethodDict.Add(SapColorConversion.ColorMethod.Method4, "Bayer Method 4"); m_MethodDict.Add(SapColorConversion.ColorMethod.Method5, "Bayer Method 5"); m_MethodDict.Add(SapColorConversion.ColorMethod.Method6, "Bi-Color Method 6 (compatible with Basler Sprint)"); m_MethodDict.Add(SapColorConversion.ColorMethod.Method7, "Bi-Color Method 7 (compatible with TDALSA P4)"); }
public Boolean Create() { try { Params = new MyAcquisitionParams(); Location = new SapLocation(Params.ServerName, Params.ResourceIndex); Device = new SapAcqDevice(Location, Params.ConfigFileName); Buffers = new SapBufferWithTrash(DefaultBuffer, Device, SapBuffer.MemoryType.ScatterGather); Acquisition = new SapAcquisition(Location, Params.ConfigFileName); Transfer = new SapAcqToBuf(Acquisition, Buffers); } catch (SapException CreateException) { throw new Exception("CreateCamera failed!", CreateException); } finally { Console.WriteLine("Camera Created!"); } return(true); }
static bool AutoWhiteBalanceOperations(SapAcqDevice Camera, SapBuffer Buffers, SapTransfer Transfer) { Console.WriteLine("\nCalibration in progress ...........\n\n"); double coefBlueGain = MAX_COEF + 1; double coefGreenGain = MAX_COEF + 1; double coefRedGain = MAX_COEF + 1; int calibrationIteration = 0; // Create a new Bayer object SapBayer Bayer = new SapBayer(Buffers); SapFeature FeatureInfo = new SapFeature(Camera.Location); if (!FeatureInfo.Create()) { DestroysFeaturesAndBayer(FeatureInfo, Bayer); return(false); } // Create Bayer object if (!Bayer.Create()) { DestroysFeaturesAndBayer(FeatureInfo, Bayer); return(false); } // Initialize all Gain colors to 0 Camera.SetFeatureValue("GainBlue", 0); Camera.SetFeatureValue("GainGreen", 0); Camera.SetFeatureValue("GainRed", 0); // Choose alignment used Bayer.Align = SapBayer.AlignMode.RGGB; // Definition of ROI used for calibration int fixSelectedRoiLeft = 0; int fixSelectedRoiTop = 0; // Half buffer width int fixSelectedRoiWidth = Buffers.Width / 2; // Half buffer height int fixSelectedRoiHeight = Buffers.Height / 2; // Start loop for calibration until each coefficient is under 1.05 while (coefBlueGain > MAX_COEF || coefGreenGain > MAX_COEF || coefRedGain > MAX_COEF) { if (!Transfer.Snap()) { Console.WriteLine("Unable to acquire an image"); return(false); } Thread.Sleep(500); // Call WhiteBalance function if (!Bayer.WhiteBalance(Buffers, fixSelectedRoiLeft, fixSelectedRoiTop, fixSelectedRoiWidth, fixSelectedRoiHeight)) { break; } // New coefficients values are reused. coefBlueGain = Bayer.WBGain.Blue; coefGreenGain = Bayer.WBGain.Green; coefRedGain = Bayer.WBGain.Red; if (coefRedGain > MAX_COEF) { if (!ComputeGain("GainRed", Camera, FeatureInfo, coefRedGain)) { break; } } if (coefGreenGain > MAX_COEF) { if (!ComputeGain("GainGreen", Camera, FeatureInfo, coefGreenGain)) { break; } } if (coefBlueGain > MAX_COEF) { if (!ComputeGain("GainBlue", Camera, FeatureInfo, coefBlueGain)) { break; } } if (calibrationIteration >= MAX_CALIBRATION_ITERATION) { Console.WriteLine("Iterations for calibration are at the maximum.\n"); break; } calibrationIteration++; } // Uncomment this part if you want to get new values after calibration. /* * int gainBlue=0, gainRed=0, gainGreen=0; * Camera.GetFeatureValue("GainBlue", out gainBlue); * Camera.GetFeatureValue("GainRed", out gainRed); * Camera.GetFeatureValue("GainGreen", out gainGreen); */ DestroysFeaturesAndBayer(FeatureInfo, Bayer); Console.WriteLine("\nCalibration finished ...........\n\n"); return(true); }
//static void Main(string[] args) public static void Done() { SapAcqDevice camera = null; SapView view = null; SapTransfer transfer = null; SapBuffer buffer = null; Console.WriteLine("Sapera Console GigE Cameras AutoWhiteBalance Example (C# version)\n"); MyAcquisitionParams acqParams = new MyAcquisitionParams(); /*if (!GetOptions(args, acqParams)) * { * Console.WriteLine("\nPress any key to terminate\n"); * Console.ReadKey(); * return; * }*/ SapLocation location = new SapLocation(acqParams.ServerName, acqParams.ResourceIndex); camera = new SapAcqDevice(location, acqParams.ConfigFileName); buffer = new SapBufferWithTrash(2, camera, SapBuffer.MemoryType.ScatterGather); transfer = new SapAcqDeviceToBuf(camera, buffer); view = new SapView(buffer); // End of frame event transfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; transfer.XferNotify += new SapXferNotifyHandler(Xfer_XferNotify); transfer.XferNotifyContext = view; if (!camera.Create()) { Console.WriteLine("Error during SapAcquisition creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Monochrome models are not supported for White Balance Calibration. int colorType = 0; bool isAvailable = false; if (isAvailable = camera.IsFeatureAvailable("ColorType")) { if (camera.GetFeatureValue("ColorType", out colorType)) { if (colorType == 0) { Console.WriteLine("This camera model does not support Auto White Balance calibration.\n"); DestroysObjects(camera, buffer, transfer, view); return; } } } //activate feature only if camera has 3 separate gains Boolean bRedGain = false; Boolean bGreenGain = false; Boolean bBlueGain = false; bRedGain = camera.IsFeatureAvailable("GainRed"); bGreenGain = camera.IsFeatureAvailable("GainGreen"); bBlueGain = camera.IsFeatureAvailable("GainBlue"); if (!bRedGain && !bGreenGain && !bBlueGain) { Console.WriteLine("This camera model does not support Auto White Balance calibration.\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Create buffer object if (!buffer.Create()) { Console.WriteLine("Error during SapBuffer creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Create transfer object if (!transfer.Create()) { Console.WriteLine("Error during SapTransfer creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Create view object if (!view.Create()) { Console.WriteLine("Error during SapView creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } Console.WriteLine("Press any key to start Grab. Press 'q' to quit."); ConsoleKeyInfo info = Console.ReadKey(true); char key = info.KeyChar; if (key != 0) { if (key == 'q') { DestroysObjects(camera, buffer, transfer, view); return; } } // Start continous grab transfer.Grab(); Console.WriteLine("Press any key to stop grab\n"); Console.ReadKey(); // Stop grab transfer.Freeze(); transfer.Wait(5000); Console.WriteLine("Press any key to start Auto White Balance calibration. Press 'q' to quit.\n"); info = Console.ReadKey(true); key = info.KeyChar; if (key != 0) { if (key == 'q') { DestroysObjects(camera, buffer, transfer, view); return; } } int oldPixelFormat = 0; isAvailable = false; if (isAvailable = camera.IsFeatureAvailable("PixelFormat")) { camera.GetFeatureValue("PixelFormat", out oldPixelFormat); } else { Console.WriteLine("This camera model does not support Auto White Balance calibration.\n"); DestroysObjects(camera, buffer, transfer, view); return; } if (oldPixelFormat != GVSP_PIX_BAYRG8) { // Camera Pixel Format defined is not Raw Bayer. // We change the value DestroysObjects(null, buffer, transfer, view); camera.SetFeatureValue("PixelFormat", GVSP_PIX_BAYRG8); // Instantiation of new buffer object buffer = new SapBufferWithTrash(2, camera, SapBuffer.MemoryType.ScatterGather); // Instantiation of new view object view = new SapView(buffer); // Instantiation of new transfer object transfer = new SapAcqDeviceToBuf(camera, buffer); // End of frame event transfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; transfer.XferNotify += new SapXferNotifyHandler(Xfer_XferNotify); transfer.XferNotifyContext = view; if (!camera.Create()) { Console.WriteLine("Error during SapAcquisition creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Create buffer object if (!buffer.Create()) { Console.WriteLine("Error during SapBuffer creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Create transfer object if (!transfer.Create()) { Console.WriteLine("Error during SapTransfer creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Create view object if (!view.Create()) { Console.WriteLine("Error during SapView creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } } if (!AutoWhiteBalanceOperations(camera, buffer, transfer)) { Console.WriteLine("Auto WhiteBalamce has failed"); DestroysObjects(camera, buffer, transfer, view); return; } if (oldPixelFormat != GVSP_PIX_BAYRG8) { // Camera Pixel Format was changed for Raw Bayer. // We set the original value. DestroysObjects(null, buffer, transfer, view); camera.SetFeatureValue("PixelFormat", oldPixelFormat); // Instantiation of new buffer object buffer = new SapBufferWithTrash(2, camera, SapBuffer.MemoryType.ScatterGather); // Instantiation of new view object view = new SapView(buffer); // Instantiation of new transfer object transfer = new SapAcqDeviceToBuf(camera, buffer); // End of frame event transfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; transfer.XferNotify += new SapXferNotifyHandler(Xfer_XferNotify); transfer.XferNotifyContext = view; // Create buffer object if (!buffer.Create()) { Console.WriteLine("Error during SapBuffer creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Create transfer object if (!transfer.Create()) { Console.WriteLine("Error during SapTransfer creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } // Create view object if (!view.Create()) { Console.WriteLine("Error during SapView creation!\n"); DestroysObjects(camera, buffer, transfer, view); return; } } Console.WriteLine("Press any key to start Grab. Press 'q' to quit.\n"); info = Console.ReadKey(true); key = info.KeyChar; if (key != 0) { if (key == 'q') { DestroysObjects(camera, buffer, transfer, view); return; } } // Start continous grab transfer.Grab(); Console.WriteLine("Press any key to stop grab\n"); Console.ReadKey(); // Stop grab transfer.Freeze(); transfer.Wait(5000); DestroysObjects(camera, buffer, transfer, view); location.Dispose(); }
static void Main(string[] args) { SapAcquisition Acq = null; SapAcqDevice AcqDevice = null; SapBuffer Buffers = null; SapTransfer Xfer = null; SapView View = null; //Console.WriteLine("Sapera Console Grab Example (C# version)\n"); MyAcquisitionParams acqParams = new MyAcquisitionParams(); // Call GetOptions to determine which acquisition device to use and which config // file (CCF) should be loaded to configure it. if (!GetOptions(args, acqParams)) { Console.WriteLine("\nPress any key to terminate\n"); Console.ReadKey(true); return; } SapLocation loc = new SapLocation(acqParams.ServerName, acqParams.ResourceIndex); if (SapManager.GetResourceCount(acqParams.ServerName, SapManager.ResourceType.Acq) > 0) { Acq = new SapAcquisition(loc, acqParams.ConfigFileName); Buffers = new SapBuffer(1, Acq, SapBuffer.MemoryType.ScatterGather); Xfer = new SapAcqToBuf(Acq, Buffers); // Create acquisition object if (!Acq.Create()) { Console.WriteLine("Error during SapAcquisition creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } } if (SapManager.GetResourceCount(acqParams.ServerName, SapManager.ResourceType.AcqDevice) > 0) { AcqDevice = new SapAcqDevice(loc, acqParams.ConfigFileName); Buffers = new SapBuffer(1, AcqDevice, SapBuffer.MemoryType.ScatterGather); Xfer = new SapAcqDeviceToBuf(AcqDevice, Buffers); // Create acquisition object if (!AcqDevice.Create()) { Console.WriteLine("Error during SapAcqDevice creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } } View = new SapView(Buffers); // End of frame event Xfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; Xfer.XferNotify += new SapXferNotifyHandler(xfer_XferNotify); Xfer.XferNotifyContext = View; //Console.WriteLine("gggggwhat is new line"); // Create buffer object if (!Buffers.Create()) { Console.WriteLine("Error during SapBuffer creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } // Create buffer object if (!Xfer.Create()) { Console.WriteLine("Error during SapTransfer creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } // Create buffer object if (!View.Create()) { Console.WriteLine("Error during SapView creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } // Grab as fast as possible, wait for a key to be pressed, if it's p, // write the file, otherwise if it's q exit the program. Designed to be run by and monitored // through a pipe Boolean stop_snap = false; int curr_code = 0; string new_cmd = ""; while (stop_snap == false) { Console.WriteLine("Press a key to trigger snap"); new_cmd = Console.ReadLine(); Xfer.Snap(); Console.WriteLine("Press a key to trigger save"); new_cmd = Console.ReadLine(); View.Buffer.Save("test.raw", "-format raw"); var dsb = new StringBuilder("frame: " + frame_count); Console.WriteLine(dsb); frame_count = frame_count + 1; Console.WriteLine("File saved, Press a key to repeat, q to quit:"); new_cmd = Console.ReadLine(); if (new_cmd == "q") { stop_snap = true; } //if (curr_code == 113) { stop_snap = true; } } DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); loc.Dispose(); }
static void DestroysObjects(SapAcquisition acq, SapAcqDevice camera, SapBuffer buf, SapTransfer xfer, SapView view) { if (xfer != null) { xfer.Destroy(); xfer.Dispose(); } if (camera != null) { camera.Destroy(); camera.Dispose(); } if (acq != null) { acq.Destroy(); acq.Dispose(); } if (buf != null) { buf.Destroy(); buf.Dispose(); } if (view != null) { view.Destroy(); view.Dispose(); } //Console.WriteLine("\nPress any key to terminate\n"); //Console.ReadKey(true); }
public AbortDlg(SapTransfer pXfer) { InitializeComponent(); m_pXfer = pXfer; timer.Enabled = true; }
static void Main(string[] args) { SapAcquisition Acq = null; SapAcqDevice AcqDevice = null; SapBuffer Buffers = null; SapTransfer Xfer = null; SapView View = null; Console.WriteLine("Sapera Console Grab Example (C# version)\n"); MyAcquisitionParams acqParams = new MyAcquisitionParams(); // Call GetOptions to determine which acquisition device to use and which config // file (CCF) should be loaded to configure it. if (!GetOptions(args, acqParams)) { Console.WriteLine("\nPress any key to terminate\n"); Console.ReadKey(true); return; } SapLocation loc = new SapLocation(acqParams.ServerName, acqParams.ResourceIndex); if (SapManager.GetResourceCount(acqParams.ServerName, SapManager.ResourceType.Acq) > 0) { Acq = new SapAcquisition(loc, acqParams.ConfigFileName); Buffers = new SapBufferWithTrash(2, Acq, SapBuffer.MemoryType.ScatterGather); Xfer = new SapAcqToBuf(Acq, Buffers); // Create acquisition object if (!Acq.Create()) { Console.WriteLine("Error during SapAcquisition creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } Acq.EnableEvent(SapAcquisition.AcqEventType.StartOfFrame); } else if (SapManager.GetResourceCount(acqParams.ServerName, SapManager.ResourceType.AcqDevice) > 0) { AcqDevice = new SapAcqDevice(loc, acqParams.ConfigFileName); Buffers = new SapBufferWithTrash(2, AcqDevice, SapBuffer.MemoryType.ScatterGather); Xfer = new SapAcqDeviceToBuf(AcqDevice, Buffers); // Create acquisition object if (!AcqDevice.Create()) { Console.WriteLine("Error during SapAcqDevice creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } } View = new SapView(Buffers); // End of frame event Xfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; Xfer.XferNotify += new SapXferNotifyHandler(xfer_XferNotify); Xfer.XferNotifyContext = View; // Create buffer object if (!Buffers.Create()) { Console.WriteLine("Error during SapBuffer creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } // Create buffer object if (!Xfer.Create()) { Console.WriteLine("Error during SapTransfer creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } // Create buffer object if (!View.Create()) { Console.WriteLine("Error during SapView creation!\n"); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); return; } Xfer.Grab(); Console.WriteLine("\n\nGrab started, press a key to freeze"); Console.ReadKey(true); Xfer.Freeze(); Xfer.Wait(1000); DestroysObjects(Acq, AcqDevice, Buffers, Xfer, View); loc.Dispose(); }
public override bool DoInit() { int DalsaCardCount = SapManager.GetServerCount(); //获取图像采集卡的数量 for (int i = 0; i < DalsaCardCount; i++) { bool bAcq = false; bool bAcqDevice = false; if (SapManager.GetResourceCount(i, SapManager.ResourceType.Acq) > 0) { bAcq = true; //卡的数量大于0 } if (SapManager.GetResourceCount(i, SapManager.ResourceType.AcqDevice) > 0) { bAcqDevice = true; //相机数量大于0 } if (bAcq) { string ServerName = SapManager.GetServerName(i); if (this.myCamPara.ServerName == ServerName) { bServerFound = true; //发现图像采集卡 string DeviceName = SapManager.GetResourceName(ServerName, SapManager.ResourceType.Acq, 0); if (this.myCamPara.DeviceName != DeviceName) { Logger.PopError("采集卡上找到的相机名字和campara里的名字不同"); return(false); } } } else if (bAcqDevice) //没有采集卡,相机直接传给电脑 { CameraIsFound = true; string serverName = SapManager.GetServerName(i); } } if (!bServerFound && !CameraIsFound) //至少需要一张采集卡,或者相机装置 { m_Buffers = new SapBuffer(); return(false); } else { SapLocation location = new SapLocation(this.myCamPara.ServerName, 0); if (SapManager.GetResourceCount(this.myCamPara.ServerName, SapManager.ResourceType.Acq) > 0) { m_Acquisition = new SapAcquisition(location, System.Windows.Forms.Application.StartupPath + "\\ccf\\" + this.myCamPara.CcfPath + ".ccf"); //m_AcqDevice = new SapAcqDevice(location, System.Windows.Forms.Application.StartupPath + "\\ccf\\" + this.myCamPara.CcfPath + ".ccf"); if (SapBuffer.IsBufferTypeSupported(location, SapBuffer.MemoryType.ScatterGather)) { m_Buffers = new SapBuffer(m_RingBufCount, m_Acquisition, SapBuffer.MemoryType.ScatterGather); //buffer里有10段内存,用来循环存储从相机采集的图片 } else { m_Buffers = new SapBufferWithTrash(m_RingBufCount, m_Acquisition, SapBuffer.MemoryType.ScatterGatherPhysical); } m_Xfer = new SapAcqToBuf(m_Acquisition, m_Buffers); m_Xfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; m_Xfer.XferNotify += new SapXferNotifyHandler(AcqCallback1); m_Xfer.XferNotifyContext = this; // event for signal status if (!SeparaInterface_CreateObjects()) { Logger.PopError(" 创建 相关的采集、传输、缓存对象失败"); this.SeparaInterface_DisposeObjects(); return(false); } this.FrameImgHei = this.SeparaInterface_GetImageHeight(); this.FrameImgWid = this.SeparaInterface_GetImageWidth(); return(true); } } return(false); }
public void CreatEndSqObject(SapBuffer buf, SapTransfer xfer, SapView view) { buf.Create(); xfer.Create(); //view.Create(); }