public IEnumerator<ITask> QueryFrameHandler(webcam.QueryFrame req) { yield return Arbiter.Choice(_scribblerPort.GetImage(req.Body.Format), delegate(brick.ImageResponse r) { try { var resp = new webcam.QueryFrameResponse() { Format = req.Body.Format, Size = new System.Drawing.Size(r.Width, r.Height), TimeStamp = r.Timestamp, }; if (req.Body.Format.Equals(MyroImageType.Color.Guid)) resp.Frame = convertColorToRGB(r.Data, r.Width, r.Height); else if (req.Body.Format.Equals(MyroImageType.Gray.Guid)) resp.Frame = r.Data; else if (req.Body.Format.Equals(MyroImageType.JpegColor.Guid) || req.Body.Format.Equals(MyroImageType.JpegColorFast.Guid)) resp.Frame = r.Data; else if (req.Body.Format.Equals(MyroImageType.JpegGray.Guid) || req.Body.Format.Equals(MyroImageType.JpegGrayFast.Guid)) resp.Frame = r.Data; else throw new Exception("FlukeCam does not know how to convert this image type"); req.ResponsePort.Post(resp); } catch (Exception e) { req.ResponsePort.Post(RSUtils.FaultOfException(e)); } }, delegate(Fault f) { req.ResponsePort.Post(f); }); }
// Handler for new frames from the camera IEnumerator<ITask> CameraUpdateFrameHandler(cam.UpdateFrame update) { cam.QueryFrameResponse frame = null; Fault fault = null; //cam.QueryFrame query = new cam.QueryFrame(); //_webCamPort.Post(query); yield return Arbiter.Choice( _webCamPort.QueryFrame(new cam.QueryFrameRequest()), // query.ResponsePort, delegate(cam.QueryFrameResponse success) { frame = success; }, delegate(Fault f) { fault = f; } ); if (fault != null) { LogError(null, "Failed to get frame from camera", fault); yield break; } Bitmap bmp = MakeBitmap(frame.Size.Width, frame.Size.Height, frame.Frame); DisplayImage(bmp); yield break; }