Ejemplo n.º 1
0
        //private int _radius;
        //public int Radius
        //{
        //	get { return _radius; }
        //	set
        //	{
        //		if (_radius != value)
        //		{
        //			if (_resultBitmap != null)
        //			{
        //				_resultBitmap.Dispose();
        //				_resultBitmap = null;
        //			}
        //			_radius = value;
        //		}
        //	}
        //}

        //private Pen _pen;
        //public override Pen Pen
        //{
        //	get { return _pen; }
        //	protected set
        //	{
        //		if (_pen != null && _pen.Color != value.Color)
        //		{
        //			if (_resultBitmap != null)
        //			{
        //				_resultBitmap.Dispose();
        //				_resultBitmap = null;
        //			}
        //		}
        //		_pen = value;
        //	}
        //}

        //private bool draw(int x, int y)
        //{
        //	int byteOffset = y * _stride + x * 4;
        //	if (Math.Abs((_rgbValues[byteOffset + 2] + _rgbValues[byteOffset + 1] + _rgbValues[byteOffset])
        //		- (_currentR + _currentG + _currentB)) <= Radius)
        //	{
        //		_rgbValues[byteOffset + 2] = Pen.Color.R;
        //		_rgbValues[byteOffset + 1] = Pen.Color.G;
        //		_rgbValues[byteOffset] = Pen.Color.B;
        //		return true;
        //	}

        //	return false;
        //}

        //private void recursivelyDrawPoint(List<Tuple<int, int>> checkedPoints, int x, int y)
        //{
        //	if (checkedPoints.Any(p => p.Item1 == x && p.Item2 == y) || checkedPoints.Count > 10000)
        //		return;

        //	checkedPoints.Add(new Tuple<int, int>(x, y));

        //	if (!draw(x, y))
        //		return;

        //	recursivelyDrawPoint(checkedPoints, x + 1, y);
        //	recursivelyDrawPoint(checkedPoints, x + 1, y + 1);
        //	recursivelyDrawPoint(checkedPoints, x, y + 1);
        //	recursivelyDrawPoint(checkedPoints, x - 1, y + 1);
        //	recursivelyDrawPoint(checkedPoints, x - 1, y);
        //	recursivelyDrawPoint(checkedPoints, x - 1, y - 1);
        //	recursivelyDrawPoint(checkedPoints, x, y - 1);
        //	recursivelyDrawPoint(checkedPoints, x + 1, y - 1);
        //}

        public override void Draw()
        {
            if (_resultBitmap == null)
            {
                if (Radius < 1)
                {
                    Radius = 1;
                }

                using (var bmp = new Bitmap(CurrentImage))
                {
                    _resultBitmap = new Bitmap(bmp);
                    Imaging.FloodFill(_resultBitmap, relativeStartPoint.X, relativeStartPoint.Y, relativePen.Color, Radius);
                }
            }

            _graphics.DrawImage(_resultBitmap, 0, 0, _resultBitmap.Width, _resultBitmap.Height);
        }