srilekhamenon Ответов: 0

Как обрезать изображение в формате круг/эллипс


я хочу обрезать изображение в формате круг/эллипс

в настоящее время он обрезает изображение в прямоугольном формате

я пытаюсь обрезать изображение перетаскиванием мыши

Что я уже пробовал:

public Image ScreenShot;
       
        private Image partIamge;
        internal PictureBox picScreenImg;

        private Point mouseDownAt;
        private Point mouseIsAt;


        private bool isMouseDown = false;

        private Color backgroundColor = Color.DarkGray;
        private int backgroundAlpha = 150;
        private Color outlineColor = Color.SkyBlue;
        private int outlineWidth = 1;





private void OnPaint(object sender, PaintEventArgs e)
        {
            SolidBrush opaqueWhiteBrush = new SolidBrush(Color.FromArgb(backgroundAlpha, backgroundColor.R, backgroundColor.G, backgroundColor.B));
            e.Graphics.FillRectangle(opaqueWhiteBrush, 0, 0, picScreenImg.Width, picScreenImg.Height);

            if (isMouseDown)
            {
                Rectangle pos = getMouseMoveRect;
                
                    //e.Graphics.DrawEllipse(new Pen(outlineColor, outlineWidth), new Rectangle(0, 0, pos.Width + outlineWidth, pos.Height + outlineWidth));
                    e.Graphics.DrawEllipse(new Pen(outlineColor, outlineWidth), pos);
                    e.Graphics.DrawImage(partIamge, pos.Location);               

                pnlButtonStrip.Visible = false;
            }
        }

 private void OnMouseDown(object sender, MouseEventArgs e)
        {
            //if (e.Button == MouseButtons.Right && !isMouseDown)
            //{
            //    Application.Exit();
            //}
            //else 
            if (e.Button == MouseButtons.Left)
            {
                mouseDownAt = e.Location;
                Cursor.Position = new Point(e.Location.X + 1, e.Location.Y + 1);
                mouseIsAt = new Point(e.Location.X + 1, e.Location.Y + 1);
                partIamge = ((Bitmap)picScreenImg.Image).Clone(getMouseMoveRect, picScreenImg.Image.PixelFormat);
                isMouseDown = true;
                picScreenImg.Refresh();
            }
        }

        private void OnMouseMove(object sender, MouseEventArgs e)
        {
            if (isMouseDown)
            {
                mouseIsAt = e.Location;
                pnlButtonStrip.Location = e.Location;
                Rectangle rect = getMouseMoveRect;
                if (rect.Width != 0 && rect.Height != 0)
                {                    
                    partIamge = ((Bitmap)picScreenImg.Image).Clone(rect, picScreenImg.Image.PixelFormat);
                    picScreenImg.Refresh();
                }
            }
            // show the mouse position


        }

        private void OnMouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                bool hasMoved = false;

                if (isMouseDown)
                {
                    hasMoved = true;
                    isMouseDown = false;
                }

                if (partIamge.Width < 100 || partIamge.Height < 100)
                {
                    picScreenImg.Refresh();
                    return;
                }
                

                pnlButtonStrip.Size = new Size(partIamge.Width, pnlButtonStrip.Height);
                pnlButtonStrip.Location = new Point(pnlButtonStrip.Location.X - pnlButtonStrip.Width, pnlButtonStrip.Location.Y + 5);
                pnlButtonStrip.Visible = true;
            }
      }



private Rectangle getMouseMoveRect
        {
            get
            {
                int x = 0;
                int y = 0;
                int width = 0;
                int height = 0;

                if (mouseIsAt.X > mouseDownAt.X)
                {
                    x = mouseDownAt.X;
                    width = mouseIsAt.X - mouseDownAt.X;
                }
                else
                {
                    x = mouseIsAt.X;
                    width = mouseDownAt.X - mouseIsAt.X;
                }

                if (mouseIsAt.Y > mouseDownAt.Y)
                {
                    y = mouseDownAt.Y;
                    height = mouseIsAt.Y - mouseDownAt.Y;
                }
                else
                {
                    y = mouseIsAt.Y;
                    height = mouseDownAt.Y - mouseIsAt.Y;
                }
                //x = 0;
                //y = 0;
                
                return new Rectangle(x, y, width, height);
            }
        }

0 Ответов