Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_Delphi_2.doc
Скачиваний:
9
Добавлен:
18.09.2019
Размер:
1.91 Mб
Скачать

Interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,

StdCtrls, Buttons;

type

TForm1 = class(TForm)

Timer1: TTimer;

Image1: TImage;

procedure FormActivate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Implementation

{$R *.DFM}

var

Back, Bitmap, Buf : TBitMap; // Фон, картинка, буфер

BackRct : TRect; // Область фона, восстановлена из буфера

BufRct: Trect; // Область буфера для фона

x,y:integer; // Текущее положение картинки

W,H: integer; // Размеры картинки

procedure TForm1.FormActivate(Sender: TObject);

begin

// создать три объекта - битовых образа

Back := TBitmap.Create; // Фон

Bitmap := TBitmap.Create; // Картинка

Buf := TBitmap.Create; // Буфер

// загрузить и вывести фон

Back.LoadFromFile('factory.bmp');

Form1.Image1.canvas.Draw(0,0,Back);

// загрузить картинку, которая будет двигаться

Bitmap.LoadFromFile('aplane.bmp');

// определим "прозрачный" цвет

Bitmap.Transparent := True;

Bitmap.TransParentColor := Bitmap.canvas.pixels[1,1];

// создать буфер для копии области фона под картинку

W:= Bitmap.Width;

H:= Bitmap.Height;

Buf.Width:= W;

Buf.Height:=H;

Buf.Palette:=Back.Palette; // Для соответствия палитр !!

Buf.Canvas.CopyMode:=cmSrcCopy;

// определим область буфера для восстановления фона

BufRct:=Bounds(0,0,W,H);

// начальное положение картинки

x := -W;

y := 20;

// определим сохраняемую область фона и сохраним ее

BackRct:=Bounds(x,y,W,H);

Buf.Canvas.CopyRect(BufRct,Back.Canvas,BackRct);

end;

procedure TForm1.Timer1Timer(Sender: TObject); // обработка сигнала таймера

begin

Form1.image1.canvas.Draw(x,y,Buf); // Удалим рисунок

x:=x+2;

if x>form1.Image1.Width then x:=-W;

// определим сохраняемую область фона и сохраним ее копию

BackRct:=Bounds(x,y,W,H);

Buf.Canvas.CopyRect(BufRct,Back.Canvas,BackRct);

// выведем рисунок

Form1.image1.canvas.Draw(x,y,bitmap);

end;

// завершение работы программы

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

// освободим память, выделенную для хранения битовых образов

Back.Free;

Bitmap.Free;

Buf.Free;

end;

end.

На рис. 17 .22представлен вид кадра окна приложения при исполнении. Самолет движется слева направо.

рис. 17.22. Окно работающего приложения задачи 2

Выводы

  1. Для работы с изображениями класса TBitmap предназначен компонент TImage.

  2. ИСР содержит класс TJpegImage для работы со сжатыми по стандарту Jpeg изображениями.

  3. Для фотореалистических изображений возможно сжатие в десятки раз без заметного ухудшения качества.

  4. При создании анимации образ движущегося объекта рисуется на холсте со смещением во времени. Перед очередным рисованием область фона, на которую накладывается текущий образ движущегося объекта, запоминается в буфере для последующего восстановления.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]