Ejemplo n.º 1
0
        public static void Simplify(this RawOutline rgnOutline, float tolerance = 0.5f, bool heighQualityEnable = false)
        {
            int j = rgnOutline._contours.Count;

            for (int i = 0; i < j; ++i)
            {
                RawContour   contour          = rgnOutline._contours[i];
                List <Point> simplifiedPoints = new List <Point>(contour._xyCoords.Count);
                PixelFarm.CpuBlit.VertexProcessing.SimplificationHelpers.Simplify(
                    contour._xyCoords,
                    (p1, p2) => p1 == p2,
                    p => p.X,
                    p => p.Y,
                    simplifiedPoints,
                    tolerance,
                    heighQualityEnable);
                //replace current raw contour with the new one
#if DEBUG
                System.Diagnostics.Debug.WriteLine("simplification before:" + contour._xyCoords.Count + ",after" + simplifiedPoints.Count);
#endif

                //create a new raw contour,
                //but you can replace internal data of the old contour too,
                RawContour newContour = new RawContour();
                newContour.IsOutside = contour.IsOutside;
                foreach (Point point in simplifiedPoints)
                {
                    newContour.AddPoint(point);
                }
                rgnOutline._contours[i] = newContour;
            }
        }
Ejemplo n.º 2
0
        public void MakeVxs(VertexStore vxs)
        {
            int contourCount = _contours.Count;

            for (int i = 0; i < contourCount; ++i)
            {
                //each contour
                RawContour   contour  = _contours[i];
                List <Point> xyCoords = contour._xyCoords;
                int          count    = xyCoords.Count;

                if (count > 1)
                {
                    if (contour.IsOutside)
                    {
                        Point p = xyCoords[0];
                        vxs.AddMoveTo(p.X, p.Y);
                        for (int n = 1; n < count; ++n)
                        {
                            p = xyCoords[n];
                            vxs.AddLineTo(p.X, p.Y);
                        }
                        vxs.AddCloseFigure();
                    }
                    else
                    {
                        Point p = xyCoords[count - 1];
                        vxs.AddMoveTo(p.X, p.Y);
                        for (int n = count - 1; n >= 0; --n)
                        {
                            p = xyCoords[n];
                            vxs.AddLineTo(p.X, p.Y);
                        }
                        vxs.AddCloseFigure();
                    }
                }
            }
        }
Ejemplo n.º 3
0
 internal void BeginContour(bool outside)
 {
     _currentContour           = new RawContour();
     _currentContour.IsOutside = outside;
     _contours.Add(_currentContour);
 }