c#, скриншот, обрезка скриншота

Рейтинг: 0Ответов: 1Опубликовано: 25.03.2023
private void button4_Click(object sender, EventArgs e)
{
    Bitmap memoryImage;
    Graphics myGraphics = this.CreateGraphics();
    Size s = this.Size;
    memoryImage = new Bitmap(s.Width - 95, s.Height - 10, myGraphics);
    Graphics memoryGraphics = Graphics.FromImage(memoryImage);
    memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s);      
    memoryImage.Save("C:\\Users\\valav\\source\\repos\\Schedule v2.5\\printscreen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);              
}

Есть вот такой вот код, он делает скрин формы, как мне можно обрезать скрин, если есть не нужные детали слева/сверху

введите сюда описание изображения

Ответы

▲ 2Принят

Не нужно скришот, можно любой контрол отрисовать в битмап

private Bitmap DrawControlToBitmap(Control control)
{
    Bitmap bmp = new Bitmap(control.Width, control.Height);
    control.DrawToBitmap(bmp, new Rectangle(Point.Empty, control.Size));
    return bmp;
}

Для формы будет так

private void button4_Click(object sender, EventArgs e)
{
    Bitmap bmp = DrawControlToBitmap(this);
    bmp.Save("image.jpg", ImageFormat.Jpeg);
}

Если нужно не всю форму, а какую-то панель, просто вместо this передайте аргументом нужный контрол, например панель, в которой размещена нужная группа контролов.

Если ваши текстбоксы не в панели, а просто разбросаны по форме, создайте такую панель и перенесите контролы в неё.


Если не знакомы, то обязательно познакомьтесь с FlowLayoutPanel и TableLayoutPanel, они помогут с позиционированием.