public override string GetSummaryAsText(CameraSummary summary) { string result = ""; string alias = summary.Alias; SpecificInfo info = summary.Specific as SpecificInfo; try { if (info != null && info.StreamFormat != null && info.CameraProperties.ContainsKey("width") && info.CameraProperties.ContainsKey("height") && info.CameraProperties.ContainsKey("framerate")) { string format = info.StreamFormat; int width = int.Parse(info.CameraProperties["width"].CurrentValue, CultureInfo.InvariantCulture); int height = int.Parse(info.CameraProperties["height"].CurrentValue, CultureInfo.InvariantCulture); double framerate = 0; // The configured framerate is always between 0 and 100 000, but the actual resulting framerate can be obtained. if (info.Handle != null && info.Handle.IsValid) { framerate = PylonHelper.GetResultingFramerate(info.Handle); } else { framerate = double.Parse(info.CameraProperties["framerate"].CurrentValue, CultureInfo.InvariantCulture); } result = string.Format("{0} - {1}×{2} @ {3:0.##} fps ({4}).", alias, width, height, framerate, format); } else { result = string.Format("{0}", alias); } } catch { result = string.Format("{0}", alias); } return(result); }
private void UpdateResultingFramerate() { float resultingFramerate = PylonHelper.GetResultingFramerate(deviceHandle); lblResultingFramerateValue.Text = string.Format("{0:0.##}", resultingFramerate); bool discrepancy = false; if (cameraProperties.ContainsKey("framerate") && cameraProperties["framerate"].Supported) { float framerate; bool parsed = float.TryParse(cameraProperties["framerate"].CurrentValue, NumberStyles.Any, CultureInfo.InvariantCulture, out framerate); if (parsed && Math.Abs(framerate - resultingFramerate) > 1) { discrepancy = true; } } lblResultingFramerateValue.ForeColor = discrepancy ? Color.Red : Color.Black; }
/// <summary> /// Configure device and report frame format that will be used during streaming. /// This method must return a proper ImageDescriptor so we can pre-allocate buffers. /// </summary> public ImageDescriptor Prepare() { Open(); if (deviceHandle == null || !deviceHandle.IsValid) { return(ImageDescriptor.Invalid); } firstOpen = false; // Get the configured framerate for recording support. resultingFramerate = PylonHelper.GetResultingFramerate(deviceHandle); SpecificInfo specific = summary.Specific as SpecificInfo; string streamFormatSymbol = specific.StreamFormat; bool hasWidth = Pylon.DeviceFeatureIsReadable(deviceHandle, "Width"); bool hasHeight = Pylon.DeviceFeatureIsReadable(deviceHandle, "Height"); bool hasPixelFormat = Pylon.DeviceFeatureIsReadable(deviceHandle, "PixelFormat"); bool canComputeImageDescriptor = hasWidth && hasHeight && hasPixelFormat; if (!canComputeImageDescriptor) { return(ImageDescriptor.Invalid); } int width = (int)Pylon.DeviceGetIntegerFeature(deviceHandle, "Width"); int height = (int)Pylon.DeviceGetIntegerFeature(deviceHandle, "Height"); string pixelFormat = Pylon.DeviceFeatureToString(deviceHandle, "PixelFormat"); EPylonPixelType pixelType = Pylon.PixelTypeFromString(pixelFormat); if (pixelType == EPylonPixelType.PixelType_Undefined) { return(ImageDescriptor.Invalid); } // Note: the image provider will perform the Bayer conversion itself and only output two formats. // - Y800 for anything monochrome. // - RGB32 for anything color. imageProvider.SetDebayering(specific.Bayer8Conversion); bool isBayer = Pylon.IsBayer(pixelType); bool isBayer8 = PylonHelper.IsBayer8(pixelType); bool bayerColor = (isBayer && !isBayer8) || (isBayer8 && specific.Bayer8Conversion == Bayer8Conversion.Color); bool color = !Pylon.IsMono(pixelType) || bayerColor; ImageFormat format = color ? ImageFormat.RGB32 : ImageFormat.Y800; finishline.Prepare(width, height, format, resultingFramerate); if (finishline.Enabled) { height = finishline.Height; resultingFramerate = finishline.ResultingFramerate; } int bufferSize = ImageFormatHelper.ComputeBufferSize(width, height, format); bool topDown = true; return(new ImageDescriptor(format, width, height, topDown, bufferSize)); }