Volga_ Ответов: 1

Как захватить клиент формы в файл изображения в C#?


Всем привет,
У меня есть проблема: мне нужно захватить форму в файл изображения в C#. Это мой код для этого, но он не должен работать правильно, я хочу получить только клиентскую область, а не другую область формы:
public void GhiImage()
        {
            try
            {
                SaveFileDialog SvDialog = new SaveFileDialog();
                SvDialog.Title = "Ghi thanh file anh!";
                SvDialog.DefaultExt = "bmp";
                SvDialog.Filter = "Ảnh bitmap (*.bmp)|*.bmp |Ảnh jpg (*.jpg)|*.jpg";
                SvDialog.FilterIndex = 1;

                if (SvDialog.ShowDialog() == DialogResult.OK)
                {
                    Graphics g = this.CreateGraphics();
                    Bitmap bmp = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
                    this.DrawToBitmap(bmp, this.ClientRectangle);
                    bmp.Save(SvDialog.FileName);
                    bmp.Dispose();
                }
            }
            catch
            {
            }
        }


Он содержит всю форму (границу и клиентскую область). Теперь помогите мне исправить мой код, чтобы он работал точно. Спасибо вам всем.

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

Я закодировал его, но он работал неправильно!

1 Ответов

Рейтинг:
0

phil.o

Обе эти линии:

Bitmap bmp = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
this.DrawToBitmap(bmp, this.ClientRectangle);
позволяет указать, какую часть клиентской области вы хотите нарисовать на своем растровом изображении. Здесь он делает именно то, что вы просили: он рисует всю клиентскую зону. Если вам нужна только его часть, вы должны определить прямоугольник, ограничивающий эту часть, и использовать этот прямоугольник вместо ClientRectangle.


Volga_

Спасибо за стрижку. Но я хочу получить только клиентскую область, мой код выше получает всю клиентскую область и пограничную область формы. Я не могу сделать больше для этой проблемы, помогите мне с кодом. Спасибо.

phil.o

Вы знаете мото "дайте человеку рыбу и т. д."? Когда вы говорите, что не можете сделать больше, я на самом деле читаю, что не хочу понимать, просто предоставьте мне готовое решение.
Пожалуйста, взгляните на Прямоугольник.Способ надувания [^], что должно позволить вам адаптировать размеры прямоугольника к вашим потребностям.

Volga_

Спасибо. Может быть, мой английский очень плох, и вы не понимаете моей проблемы. Спасибо снова.

phil.o

Я понял вашу проблему: вы хотите убрать границы с изображения. Проблема в том, что я понятия не имею о размерах этих границ. Так как же мне быть более резким? Это зависит от вас ты чтобы использовать метод, который я дал вам ссылку, чтобы вы могли найти способ достичь своей цели.
Однако я не Благодарю вас за то, что вы понизили голос.

Volga_

Из-за вашего скрытого ответа я не понял всего и проголосовал против вашего ответа. Мне очень жаль вас, я новичок в C#, я инженер-механик, а не IT-инженер, так что мне все сложно. Я буду изучать вещи, которые вы мне прислали, и надеюсь, что это пойдет мне на пользу. Задачу о размерах этих границ я продумал и вычислил: сверху=20, снизу=8, слева=8 и справа=8. Но я не понимаю, почему выше мой код не должен был работать так, как я хочу. Если вы можете, вы объясняете с помощью кода. Я уже не тот человек, что в фильме "дай человеку рыбу...", который ты цитировал.