Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
BFon : TBitmap; // битмап для хранения фона
ЦВЕТ
В предыдущем примере для задания красного цвета пиксела мы использовали константу clRed. В модуле Graphics имеются следующие константы цветов: clBlack = TColor($000000); clMaroon = TColor($000080); clGreen = TColor($008000); clOlive = TColor($008080); clNavy = TColor($800000); clPurple = TColor($800080); clTeal = TColor($808000); clGray = TColor($808080); clSilver = TColor($C0C0C0); clRed = TColor($0000FF); clLime = TColor($00FF00); clYellow = TColor($00FFFF); clBlue = TColor($FF0000); clFuchsia = TColor($FF00FF); clAqua = TColor($FFFF00); clLtGray = TColor($C0C0C0); clDkGray = TColor($808080); clWhite = TColor($FFFFFF); clNone = TColor($1FFFFFFF); clDefault = TColor($20000000);
Видно, что для определения цвета используется тип TColor. Данный тип содержит информацию о цвете, а также каким образом заменить цвет, если, к примеру, цветовая палитра системы не поддерживает данный цвет (например, установлено всего 256 цветов, а мы хотим назначить цвет, который выходит за пределы данного количества цветов). Тип TColor состоит из четырех байт (рисунок 2). Рисунок 2 – Описание указания цветов типа TColor
Цвет мы задаем в соответствии с цветовой моделью RGB (указываются первые буквы цветов Red, Green и Blue). Данная цветовая модель определяет цвет по яркости трех цветовых каналов: - Red (красный): яркость красного цвета от 0 до 255 (от 00 до FF); - Green (зеленый): яркость зеленого цвета от 0 до 255 (от 00 до FF); - Blue (синий): яркость синего цвета от 0 до 255 (от 00 до FF).
Также одним из способов указания цвета является использование функции: function RGB(r, g, b: Byte): COLORREF;
Данная функция имеет три параметра для задания красного, зеленого и синего цветов. Рассмотрим пример задания пикселу по координатам (x,y)=(24,35) желтого цвета. Для получения желтого цвета нам необходимо будет смешать красный цвет и зеленый: Form1.Canvas.Brush.Color:= RGB(255,255,0);
Следует отметить, что помимо цветовой модели RGB существует другие цветовые модели, такие как: - CMY (Cyan,Magetta,Yellow) – голубой, пурпурный и желтый цвета; - CMYK (Cyan,Magetta,Yellow, blacK) – голубой, пурпурный, желтый и черный цвета; - HSB (Hue, Saturation, Brightness) – тон, насыщенность, яркость; - Lab (модель, основанная на восприятии глазом человека); - HSV (Hue, Saturation, Value) – тон, насыщенность, значение; - HLS (Hue, Lightness, Saturation) – тон, яркость, насыщенность; - HSI (Hue, Saturation, Intensity) – тон, насыщенность, интенсивность; - и другие.
КЛАСС TFONT
Класс TFont предназначен для описания шрифтов Windows. Методы канвы (Canvas) модуля Graphics позволяют рисовать только горизонтально расположенные шрифты.
Пример использования класса TFont: Form1.Canvas.Font.Name:= 'Times New Roman'; Form1.Canvas.Font.Size:= 12;
В данном примере мы задали для нашей канвы (Canvas) основной шрифт Times New Roman и указали размер шрифта, равный 12. Разберем более подробно свойства данного класса (таблица 1). Таблица 1 – Свойства класса TFont
ВЫВОД ТЕКСТА
Для вывода текста на канву используются два метода: TextOut и TextRect.
Метод TextOut
Рассмотрим пример вывода текста ‘ВЫВОД ТЕКСТА’ на канву по координатам (x,y)=(50,20) с помощью процедуры TextOut: Form1.Canvas.TextOut(50,20,'ВЫВОД ТЕКСТА');
Данная процедура имеет три параметра: положение текста по координатам X, Y, а также третий параметр - сам текст. Немного изменим наш предыдущий пример. Выведем две строки текста друг под другом. Первая строка будет иметь наклонное и жирное начертание, а вторая - жирное и зачеркнутое. Первая строка будет выведена зеленым цветом, а вторая - красным: {1} Form1.Canvas.Font.Color:= clGreen; // устанаваливаем цвет шрифта зеленым {2} Form1.Canvas.Font.Style:= [fsBold,fsItalic]; // жирный и наклонный текст {3} Form1.Canvas.TextOut(50,10,'Первая строка'); // выводим строку {4} Form1.Canvas.Font.Color:= clRed; // устанаваливаем цвет шрифта красным {5} Form1.Canvas.Font.Style:= [fsBold,fsStrikeOut];// жирный и зачеркнутый текст {6} Form1.Canvas.TextOut(50,30,'Первая строка'); // выводим строку
В первых двух строчках мы изменяем цвет шрифта и стиль его начертания. Любой текст на канве будет выводиться с этими параметрами, пока они не будут переназначены. В данном случае в третьей строке мы выводим на канву текст. В четвертой и пятой строках мы переназначаем установленные ранее параметры начертания текста. Это означает, что весь последующий вывод текста на данную канву будет использовать стиль начертания, установленный нами последним. Пример запуска приложения показан на рисунке 3. Рисунок 3 – Вывод текста с помощью процедуры TextOut
Метод TextRect
Метод TextRect выводит текст с отсечением. Посмотрим на параметры процедуры: procedure TextRect(Rect: TRect; X, Y: Integer; const Text: string);
Как и в TextOut, строка текста выводится с позиции (X,Y), при этом часть текста, лежащая вне пределов прямоугольника Rect, отсекается и не будет видна. Приведем пример вывода текста, ограничивая его прямоугольником. В обработчике нажатия кнопки Button1 напишем следующий код: procedure TForm1.Button1Click(Sender: TObject); begin {1} Form1.Canvas.Brush.Color:= clWhite; {2} Form1.Canvas.TextRect(Rect(10,10,100,100),50,50,'Текстовая строка');
end;
Первая строка изменяет цвет заливки на белый. Это сделано для выделения цветом ограничивающего прямоугольника выводимой текстовой строки. Вторую строку разберем более подробно. Первым параметром является переменная типа TRect ограничивающего прямоугольника. Мы можем присвоить параметру заранее созданную переменную прямоугольника или создать эту переменную «налету» прямо при указании параметра (так было сделано в приведенном выше примере). В данном примере мы ограничивали текст прямоугольником с начальными координатами (x1,y1)=(10,10) и конечными координатами (x2,y2)=(100,100). Начальными координатами у прямоугольника являются координаты верхнего левого угла, а конечными – правого нижнего угла. Схематично расположение прямоугольника Rect(10,15,100,120) показано на рисунке 4.
Рисунок 4 – Схематичное представление прямоугольника Rect(10,15,100,120)
Вернемся к нашему примеру с выводом текста с помощью процедуры TextRect. Результат выполнения программы показан на рисунке 5. Рисунок 5 – Пример использования процедуры TextRect
На рисунке 5 видно, что вывод текстовой строки был ограничен прямоугольником Rect(10,10,100,100). Та текстовая часть, которая не попала в рамки данного прямоугольника, была отсечена при выводе. ОСНОВНЫЕ МЕТОДЫ, ИСПОЛЬЗУЕМЫЕ ДЛЯ РИСОВАНИЯ ПРИМИТИВОВ НА КАНВЕ
Метод LineTo(x,y)
Данный метод рисует линию от текущей позиции до позиции (x,y). По умолчанию начальная позиция равна (0,0). После рисования линии текущая позиция станет равной (x,y). Приведем пример рисования двух линий в компоненте TImage. Следовательно, будем рисовать не на самой форме, а на канве компонента Image, который расположен на вкладке Additional панели компонентов. Добавим данный компонент на форму и в обработчике события нажатия кнопки Button1 напишем следующий код: image1.Canvas.LineTo(100,90); image1.Canvas.LineTo(120,150);
Линия рисуется из текущей позиции пера на канве в позицию, заданную пользователем в параметрах. При запуске приложения перо будет находиться в левом верхнем углу канвы, то есть в координатах (0,0) канвы. Таким образом первая линия рисуется из координат (0,0) в координаты (100,90). После отрисовки линии текущей позицией пера становится конечная точка первой линии. Таким образом следующая линия будет рисоваться из координат (100,90) в координаты (120,150). Пример представлен на рисунке 6. Рисунок 6 – Рисование двух линий
Процедура MoveTo(x,y)
Данный метод изменяет текущую позицию на канве на позицию, заданную параметрами (x,y). Рассмотрим пример, на котором рисуется две линии с использованием процедуры MoveTo: image1.Canvas.MoveTo(40,40); // меняем начальную позицию на (40,40) image1.Canvas.LineTo(100,90); image1.Canvas.MoveTo(70,40); // меняем начальную позицию на (30,50) image1.Canvas.LineTo(110,90);
Пример запуска программы показан на рисунке 7.
Рисунок 7 – Рисование двух линий из разных начальных точек с использованием метода MoveTo
Метод Rectangle(x1,y1,x2,y2)
Выводит на канву прямоугольник с начальными координатами (x1,y1) и конечными (x2,y2). Начальными координатами является верхний левый угол прямоугольника, а конечными – правый нижний угол (рисунок 4). Приведем пример рисования прямоугольника на канве компонента image1: image1.Canvas.Rectangle(10,15,100,40);
Результат выполнения процедуры показан на рисунке 8. Рисунок 8 – Рисование прямоугольника с помощью метода Rectangle
Метод RoundRect(x1,y1,x2,y2,ex,ey);
Рисует прямоугольник по координатам (x1,y1) и (x2,y2). Углы же скругляются с помощью эллипсов с шириной ex и высотой ey. Листинг исходного кода (результат показан на рисунке 9): image1.Canvas.RoundRect(10,20,70,130,30,60);
Рисунок 9 – Рисование прямоугольника со скругленными углами Метод Ellipse(x1,y1,x2,y2)
Рисует окружность или эллипс с помощью текущих параметров пера Pen. Фигура заполняется текущим значением Brush. Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс. Листинг исходного кода (пример показан на рисунке 10): image1.Canvas.Ellipse(10,10,200,30);
Рисунок 10 – Рисование эллипса
Метод Arc(x1,y1,x2,y2,x3,y3,x4,y4: Integer)
Рисует дугу. Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс. Начальная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x3,y3). Конечная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x4,y4). Дуга рисуется против часовой стрелки от начальной до конечной точки. Листинг исходного кода (пример показан на рисунке 11): Image1.Canvas.Arc(0,0, 200,200, 200,0, 0,0); Image1.Canvas.Arc(210,0, 410,200, 210,0, 410,0);
Рисунок 11 – Рисование дуги
Метод Chord(x1,y1,x2,y2,x3,y3,x4,y4: Integer)
Метод Chord рисует замкнутую фигуру: дугу окружности или эллипса, замкнутую хордой, с помощью текущих параметров пера Pen. Фигура заполняется текущим значением Brush (рассмотрим чуть ниже). Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс. Начальная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x3,y3). Конечная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x4,y4). Дуга рисуется против часовой стрелки от начальной до конечной точки. Хорда соединяет точки(x3,y3) и (x4,y4). Листинг исходного кода (пример показан на рисунке 12): Image1.Canvas.Chord(0,0, 200,200, 200,0, 0,0); Image1.Canvas.Chord(210,0, 410,200, 210,0, 410,0);
Рисунок 12 – Рисование дуги окружности или эллипса, замкнутой хордой
Метод Pie (x1,y1,x2,y2,x3,y3,x4,y4:Longint);
Метод Pie рисует замкнутую фигуру — сектор окружности или эллипса, с помощью текущих параметров пера Pen. Фигура заполняется текущим значением Brush. Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс. Начальная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x3,y3). Конечная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x4,y4). Дуга рисуется против часовой стрелки от начальной до конечной точки. Рисуются прямые, ограничивающие сегмент и проходящие через центр эллипса и точки (x3,y3) и (x4,y4).
Листинг исходного кода (результат показан на рисунке 13): Image1.Canvas.Pie(0,0, 200,200, 200,0, 0,0); Image1.Canvas.Pie(210,0, 410,200, 210,0, 410,0);
Рисунок 13 – Рисование сектора окружности или эллипса
Метод Polyline
Рисует на канве текущим пером кусочно-линейную кривую по заданному множеству точек. Листинг исходного кода (результат показан на рисунке 14): Image1.Canvas.Polyline([ Point(10,10), Point(200,30), Point(100,80) ])
Рисунок 14 – Вывод кусочно-линейной кривой по трем точкам
Метод Polygon Рисует на канве текущим пером замкнутую фигуру по заданному множеству угловых точек. Листинг исходного кода (результат показан на рисунке 15): Image1.Canvas.Polygon([ Point(10,10), Point(200,30), Point(100,80), Point(100,80)])
Рисунок 15 – Вывод замкнутой фигуры по множеству угловых точек
КЛАСС TPen
Предназначен для описания свойств пера (карандаша). Данный инструмент используется канвой для рисования линий (рамой фигур, таких как эллипс, прямоугольник и т.д.).
Основными свойствами данного класса являются: − Color – задает цвет пера; − Mode – описывает одну из бинарных растровых операций. Эти операции определяют взаимодействие цвета пера с цветом экрана и соответствуют стандартным операциям, определенным в Windows (таблица 2). По умолчанию установлен режим pmCopy;
Таблица 2 – Возможные значения свойства Mode
− Style – определяет стиль линии, рисуемой пером:
− Width – содержит значение толщины пера в пикселах.
Приведем пример изменения свойств пера. Нарисуем эллипс и линию с разными свойствами пера для каждой фигуры. Листинг исходного кода (результат показан на рисунке 16): Image1.Canvas.Pen.Color:= RGB(255,110,155); Image1.Canvas.Pen.Style:= psInsideFrame; Image1.Canvas.Pen.Width:= 6; Image1.Canvas.Rectangle(10,10,100,50);
Image1.Canvas.Pen.Color:= clGreen; Image1.Canvas.Pen.Width:= 1; Image1.Canvas.Pen.Style:= psDashDot; Image1.Canvas.MoveTo(10,60); Image1.Canvas.LineTo(100,100);
Рисунок 16 – Пример изменения свойств пера Pen
КЛАСС TBrush
Описывает шаблон, используемый для закрашивания областей. Он используется для определения цвета и стиля заливки таких простых замкнутых фигур, как эллипс, прямоугольник и другие. Основными свойствами данного класса являются: − Color – определяет цвет заливки; − Bitmap – может содержать битовую карту, определенную пользователем для закраски областей (заполнение областей рисунком/текстурой); − Style – определяет стиль заливки (фактуру закраски). Возможные значения стиля кисти (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross):
Приведем пример изменения стиля заливки для двух фигур: прямоугольника и эллипса. Заполним прямоугольник стандартной картинкой Windows с помощью свойства Bitmap, а эллипс выведем красной пунктирной рамкой. Эллипс заполним зеленой сеткой (стиль bsDiagCross).
Исходный код обработчика события нажатия на кнопку: procedure TForm1.Button1Click(Sender: TObject); var btmp: TBitmap; begin btmp:= TBitmap.Create; // инициализируем класс для загрузки картинки try btmp.LoadFromFile('texture_b.bmp'); // загружаем картинку из файла
Image1.Canvas.Pen.Color:= clBlack; // цвет рамки - черный Image1.Canvas.Pen.Style:= psSolid; // стиль рамки - сплошной Image1.Canvas.Pen.Width:= 1; // толщина рамки – 1
Image1.Canvas.Brush.Bitmap:= btmp; // устанавливает заливку // картинкой
{Рисуем прямоугольник в соответствии с указанными стилями рамки и заливки} Image1.Canvas.Rectangle(10,10,100,50);
{теперь меняем стили рамки и заливки для другой фигуры} Image1.Canvas.Pen.Color:= clRed; Image1.Canvas.Pen.Width:= 1; Image1.Canvas.Pen.Style:= psDash;
{обнуляем для заливки следующей фигуры ссылку на картинку} Image1.Canvas.Brush.Bitmap:= nil;
{устанавливаем стиль заливки для второй фигуры} Image1.Canvas.Brush.Style:= bsDiagCross; Image1.Canvas.Brush.Color:= clGreen;
{Рисуем эллипс в соответствии с указанными стилями рамки и заливки} Image1.Canvas.Ellipse(10,60,100,100); finally Image1.Canvas.Brush.Bitmap:= nil; btmp.Free; end; end;
Пример работы программы показан на рисунке 17.
Рисунок 17 – Пример заливки фона фигуры Свойство канвы CopyMode
Определяет способ взаимодействия холста с изображением, скопированным с другого холста. По умолчанию, copyMode=cmSrcCopy. Это означает, что пикселы другого холста копируются на холст, перекрывая любое изображение. Изменяя CopyMode, можно создавать различные эффекты. Таблица 3 показывает возможные значения свойства CopyMode и описывает каждое из них.
Таблица 3 – Возможные значения свойства CopyMode
ДОПОЛНИТЕЛЬНЫЕ МЕТОДЫ КАНВЫ
Метод BrushCopy(const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor);
Метод BrushCopy копирует прямоугольник Source из битовой карты Bitmap в прямоугольник Dest на канве. При этом для точек, имеющих цвет Color, назначается цвет кисти (Brush.Color). Пример исходного кода:
Из приведенного кода видно, что сначала мы создаем объект bitmap и загружаем в него файл. Далее мы устанавливаем цвет заливки = clYellow. Именно этим цветом в последствии будет заменяться каждый белый пиксел копируемого битмапа. Далее мы производим копирование в канву Form1.Canvas в область Rect(0,0,80,30) прямоугольника bitmapImage.Canvas.ClipRect из битмапа bitmapImage, указывая, что каждый пиксел с цветом clWhite будет заменяться цветом текущей заливки Form1.Canvas.Brush.Color. Финальным действием мы освобождаем память, выделенную под объект bitmapImage. Результат работы программы вы можете увидеть на рисунке 18. Стоит заметить, что копируемый прямоугольник bitmapImage.Canvas.ClipRect растягивается по размерам прямоугольника назначения Rect(0,0,80,30). Рисунок 18 – Пример использования метода BrushCopy
Метод CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect);
Данный метод копирует прямоугольник Source из канвы Canvas в прямоугольник Dest канвы метода.
Метод Draw(X, Y: Integer; Graphic: TGraphic);
Данный метод выводит графический объект Graphic на холсте в прямоугольной области с верхним левым углом (X,Y).
Метод FillRect(const Rect: TRect);
Данный метод заполняет указанный прямоугольник Rect на холсте, используя текущую кисть.
Метод FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);
Данный метод осуществляет заливку, начиная с координаты (X,Y). Если параметр FillStyle равен fsSurface, то заливка продолжается до тех пор, пока есть соседние точки с цветом Color. Если параметр FillStyle равен fsBorder, то заливка прекращается при достижении границ с цветом Color. Заливка со значением параметра FillStyle=fsBorder приводит к заливке всей канвы компонента, если ограничивающий контур «проколот» точкой другого цвета.
Метод FrameRect(const Rect: TRect);
Данный метод рисует контур прямоугольника, используя кисть холста. Данный метод не заполняет внутренность прямоугольника кистью Brush.
Метод StretchDraw(const Rect: TRect; Graphic: TGraphic);
Метод StretchDraw рисует графический объект Graphic в заданном прямоугольнике Rect. Если размеры Rect и Graphic не совпадают, то Graphic масштабируется и вписывается в Rect.
Рисование на экране
Из приложения можно получить доступ не только к канве компонента, имеющего свойство Canvas, но и к канве любого компонента или ко всему экрану. Для этого объявим переменную ScreenDC типа HDC. Напомним, что тип HDC – это тип контекста рисования в Windows.
С помощью функции GetDC можно взять контекст окна, указанного в скобках. Ноль означает, что используется контекст экрана. Метод Ellipse отличается от метода TCanvas.Ellipse только первым параметром – контекстом устройства. Это связано с тем, что ранее рисование шло через объект TCanvas, а при рисовании на экране – средствами GDI модуля Windows. Процедура TCanvas.Ellipse всего лишь вызывает Ellipse из Windows API и подставляет нужный контекст устройства и размеры, поэтому в ней на один параметр меньше.
МУЛЬТИПЛИКАЦИЯ
Мультиплика́ция (от лат. multiplicatio — умножение, увеличение, возрастание, размножение) — технические приёмы создания иллюзии движущихся изображений (движения и/или изменения формы объектов — морфинга) с помощью последовательности неподвижных изображений (кадров), сменяющих друг друга с некоторой частотой. Анима́ция (от фр. animation: оживление, одушевление) — западное название мультипликации: вид киноискусства и его произведение (мультфильм), а также соответствующая технология. Принцип мультипликации в Delphi сводится к тому, чтобы с определенной частотой рисовать объект, стирать его, а затем рисовать его вновь, изменяя его форму и/или месторасположение. Так как необходимо будет часто менять координаты перемещаемого объекта, то необходимо воспользоваться одним из двух способов: 1) Перерисовывать объект мультипликации в цикле (FOR, WHILE и т.д.), указывая задержку (процедура Sleep(milliseconds: Cardinal);); 2) Использовать компонент Timer (вкладка System панели компонентов), который будет выполнять повторяющиеся действия через указанный интервал времени;
Продемонстрируем мультипликацию движения закрашенного прямоугольника по прямой линии при помощи циклов. Разместим на форме компонент PaintBox, расположенный на вкладке System. Именно по его канве будет перемещаться прямоугольник. Также на форме разместим кнопку, по нажатию на которую будет начинаться движение прямоугольника (рисунок 19). Рисунок 19 - Примерный вид формы для создания простой мультипликации
Листинг исходного кода:
Рисунок 20 – Результат выполнения программы
Данный пример является демонстрацией простой мультипликации. Можно видеть, что старая позиция прямоугольника закрашивается таким же прямоугольником, но цвет его границы и заливки установлен таким же, как и цвет фона компонента PaintBox1. Таким образом, создается иллюзия перемещения красного прямоугольника. Мы очищаем именно старую позицию прямоугольника, а не весь холст, так как при очистке всего холста будут задействованы большие ресурсы системы, и пользователь будет видеть мерцание изображения. Данный способ нам не подойдет, если мы захотим перемещать какой-либо графический объект по фоновому изображению (например, фоновому изображению водопада и т.д.). Для перемещения объекта по фоновому изображению нам необходимо не просто закрашивать предыдущую позицию объекта, а восстанавливать ее. Пример действий показан на рисунке 21.
Рисунок 21 – Перемещение объекта по фоновому изображению
Листинг исходного кода обработчика события нажатия кнопки с комментариями: procedure TForm1.Button1Click(Sender: TObject); Var Begin {Создаем три объекта типа TBitmap} bFon:= TBitmap.Create; bSharik:= TBitmap.Create; bBufer:= TBitmap.Create; Try {Задаем ширину и высоту для шарика. В эту ширину и высоту будет вписываться исходное изображение шарика, которое имеет больший размер, чем нам необходимо} sharikWidth:= 60; sharikHeight:= 90; {Загружаем в битмап bFon фоновый рисунок} bFon.LoadFromFile('fon.bmp'); {Отрисовываем загруженный фон на полотне PaintBox1} PaintBox1.Canvas.Draw(0,0,bFon); {Загружаем рисунок шарика в битмап bSharik} bSharik.LoadFromFile('sharik.bmp'); {Сообщаем, что прозрачным цветом в нашем изображение будет являться левый верхний пиксел изображения с воздушным шариком} bSharik.TransparentColor:= bSharik.Canvas.Pixels[0,0]; {Сообщаем, что мы будем делать все пикселы прозрачными, у которых цвет соответствует цвету, указанному в bSharik.TransparentColor} bSharik.Transparent:= true; {Начальная позиция по координате Y устанавливается концу высоты изображения. Ширины и высоты шарика. Мы здесь указали, что шарик будет выводиться по координате X c 150го пиксела} sharikRect:= Rect(150,y,150+sharikWidth,y+sharikHeight); {Так как мы в буфер не загружали никакие изображения изначально, то Begin {выводим на фон скопированный заранее буфер} PaintBox1.Canvas.CopyRect(sharikRect,bBufer.Canvas,buferRect); {уменьшаем переменную Y. тем самым шарик будет отрисовываться чуть выше} y:=y-1; {запоминаем координаты прямоугольника куда впоследствии будет отрисовываться шарик.} sharikRect:= Rect(150,y,150+sharikWidth,y+sharikHeight); {В буфер копируем прямоугольник с запомненными ранее координатами} bBufer.Canvas.CopyRect(buferRect,bFon.Canvas,sharikRect); {Отрисовываем шарик} PaintBox1.Canvas.StretchDraw(sharikRect,bSharik); {устанавливаем задержку, чтобы шарик двигался более медленно} sleep(20); end; Finally {Очищаем память из под наших битмапов} bFon.Free; bSharik.Free; bBufer.Free; end; end;
ЗАДАНИЕ
Создать программу, демонстрирующую мультипликацию в соответствии с индивидуальным заданием (таблица 4).
Таблица 4 – Индивидуальные задания по вариантам
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. С помощью какого метода можно изменить цвет пиксела? 2. Какие цветовые модели существуют помимо цветовой модели RGB? 3. Какие методы используются для вывода текста на канву? 4. Каким компонентом можно воспользоваться помимо циклов для выполнения повторных действий через определенный промежуток времени?
СПИСОК ЛИТЕРАТУРЫ
1. Тюкачев Н.А. / Программирование графики в Delphi / Н.А. Тюкачев, И.В. Илларионов, В.Г. Хлебостроев – СПб.:БХВ-Петербург, 2008 – 784с. ЦВЕТ
В предыдущем примере для задания красного цвета пиксела мы использовали константу clRed. В модуле Graphics имеются следующие константы цветов: clBlack = TColor($000000); clMaroon = TColor($000080); clGreen = TColor($008000); clOlive = TColor($008080); clNavy = TColor($800000); clPurple = TColor($800080); clTeal = TColor($808000); clGray = TColor($808080); clSilver = TColor($C0C0C0); clRed = TColor($0000FF); clLime = TColor($00FF00); clYellow = TColor($00FFFF);
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-23; просмотров: 425; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.213.209 (0.366 с.) |