Как получить изображение элемента управления, формы или клиентской области формы в C#

В этом примере показано, как получить изображение элемента управления. Поскольку форма является типом управления, тот же метод позволяет получить образ формы.

Метод управления DrawToBitmap элемента управления управляет рисованием в растровое изображение. Метод GetControlImage, показанный ниже, использует DrawToBitmap, чтобы вернуть растровое изображение, содержащее изображение элемента управления.

Метод GetFormImageWithoutBorders, показанный в следующем коде, получает изображение формы без его границ или заголовка.

Этот метод вызывает GetControlImage, чтобы получить изображение всей формы. Затем он использует метод PointToScreen формы, чтобы увидеть, где находится верхний левый угол его клиентской области в координатах экрана. Разница между этой точкой и верхним левым углом формы указывает вам, как далеко область клиента формы вставляется из угла ее границ.

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

Пример программы делает еще одну интересную вещь. Если вы нажмете кнопки Page 1 или Page 2, то отобразите изображение соответствующей страницы TabControl. Следующий код показывает, как программа захватывает страницу 2.

К сожалению, если страница закладки не отображается, то ее метод DrawToBitmap может не отобразить страницу, потому что она может быть недоступна в неэкранированной памяти. Чтобы решить эту проблему, код сохраняет текущий выбранный индекс страницы, выбирает нужную страницу, а затем вызывает ShowControlImage, чтобы получить изображение элемента управления и отобразить его в диалоговом окне. Когда вы закрываете диалог, код восстанавливает первоначально выбранную страницу TabControl.

Источник: http://csharphelper.com/blog/2014/09/get-the-image-of-a-control-or-form-or-a-forms-client-area-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *