
- •12.Списки
- •Interface
- •Implementation
- •13.Модули
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •14.Таблицы
- •Interface
- •Implementation
- •15.Графика, отображение графиков функций
- •Interface
- •Implementation
- •Initialization
- •16.Графика, примитивы
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Initialization
- •17.Графика, растровые изображения и анимация
- •Interface
- •Implementation
- •Initialization
- •Interface
- •Implementation
- •18.Тестирование и отладка
- •19.Квадратное уравнение
- •Interface
- •20.Класс tThread
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •21.Класс tStream
- •Interface
- •Implementation
- •Initialization
- •Interface
- •Implementation
- •Initialization
- •22.Создание в Delphi кроссплатформенного приложения
Interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, jpeg, ComCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label1: TLabel;
Label2: TLabel;
TrackBar1: TTrackBar;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MyJpeg:TJpegImage;
MyBitMap:TBitmap;
MyMemory:TmemoryStream;
s1,s2,s3,s:string;
size:integer;
Implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Image1.Picture.Assign(MyBitmap);
MyMemory.Clear;
Mymemory.LoadFromFile(s1);
str(MyMemory.Size,s3);
Label1.Caption:=s3;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
MyJpeg.Assign(MyBitmap);
MyJpeg.CompressionQuality:=100;
MyJpeg.Compress;
MyJpeg.SaveToFile(s2);
Image2.Picture.LoadFromFile(s2);
MyMemory.Clear;
Mymemory.LoadFromFile(s2);
str(MyMemory.Size,s3);
Label2.Caption:=s3;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
str(TrackBar1.Min,s3);
Label3.Caption:=s3;
str(TrackBar1.Max,s3);
Label4.Caption:=s3;
str(TrackBar1.Position,s3);
Label5.Caption:=s3;
MyJpeg.CompressionQuality:=TrackBar1.Position;
MyJpeg.Compress;
MyJpeg.SaveToFile(s2);
Image2.Picture.LoadFromFile(s2);
MyMemory.Clear;
Mymemory.LoadFromFile(s2);
str(MyMemory.Size,s3);
Label2.Caption:=s3;
end;
Initialization
s1:='E:\Eddy\Umd\Prg_YVU\LR\Delphi_examples_2\17_1\Picture.bmp';
s2:='E:\Eddy\Umd\Prg_YVU\LR\Delphi_examples_2\17_1\Picture.jpeg';
MyBitmap:=TBitMap.Create;
MyBitmap.LoadFromFile(s1);
MyMemory:=TmemoryStream.Create;
MyJpeg:=TJpegImage.Create;
end.
При запуске проекта на выполнение появляется окно в котором картинок нет. При нажатии на кнопку BitMap отображается исходная картинка и размер ее файла (в примере 309862), При нажатии на кнопку JpegImage отображается сжатая картинка и размер ее файла (в примере 89598). Это показано на рис. 17 .20. Картинки получены при качестве 100, когда никаких отличий не видно, хотя сжатый файл имеет размер примерно в 3 раза меньше.
рис. 17.20. Форма при запуске программы
Если теперь перемещать движок регулятора, сжатая картинка и размер ее файла динамически изменяются. Например, при коэффициенте качества 1 картинки имеют вид, показанный на рис. 17 .21. Размер сжатого файла 3119, т.е произошло сжатие примерно в 100 раз Граница заметности ухудшение качества для использованной картинки - коэффициент качества 10. При этом размер сжатого файла 5599, что примерно в 55 раз меньше, чем у исходного изображения.
рис. 17.21. Картинки при коэффициенте качества 1
Задание 2
Создать программу демонстрации анимации: движение самолета на фоне фабрики. Проект – приложение. В программе используются два файла растровых картинок, которые надо загрузить в ту же папку, где находится проект приложения:
фон - фабрика, файл factory.bmp,
движущийся объект - самолет, файл aplane.bmp.
Эти файлы находятся в папке УМД к ЛР.
Листинг модуля формы
unit prg_17_2_;