Как я могу сохранить панель в моей форме как изображение? - PullRequest
4 голосов
/ 05 января 2012

У меня есть форма, которая имеет 2 панели.Я пытаюсь сохранить содержимое Panel2 как изображение.Я видел поток, в котором говорилось об использовании захвата экрана, но я больше не могу найти этот поток.Также читайте об использовании метода DrawToBitMap, но он взят из информации Visual Studio 2005, не уверен, является ли это наиболее актуальным или подходящим решением для этого.Так что вы порекомендуете для сохранения моего Panel2 в виде картинки, желательно в формате jpg?

ОБНОВЛЕНИЕ: я реализовал код, рекомендованный ниже для DrawToBitMap, но он сохраняет половину моей панели2 (левую половину, если эторазница).Поскольку он сохранил половину моей панели2, я умножил вызов ширины на '2', чтобы сохранить полную форму.Что-то странное и не имеет смысла для меня, так как ширина панели 2 должна составлять всю панель, а не ее половину?

//multiplies the width of panel2 call by 2 to make it save the full panel
Bitmap bmp = new Bitmap(splitContainer1.Panel2.Width * 2, splitContainer1.Panel2.Height);
splitContainer1.Panel2.DrawToBitmap(bmp, splitContainer1.Panel2.Bounds);
bmp.Save(@"C:\Test.bmp");

1 Ответ

7 голосов
/ 05 января 2012

Control.DrawToBitMap все еще поддерживается в .Net 4. Со следующими предостережениями.

Ссылка сверху:

  • Метод DrawToBitmap не поддерживаетсядля элементов управления ActiveX.Вы можете переопределить событие OnPrint и при необходимости предоставить собственную логику печати. ​​

Метод DrawToBitmap имеет следующие ограничения:

  • Исключение ArgumentException может генерироваться для больших растровых изображений.Максимально допустимый размер зависит от компьютера.
  • DrawToBitmap не поддерживает элементы управления Ink для операционной системы Windows XP Tablet PC Edition 2005.
  • DrawToBitmap не рисует дочерний TextBox, если свойство Visible объектаTextBox имеет значение false.
  • Элементы управления внутри контейнеров отображаются в обратном порядке.
  • DrawToBitmap не полностью функционально для RichTextBox;рисуется только граница растрового изображения.

Редактировать Добавлен пример и изображение:

Bitmap bmp = new Bitmap(panel1.Width,panel1.Height);
panel1.DrawToBitmap(bmp, panel1.Bounds);
bmp.Save(@"C:\Temp\Test.bmp");

...