![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Виды изображений⇐ ПредыдущаяСтр 13 из 13
Все изображения можно разделить на две группы: растровые и векторные. Растровые изображения представляют собой двумерный массив точек, для каждой из которых независимо может быть задан свой цвет, как показано на следующем рисунке: Например, экран монитора представляется как растровое изображение. Достоинства: возможность представлять изображения любой сложности, например фотореалистичные. Недостатки: для изображений с большим количеством цветов и большим разрешением требуется большой объем памяти, причем занимаемый объем памяти растет квадратично при росте разрешения; плохие возможности масштабирования, так как, например, при увеличении изображения будет увеличиваться только размер точек, что приведет к значительному ухудшению качества. В Windows стандартный формат представления растровых изображений – битовые карты (Bitmap), хранящиеся в файлах с расширением BMP. Векторные изображения формируются из геометрических примитивов (отрезков, окружностей, эллипсов и т.д.), например: Достоинства: малый объем занимаемой памяти, возможность масштабирования. Недостатки: возможность представлять только достаточно простые изображения, в связи с чем используются для представления схем, чертежей, деловой графики и т.д. Стандартный формат хранения векторных изображений в Windows – так называемые метафайлы (Metafile) с расширением WMF.
10.3. Класс TPicture Для представления изображений в Delphi используется класс
В дальнейшем будем рассматривать только растровые изображения.
10.4. Класс TBitmap Класс TBitmap используется в Delphi для представления растровых изображений, содержит свойства, приведенные в следующей таблице.
Если никакого изображения не загружено, растровое изображение, представляемое классом 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;
Уже из приведенного примера видно, что обращаться к свойствам глубоко вложенных друг в друга классов крайне неудобно. В языке Паскаль в таких случаях можно применять описанный далее оператор.
10.5. Оператор WITH Синтаксис WITH < Структурная переменная> DO < Оператор>
Оператор WITH применяется для упрощения доступа к свойствам структурных переменных (типа «запись», «объект» или «класс»). Действие оператора можно продемонстрировать, переписав соответствующим образом тело процедуры, приведенной в предыдущем примере. Пример WITH Image1.Picture.Bitmap DO BEGIN Width: =Image1.Width; Height: =Image1.Height; END;
10.6. Класс TCanvas Класс TCanvas предоставляет средства для рисования на различных типах изображений, например на растровых изображениях, представляемых классом TBitmap. Основные используемые для рисования процедуры класса TCanvas приведены в следующей таблице.
Продемонстрируем использование процедур класса TCanvas на примере изображения треугольника с известными сторонами. Расположим треугольник, как показано на следующем рисунке:
Перепишем процедуру обработки события от нажатия кнопки Пример PROCEDURE TForm1.Button1Click(Sender: TObject); VAR a, b, c, p, s, h: Real; BEGIN WITH Image1.Picture.Bitmap DO BEGIN Width: =Image1.Width; Height: =Image1.Height; END;
a: =150; b: =100; c: =120;
p: =(a+b+c)/2; s: =Sqrt(p*(p-a)*(p-b)*(p-c)); WITH Image1.Picture.Bitmap.Canvas DO BEGIN MoveTo(0, 0); LineTo(Round(a), 0); h: =2*s/a; LineTo(Round(Sqrt(Sqr(c)-Sqr(h))), Round(h)); LineTo(0, 0); END; END;
Результат работы программы представлен на следующем рисунке.
|