Графические возможности Delphi: Иллюстрации, битовые образы

Вывод иллюстраций

Наиболее просто вывести иллюстрацию, которая находится в файле с расширением bmp, jpg или ico, можно при помошикомпонентаimage, значок
которого находится на вкладке Additional палитры (рис. 10.11).

Наиболее просто вывести иллюстрацию, которая находится в файле с расширением bmp, jpg или ico, можно при помошикомпонента image, значоккоторого находится на вкладке Additional палитры (рис. 10.11). 

Рис. 10.11. Значок компонента image

В табл. 10.8 перечислены основные свойства компонента image.

Иллюстрацию, которая будет выведена в поле компонента image, можно задать как во время разработки формы приложения, так и во время работы программы.

Во время разработки формы иллюстрация задается установкой значения свойства picture путем выбора файла иллюстрации в стандартном диалоговом окне, которое появляется в результате щелчка на командной кнопке Load окна Picture Editor (рис. 10.12). Чтобы запустить Image Editor, нужно в окне Object Inspector выбрать свойство Picture и щелкнуть на кнопке с тремя точками.

Если размер иллюстрации больше размера компонента, то свойству strech нужно присвоить значение True и установить значения свойств width и Height пропорционально реальным размерам иллюстрации.

Чтобы вывести иллюстрацию в поле компонента image во время работы программы, нужно применить метод LoadFromFile к свойству Picture, указав в качестве параметра имя файла иллюстрации.

Например, инструкция

 

1.Forml.Imaqel.Picture.LoadFromFile('e:\tenp\bart.bmp')

 

загружает иллюстрацию из файла bart.bmp и выводит ее в поле вывода иллюстрации (image1).

Метод LoadFromFile позволяет отображать иллюстрации различных графических форматов: BMP, WMF, JPEG (файлы с расширением jpg).

Следующая программа, ее текст приведен в листинге 10.6, использует компонент image для просмотра иллюстраций, которые находятся в указанном пользователем каталоге. Диалоговое окно программы приведено на рис. 10.13.

Рис. 10.12. Окно Picture Editor

Рис. 10.13. Слайд-проектор

 

Листинг 10.6. Слайд-проектор

 

001.unit shpic_;
002.interface
003.uses
004.Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls, StdCtrls, Menu
005.type
006.TForml = class(TForm)
007.ImageIt Tlmage;
008.Buttonl: TButton;
009.procedure FormActivate(Sender: TObject);
010.procedure ButtorilClickfSender: TObject);
011.private
012.{ Private declarations }
013.public
014.{Public declarations }
015.end;
016.var
017.Form1: TForm1;
018.aSearchRec : TSearchRec;
019.aPath : String; // каталог, в котором находятся иллюстрации
020.aFile : String; // файл иллюстрации
021.iw,ih: integer// первоначальный размер <a href="http://delphicomponent.ru/" title="компонента" target="_blank">компонента</a> Image
022.implementation
023.{$R *.DFM}
024.// изменение размера области вывода иллюстрации
025.// пропорционально размеру иллюстрации
026.Procedure Scalelmage;
027.var
028.pw, ph : integer// размер иллюстрация
029.scaleX, scaleY : real// масштаб по Х и Y
030.scale : real// общий масштаб
031.begin
032.// иллюстрация уже загружена
033.// получим ее размеры
034.pw := Forml.ImageI.Picture.Width;
035.ph := Forml.Imagel.Picture.Height;
036.if pw > iw // ширина иллюстрации больше ширины <a href="http://delphicomponent.ru/" title="компонента" target="_blank">компонента</a> Image
037.then scaleX := iw/pw // нужно масштабировать
038.else scaleX := 1;
039.if ph. > ih // высота иллюстрации больше высоты <a href="http://delphicomponent.ru/" title="компонента" target="_blank">компонента</a>
040.then scaleY := ih/ph // нужно масштабировать
041.else scaleY := 1;
042.// выберем наименьший коэффициент
043.if scaleX < scaleY
044.then scale := scaleX
045.else scale := scaleY;
046.// изменим размер области вывода иллюстрации
047.Forml.Imagel.Height ;= Round(Forml.Imagel.Picture.Height'scale);
048.Forml.Imagel.Width := Round(Forml.Imagel.Picture.Width*scale);
049.// т. к. Strecfi = True и размер области пропорционален
050.// размеру картинки, то картинка масштабируется без искажений
051.end;
052.// вывести первую иллюстрацию
053.procedure FirstPicture;
054.var
055.г : integer,- // результат поиска файла
056.begin
057.aPath := 'f:\temp\';
058.г := FindFirst |aPath+'*.bmp',faAnyFile,aSearchRec);
059.if г = 0 then
060.begin // в указанном каталоге есть Ьюр~файл
061.aFile := aPath + aSearchRec.Name,-
062.Forml.Imagel.Picture.LoadFromFile(aFile); // загрузить
063.// иллюстрацию
064.Scalelmage; // установить размер <a href="http://delphicomponent.ru/" title="компонента" target="_blank">компонента</a> Image
065.г := FindNext(aSearchRec); // найти следующий файл
066.if г = 0 then // еще есть файлы иллюстраций
067.Forml.Buttonl.Enabled := True;
068.end;
069.end;
070.// вывести следующую иллюстрацию
071.Procedure NextPicture();
072.var
073.г : integer;
074.begin
075.aFile := aPath + aSearchRec.Name;
076.Forml. Imagel.Picture.LoadFromFile(aFile);
077.Scalelmage;
078.// подготовим вывод следующей иллюстрации
079.г :- FindNext(aSearchRec); // найти следующий файл
080.if г О О
081.then // больше нет иллюстраций
082.Forml.Buttonl.Enabled := False;
083.end;
084.procedure TForml.Formftctivate{Sender: TObject);
085.begin
086.Imagel.AutoSize := False; // запрет автоизменения размера <a href="http://delphicomponent.ru/" title="компонента" target="_blank">компонента</a>
087.Imagel.Stretch := True; // разрешим масштабирование
088.// запомним первоначальный размер области вывода иллюстрации
089.iw := Imagel.Width;
090.in :- imagel.Height;
091.Buttonl.Enabled := False; // сделаем недоступной кнопку Дальше
092.FirstPicture; // вывести первую иллюстрацию
093.end;
094.// щелчок на кнопке Дальше
095.procedure TForml.ButtonlClick(Sender: TObject);
096.begin
097.NextPicture;
098.end;
099.end.
 

Программа выполняет масштабирование выводимых иллюстраций без искажения, чего нельзя добиться простым присвоением значения True свойству strech. Загрузку и вывод первой и остальных иллюстраций выполняют соответственно процедуры FirstPicture и NextPicture. Процедура FirstPicture использует функцию FindFirst для того, чтобы получить имя первого BMP-файла.

В качестве параметров функции FindFirst передаются: 

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

Если в указанном при вызове функции FindFirst каталоге есть хотя бы один BMP-файл, значение функции будет равно нулю. В этом случае метод LoadFromFile загружает файл иллюстрации, после чего вызывается функция scaieimage, которая устанавливает размер компонента пропорционально размеру иллюстрации. Размер загруженной иллюстрации можно получить, обратившись К свойствам Form1. Image1. Picture. Width И Form1.image1.Picture.Height, значения которых не зависят от размера компонента Image.   

 

 Битовые образы

 

При работе с графикой удобно использовать объекты типа TBitMap (битовый образ). Битовый образ представляет собой находящуюся в памяти ком-
пьютера, и, следовательно, невидимую графическую поверхность, на которой программа может сформировать изображение. Содержимое битового
образа (картинка) легко и, что особенно важно, быстро может быть выведено на поверхность формы или области вывода иллюстрации (image). По-
этому в программах битовые образы обычно используются для хранения небольших изображений, например, картинок командных кнопок.
Загрузить в битовый образ нужную картинку можно при помощи метода LoadFromFile, указав в качестве параметра имя BMP-файла, в котором на-
ходится нужная иллюстрация.
Например, если в программе объявлена переменная pic типа TBitMap, то после выполнения инструкции

При работе с графикой удобно использовать объекты типа TBitMap (битовый образ). Битовый образ представляет собой находящуюся в памяти компьютера, и, следовательно, невидимую графическую поверхность, на которой программа может сформировать изображение. Содержимое битовогообраза (картинка) легко и, что особенно важно, быстро может быть выведено на поверхность формы или области вывода иллюстрации (image). Поэтому в программах битовые образы обычно используются для хранениянебольших изображений, например, картинок командных кнопок.

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

Например, если в программе объявлена переменная pic типа TBitMap, топосле выполнения инструкции

 

1.pic.LoadFromFile Се; \images\aplane.brap1)

 

битовый образ pic будет содержать изображение самолета.

Вывести содержимое битового образа (картинку) на поверхность формы или области вывода иллюстрации можно путем применения метода Draw к соответствующему свойству поверхности (canvas).

Например, инструкция

 

1.Image1 .Canvas.Draw(x,у, bm)

 

выводит картинку битового образа bm на поверхность компонента Image1 (параметры х и у определяют положение левого верхнего угла картинки на поверхности компонента).

Если перед применением метода Draw свойству Transparent объекта TBitMap присвоить значение True, то фрагменты рисунка, окрашенные цветом, совпадающим с цветом левого нижнего угла картинки, не будут выведены — через них будет как бы проглядывать фон. Если в качестве "прозрачного" нужно использовать цвет, отличный от цвета левой нижней точки рисунка, то свойству Transparentcoior следует присвоить значение символьной константы, обозначающей необходимый цвет.

Следующая программа, текст которой приведен в листинге 10.7, демонстрирует использование битовых образов для формирования изображения из нескольких элементов.

Листинг 10.7. Использование битовых образов

 

01.unit aplanes_;
02.interface
03.uses
04.Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs;
05.type
06.TForm1 = class(TForm)
07.procedure FormPaint(Sender: TObject);
08.private
09.{ Private declarations }
10.public
11.( Public declarations }
12.end;
13.var
14.Form1: TForm1;
15.sky,aplane: TBitMap; // битовые образы: небо и самолет
16.implementation
17.{$R *.DEM}
18.procedure TForml.FormPaint(Sender: TObject);
19.begin
20.// создать битовые образы
21.sky := TBitMap.Create;
22.aplane := TBitMap.Create;
23.// загрузить картинки
24.sky.LoadFromFile('sky.bmp'|;
25.aplane.LoadFromFlle('aplane.bmp');
26.Fonru.Canvas.Draw(00, sky) ; // отрисовка фона
27.Forml.Canvas.Draw(20,20,aplane); // отрисовка левого самолета
28.aplane.Transparent:=True;
29.// теперь элементы рисунка, цвет которых совпадает с цветом
30.// левой нижней точки битового образа, не отрисовываются
31.Forral.Canvas.Draw(120,20,aplane); // очрисовка правого самолета
32.// освободить память
33.sky.free;
34.aplane.free;
35.end;end.

 

После запуска программы в окне приложения (рис. 10.14) появляется изображение летящих на фоне неба самолетов. Фон и изображение самолета — битовые образы, загружаемые из файлов. Белое поле вокруг левого самолета показывает истинный размер картинки битового образа aplane. Белое поле вокруг правого самолета отсутствует, т. к. перед его выводом свойству Transparent битового образа было присвоено значение True.

 

Рис. 10.14. Влияние значение свойства Transparent на вывод изображения 

dle

Помоги проекту! Расскажи друзьям об этом сайте: