
- •2. Основы визуального программирования
- •2.1. Структура программного модуля
- •2.2. Формы
- •2.3. Элемент управления «Поле ввода»
- •2.4. Элемент управления «Кнопка»
- •2.5. Элемент «Метка»
- •2.6. Элемент «Группа переключателей»
- •0:ShowMessage('Выбран вариант 1');
- •1:ShowMessage('Выбран вариант 2');
- •2:ShowMessage('Выбран вариант 3');
- •2.7. Элемент «Изображение»
- •2.8. Виды изображений
- •2.9. Класс tPicture
- •2.10. Класс tBitmap
- •2.11. Оператор with
- •2.12. Класс tCanvas
- •2.13. Изменение параметров изображения
2.8. Виды изображений
Все изображения можно разделить на две группы: растровые и векторные.
Растровые изображения представляют собой двумерный массив точек, для каждой из которых независимо может быть задан свой цвет, как показано на следующем рисунке:
Например, экран монитора представляется как растровое изображение.
Достоинства: возможность представлять изображения любой сложности, например фотореалистичные.
Недостатки: для изображений с большим количеством цветов и большим разрешением требуется большой объем памяти, причем занимаемый объем памяти растет квадратично при росте разрешения; плохие возможности масштабирования, так как, например, при увеличении изображения будет увеличиваться только размер точек, что приведет к значительному ухудшению качества.
В Windows стандартный формат представления растровых изображений – битовые карты (Bitmap), хранящиеся в файлах с расширением BMP.
Векторные изображения формируются из геометрических примитивов (отрезков, окружностей, эллипсов и т.д.), например:
Достоинства: малый объем занимаемой памяти, возможность масштабирования.
Недостатки: возможность представлять только достаточно простые изображения, в связи с чем используются для представления схем, чертежей, деловой графики и т.д.
Стандартный формат хранения векторных изображений в Windows – так называемые метафайлы (Metafile) с расширением WMF.
2.9. Класс tPicture
Для представления изображений в Delphi используется класс TPicture. Этот класс содержит три основных свойства, каждое из которых представляет определенный тип изображения (соответственно, актуальным может быть только одно из них):
Свойство |
Значение |
Bitmap |
Значение класса TBitmap, представляющее растровое изображение |
Metafile |
Векторное изображение (метафайл, класс TMetafile) |
Icon |
Значок, или иконка (класс TIcon) – небольшое специальное растровое изображение, содержащее пиктограмму, задающую, например, тип документа. Иконки хранятся в фалах с расширениемICO |
В дальнейшем будем рассматривать только растровые изображения.
2.10. Класс tBitmap
Класс TBitmap используется в Delphi для представления растровых изображений, содержит свойства, приведенные в следующей таблице.
Свойство |
Значение |
Width иHeight |
Ширина и высота изображения в точках. Если размеры изображения превышают размеры области, задаваемой элементом TImage, выходящая за пределы этой области часть изображения отсекается |
Canvas |
Значение класса TCanvas, предоставляющего средства для рисования на задаваемом классомTBitmap растровом изображении |
Если никакого изображения не загружено, растровое изображение, представляемое классом TBitmap, является пустым, т.е. его ширина и высота равны 0. Поэтому, для отображения графической информации необходимо сначала задать размеры изображения, содержащегося в элементе TImage. Например, эти размеры можно сделать равными размерам самого элемента TImage, в результате чего для рисования можно будет использовать всю занимаемую этим элементом на форме область.
Для иллюстрации основных свойств классов TImage, TPicture и TBitmap рассмотрим следующий пример формы, содержащей элемент «Изображение» и кнопку:
Процедура обработки события от нажатия кнопки Button1 задает размеры растрового изображения, содержащегося в элементе Image1, равными размерам этого элемента.
Пример
PROCEDURE TForm1.Button1Click(Sender:TObject);
BEGIN
Image1.Picture.Bitmap.Width:=Image1.Width;
Image1.Picture.Bitmap.Height:=Image1.Height;
END;
Уже из приведенного примера видно, что обращаться к свойствам глубоко вложенных друг в друга классов крайне неудобно. В языке Паскаль в таких случаях можно применять описанный далее оператор.