Exemple #1
0
        /// <inheritdoc />
        public Bitmap RotateImage(Bitmap original, RectangleCoords resultCoords, RotateDirection dir)
        {
            if (dir != RotateDirection.Left && dir != RotateDirection.Right)
            {
                // если добавляются новые направления поворота, вычисление границ поменяется
                throw new NotImplementedException();
            }

            // При повороте поменяется высота с шириной.
            if (!resultCoords.IntersectWith(original.Height, original.Width))
            {
                return(null);
            }
            resultCoords.Intersect(original.Height, original.Width);

            switch (dir)
            {
            case RotateDirection.Left:
                original.RotateFlip(RotateFlipType.Rotate270FlipNone);
                break;

            case RotateDirection.Right:
                original.RotateFlip(RotateFlipType.Rotate90FlipNone);
                break;
            }

            return(original.Clone(
                       new Rectangle(
                           resultCoords.X,
                           resultCoords.Y,
                           resultCoords.Width,
                           resultCoords.Height),
                       original.PixelFormat));
        }
Exemple #2
0
        /// <inheritdoc />
        public Bitmap FlipImage(Bitmap original, RectangleCoords resultCoords, FlipDirection dir)
        {
            // Так как при отражении итоговые размеры картинки не меняются, имеем право сразу узнать
            // координаты итоговой области.
            if (!resultCoords.IntersectWith(original.Width, original.Height))
            {
                return(null);
            }
            resultCoords.Intersect(original.Width, original.Height);

            switch (dir)
            {
            case FlipDirection.Horizontal:
                original.RotateFlip(RotateFlipType.RotateNoneFlipX);
                break;

            case FlipDirection.Vertical:
                original.RotateFlip(RotateFlipType.RotateNoneFlipY);
                break;

            default:
                throw new ArgumentException("Invalid Flip direction");
            }

            return(original.Clone(
                       new Rectangle(
                           resultCoords.X,
                           resultCoords.Y,
                           resultCoords.Width,
                           resultCoords.Height),
                       original.PixelFormat));
        }