Esempio n. 1
0
        private void UpdatePlateImage([CanBeNull] PlateMetadata plate = null, [CanBeNull] Decision decision = null)
        {
            try
            {
                var coordinates = _image.PlateCoordinates;
                if (coordinates != null && coordinates.Any())
                {
                    if (decision != null)
                    {
                        var rect = coordinates.ToBoundedRectangle();
                        _imgPlate.FooterText = $"{decision.Plate.Number} [{decision.Plate.Stencil}], {rect}";
                        rect.Inflate(15, 6);
                        rect.Intersect(new Rectangle(Point.Empty, _image.ImageSize));
                        _image.Matrix.CopyTo(_imgPlate.Matrix, rect);
                        if (_imgPlate.Matrix is Matrix m)
                        {
                            Enhancement.ContrastStretch(m);
                        }
                        _imgPlate.Invalidate();

                        var offsetX = -rect.X;
                        var offsetY = -rect.Y;
                        _imagePlateWidget.PlateCoords = coordinates.Select(c =>
                        {
                            c.Offset(offsetX, offsetY);
                            return(c);
                        }).ToArray();

                        var symbols = new List <WidgetSymbol>();
                        foreach (var symbol in decision.Symbols)
                        {
                            var ws = new WidgetSymbol()
                            {
                                Char   = symbol.Char.ToString(),
                                Bounds = symbol.Bounds.Offset(offsetX, offsetY).ToRect(),
                            };
                            symbols.Add(ws);
                        }
                        _imagePlateWidget.Symbols   = symbols.ToArray();
                        _imagePlateWidget.IsVisible = true;
                    }
                    else
                    {
                        var rect = coordinates.ToBoundedRectangle();
                        if (plate != null)
                        {
                            _imgPlate.FooterText = $"{plate.Number} [{plate.Stencil}], {rect}";
                        }
                        rect.Inflate(15, 6);
                        rect.Intersect(new Rectangle(Point.Empty, _image.ImageSize));
                        _image.Matrix.CopyTo(_imgPlate.Matrix, rect);
                        if (_imgPlate.Matrix is Matrix m)
                        {
                            Enhancement.ContrastStretch(m);
                        }
                        _imgPlate.Invalidate();

                        var offsetX = -rect.X;
                        var offsetY = -rect.Y;
                        _imagePlateWidget.PlateCoords = coordinates.Select(c =>
                        {
                            c.Offset(offsetX, offsetY);
                            return(c);
                        }).ToArray();
                        _imagePlateWidget.Symbols   = default;
                        _imagePlateWidget.IsVisible = true;
                    }
                }
                else
                {
                    _imgPlate.FooterText = string.Empty;
                }
            }
            catch (Exception exc) when(!exc.IsCritical())
            {
                Log.Error(exc.Message, exc);
            }
        }