Данные, подлежащие воспроизведению на экране монитора, формируются программой, функционирующей на центральном процессоре компьютера. Далее они передаются видеоадаптеру, который размещает эти данные в видеопамяти, преобразовывает и передаёт устройству управления лучом – электронной лучевой трубке.
Таким образом, видеоадаптер является устройством сопряжения центрального процессора и устройства отображения.
Видеоадаптеры могут обеспечить разные режимы отображения данных, которые разделяются натекстовые и графические. Как правило, видеоадаптер поддерживает несколько графических режимов. Режим отображения данных на экране называется видеорежимом.
Различные видеорежимы отличаются количеством выводимых на экран данных и цветов. Единицами измерения количества выводимых данных являются: в текстовом режиме – символ (литера), в графическом – пиксель. Например, видеоадаптер SVGA позволяет установить текстовый режим, в котором выводится 37 строк по 100 символов в каждой (100х37) и несколько графических режимов, минимальным из которых является 800х600 пикселей.
В текстовом режиме 100х37 символ имеет размер 8х8 пикселей. Матрица 8х8 пикселей, используемая для отображения символа на экране, называется знакоместом. Символ передаётся в видеоадаптер в виде двухбайтовой последовательности. Первый байт – код символа, второй – его атрибуты: цвет символа и фона.
В графическом режиме отображаются два типа объектов: литеры (символы) и геометрические объекты.
При отображении литер используются шаблоны (шрифты). В видеоадаптер для отображения строки литер следует передать коды литер, атрибуты строки (высота, угол наклона, цвет и другие), а также имя шрифта (имя файла, в котором размещены формы литер). При отображении литеры будет, во-первых, найдена форма литеры в указанном шрифте, выполнено преобразование (масштабирование и изменение угла наклона) и отображение преобразованной формы литеры на экране монитора в соответствии с её атрибутами.
Построение геометрических объектов выполняется по заданным точкам. Для геометрических объектов, так же, как и для литер, могут быть определены атрибуты: тип, цвет, толщина линии и другие.
Данный элемент используется для размещения в нём графических изображений, которые имеются в файлах компьютера. Расширение графического файла может быть любым (.BMP, .JPG и др.). Кроме этого, в PictureBox можно создавать свои рисунки.
Загрузка готового рисунка осуществляется с помощью свойства Image. Можно выбрать два способа задания изображения:
1. В качестве значения данного свойства необходимо ввести имя графического файла. В этом случае этот файл должен распространяться вместе с приложением, причём расположение файла должно быть постоянным.
2. Импортировать изображение в папку проекта в скрытый файл, имеющий то же имя, что и форма, с расширением .resx. При этом не требуется распространять исходный файл изображения вместе с приложением.
Для программной загрузки графического файла используют следующий код:
PictureBox1.Image = Image.FromFile("имяфайла")
Имя файла необходимо указывать полностью со всеми папками. Для VisualBasicимя файла пишется как обычно, для C# в качестве разделителя папок используется двойной обратный слеш, например:
Свойство Image элемента управления PictureBox представляет собой объект Image, который представляет собой растровое изображение и имеет набор свойств и методов для манипулирования этим изображением. Важнейшими свойствами объекта Image являются:
HorizontalRezolution и VerticalRezolution – свойства, доступные только для чтения, возвращают разрешение изображения по горизонтали и вертикали в пикселях на дюйм.
Width и Height – свойства, доступные только для чтения, возвращают высоту и ширину изображения в пикселях. Если разделить значения этих свойств на значения предыдущих свойств, то получатся реальные размеры этого изображения в дюймах, что необходимо знать, например, при печати этого изображения.
Важнейшим методом объекта Image является метод RotateFlip, который поворачивает рисунок или выполняет его зеркальное отображение Способ поворота определяется аргументом данного метода из перечисления RotateFlipType. При этом обязательно надо перерисовать элемент управления с помощью метода Refresh, например: