Графика в Delphi
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
на кнопки, например, стрелку (файл. \program files\common files\borland shared\images\buttons\arrow1l. bmp). Передвиньте ваши Image так, чтобы они перекрывали друг друга, и в верхнем компоненте установите Transparent равным true. Вы увидите, что верхняя картинка перестала заслонять нижнюю. Одно из возможных применений этого свойства - наложение на картинку надписей, выполненных в виде битовой матрицы. Эти надписи можно сделать с помощью встроенной в Delphi программы Image Editor.
Учтите, что свойство Transparent действует только на битовые матрицы. При этом прозрачным (т.е. заменяемым на цвет расположенного под ним изображения) делается по умолчанию цвет левого нижнего пикселя битовой матрицы.
Мы рассмотрели загрузку изображения из файла в процессе проектирования. Но свойство Picture позволяет также легко организовать обмен с графическими файлами любых типов в процессе выполнения приложения. Чтоб пояснить технику такого обмена, надо сначала подробнее рассмотреть свойство Picture.
Это свойство является объектом, который имеет в свою очередь подсвойства, указывающие на хранящийся графический объект. Если в Picture хранится битовая матрица, на нее указывает свойство Picture. Bitmap. Если хранится пиктограмма, на нее указывает свойство Picture. Icon. На хранящийся метафайл указывает свойство Picture. Metafile. Наконец, на графический объект произвольного типа указывает свойство Picture. Graphic.
Объект Picture и его свойства Bitmap, Icon, Metafile и Graphic имеют методы файлового чтения и записи LoadFromFile и SaveToFile:
procedure LoadFromFile (const FileName: string);
procedure SaveToFile (const FileName: string);
Для свойств Picture. Bitmap, Picture. Icon и Picture. Metafile формат файла должен соответствовать классу объекта: битовой матрице, пиктограмме, метафайлу. При чтении файла в свойство Picture. Graphiс файл должен иметь формат метафайла. А для самого объекта Picture методы чтения и записи автоматически подстраиваются под тип файла. Поясним это на примере.
Давайте построим приложение, аналогичное рассмотренному в разделе 4.2 примеру просмотра графических файлов. Для разнообразия можно организовать управление им не кнопкой Button, а меню. Поместите на форму компонент Image. Растяните его или задайте его свойство Align равным alClient, чтобы он занял всю клиентскую область формы. Перенесите на форму компонент диалога открытия графического файла OpenPictureDialog (см. раздел 8.2 ) и задайте в нем один раздел - Файл. В обработчике этого раздела напишите оператор
(OpenPictureDialog1. Execute) then. Picture. LoadFromFile (. FileName);
Этот оператор вызовет диалог открытия графического файла (см. рис.4.4) и загрузит в компонент Image1 изображение из выбранного пользователем файла (см. рис.4.5). Причем файл может быть любого типа: битовая матрица, пиктограмма или метафайл.
Рис.4.5 Изображение в компоненте Image битовой матрицы (а) и пиктограммы (6) а) б)
В этом приложении метод LoadFromFile применен к Image1. Picture. Если будут открываться только файлы битовых матриц, то оператор загрузки файла можно заменить на
. Picture. Bitmap. LoadFromFile (. FileName);
Для пиктограмм можно было бы использовать оператор. Picture. Icon. LoadFromFile (. FileName);
а для метафайлов - оператор. Picture. Metafile. LoadFromFile (. FileName);
или. Picture. Graphic. LoadFromFile (. FileName);
Но во всех этих случаях, если формат файла не совпадет с предполагаемым, возникнет ошибка. Аналогично работает и метод SaveToFile с тем отличием, что примененный к Picture или к Picture. Graphic он сохраняет в файле изображение любого формата. Например, если вы дополните свое приложение диалогом SavePictureDialog (см. раздел 8.2 ), введете в меню раздел Сохранить как и в его обработчик поместите оператор
SavePictureDialog1. Execute then. Picture. SaveToFile (SavePictureDialog1. FileName);
то пользователь получит возможность сохранить изображение любого формата в файле с новым именем. Только при этом, чтобы не возникало в дальнейшем путаницы, расширение сохраняемого файла все-таки должно соответствовать формату сохраняемого изображения.
Абсолютно идентично для изображений любого формата будет работать программа, если оператор сохранения вы замените на
. Picture. Graphic. SaveToFile (. FileName);
использующий свойство Picture. Graphic. А если вам известен формат хранимого в компоненте Image изображения, то вы можете применить метод SaveToFile к свойствам Picture. Bitmap, Picture. Icon и Picture. Metafile.
Для всех рассмотренных объектов Picture, Picture. Bitmap, Picture. Icon и Picture. Metafile определены методы присваивания значений объектов:
Assign (Source: TPersistent);
Однако, для BitMap, Icon и Metafile присваивать можно только значения однородных объектов: соответственно битовых матриц, пиктограмм, метафайлов. При попытке присвоить значения разнородных объектов генерируется исключение ЕConvertError. Объект Picture - универсальный, ему можно присваивать значения объектов любых из остальных трех классов. А значение Picture можно присваивать только тому объекту, тип которого совпадает с типом объекта, хранящегося в нем.
Метод Assign можно использовать и для обмена изображениями с буфером Clipboard. Например, оператор
. Assign (Image1. Picture);
занесет в буфер обмена изображение, хранящееся в Image1. Аналогично оператор
графика delphi изображение приложение
Image1. Picture. Assign (Clipboard);
прочитает в Image1 изображение, находящееся в буфере обмена. При