Exemple #1
0
        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;
        }