Захват графики элемента управления в C#
Для захвата графики элемента управления .NET в растровое изображение программисты могут использовать GDI, чтобы передать то, что изображено на экране, в растровое изображение. Очень полезно иметь представление изображения. Разработчики могут обрабатывать изображение множеством способов. Другой момент — изображение может быть снова отображено на экране, что открывает способ обработки графики элемента управления .NET. Класс ControlPaint по сравнению с GDI Довольно распространенный способ рисования элементов управления .NET "вручную" состоит в использовании класса ControlPaint. В классе ControlPaint имеются статические функции, которые могут изображать обычные элементы управления .NET в графической рабочей области. Например, функция ControlPaint.DrawButton рисует кнопку. Однако этот класс имеет два недостатка. Первый недостаток — в классе ControlPaint отсутствует поддержка всех элементов управления .NET, не говоря уже о пользовательских элементах управления, созданных разработчиком. Второй недостаток — класс ControlPaint не учитывает стили форматирования, и следовательно отрисованный элемент управления не будет соответствовать остальным элементам управления формы. Лучший способ захвата элемента управления .NET состоит в рисовании в растровом изображении того, что уже нарисовано на экране. GDI имеет функцию BitBlt, которая позволяет разработчикам C# делать это более эффективно. Функция BitBlt расположена в библиотеке GDI32.dll:
Как можно заметить, BitBlt может выполнить большую часть работы. Все, что от нас потребуется, это предоставить ей соответствующие значения контекстов устройств для отображения (DC). Одно их них будет DC элемента управления, а второе — DC целевого растрового изображения:
Использование кода Конечно, исходный код имеет некоторые ограничения. Поскольку он захватывает элемент управления .NET путем копирования того, что отрисовывается на экране, то при наличии какого-либо объекта вверху захватываемого элемента управления он также будет скопирован. Преимущество, очевидно, в том, что эта функция может захватывать любой элемент управления, даже пользовательский, в технически любом состоянии. Функция DrawToBitmap Мое внимание привлекло то, что объекты элементов управления в платформе .NET Framework 2.0 и последующих выпусков имеют функцию с именем DrawToBitmap, которая автоматически обрабатывает код, описанный выше, для захвата элемента управления .NET в растровое изображение. Приведенный выше код хорошо подходит для более старых приложений .NET. |