Этот компонент вы можете найти на вкладке Additional палитры компонентов. Тогда же не затрагивались другие его возможности, потому что вы еще не были готовы познакомиться с графикой. Сейчас, когда мы рассмотрели все необходимое, пора разобрать этот компонент по свойствам и методам.
Компонент Timage достаточно универсальный и может отображать картинки разного формата. Но в начальной установке он может загружать только файлы форматов BMP, JPG, JPEG или WMF. Давайте посмотрим, как это делается. Создайте новое приложение и установите на форму одну кнопку и компонент Timage с вкладки Additional.
Теперь бросьте на форму компонент openPictureDialog с вкладки Dialogs. Этот компонент предназначен для отображения на экране стандартного окна открытия картинки. Нам также понадобится кнопка, по нажатии которой мы будем отображать окно открытия картинки и потом загружать выбранную.
На рис. выше вы можете увидеть форму будущей программы. Но пока готова только форма. Чтобы программа стала полноценной, надо написать код загрузки картинки. По нажатии кнопки Открыть картинку пишем следующий код:
В первой строке отображается стандартное окно открытия картинки. Для этого достаточно вызвать метод Execute компонента OpenPictureDialogl, т. е. написать OpenPictureDialogl.Execute. Этот метод возвращает логическое значение.
Закажи видеокурс по программированию в Delphi прямо сейчас и получи 106 видеоуроков! Кликни на картинку:
ЗАКАЗАТЬ!
Если оно равно true, то пользователь выбрал файл, иначе нажал отмену. Именно поэтому мы проверяем результат вызова метода Execute с помощью:
if OpenPictureDialogl.Execute then
Если файл выбран, то выполняется следующий код:
Image1.Picture.LoadFromFile(OpenPictureDialogl.FileName);
Разберем эту конструкцию по частям. У компонента imagel есть свойство picture. Это свойство имеет объектный тип (а значит, и свои свойства и методы) TPicture. Этот объект предназначен для работы с изображениями практически любого типа. Он достаточно универсален, в чем мы очень скоро убедимся.
Для загрузки изображения мы используем метод LoadFromFile (загрузить картинку из файла) объекта picture. В качестве единственного параметра этого метода нужно указать имя открываемого файла или полный путь, если картинка находится не в той же папке, что и сама программа.
Мы выбираем имя файла с помощью стандартного окна, и полный путь к файлу находится В свойстве FileName компонента OpenPictureDialogl.
Все достаточно просто. Попробуйте теперь запустить программу и посмотреть на результат ее работы. В окне открытия файла посмотрите, какие типы файлов можно открывать. В зависимости от версии и установленной комплектации количество типов может быть от 1 до 3 — BMP, ICO и WMF.
Давайте научим нашу программу работать с форматом JPEG. Не волнуйтесь, это не сложно и нам не придется писать сложный алгоритм распаковки изображения.
В Delphi уже есть все необходимое, надо только это необходимое подключить к проекту.
Для начала переместитесь в раздел uses проекта и подключите туда модуль jpeg. В этом модуле описано все необходимое для работы с форматом изображений JPEG.
В принципе, этого достаточно. Осталось только заставить окно открытия файлов показывать фильтр на данный тип файлов. Для этого выделите компонент OpenPictureDialogl И дважды щелкните по свойству Filter. Перед вами откроется окно настройки фильтра, как показано на рис:
В этом окне есть несколько заполненных строк. На рисунке только три. В четвертой строке (первой пустой строке) напишите в первой колонке "JPEG Files", а во второй колонке напишите "*.jpg". Можете нажимать ОК и запускать программу. Теперь в окне открытия графического файла можно выбрать тип .jpg и открыть нужный файл. Он также будет загружен в компонент imagel, даже несмотря на свой сложный алгоритм сжатия и другой вид хранения данных.
Теперь попробуем модернизировать пример и получить доступ к содержимому картинки. Для этого мы будем копировать изображение, используя прозрачность. Как? Сейчас узнаете.
Создайте обработчик события OnPaint для главной формы в уже созданном нами примере. В процедуре FormPaint напишите следующее:
А в процедуре, где мы загружаем изображение, нужно в конце добавить вызов метода Repaint, чтобы после открытия графического файла форма прорисовалась заново и вызвался
обработчик OnPaint.
Теперь попробуйте запустить программу и загрузить в нее файл формата BMP. Вы должны увидеть результат, подобный тому, что показан на рис. 12.13. Слева у нас находится изображение картинки image1, а справа мы делаем копию изображения на форму.
А вот теперь давайте посмотрим, что тут происходит. Код окажется немного сложным, но это только на первый взгляд. Рассмотрим все по частям. Мы используем процедуру Brushcopy у уже знакомого canvas . Эта процедура копирует на canvas картинку.
Область приемника объявлена как TRect, который имеет вид TRect = (Left, Top, Right, Bottom: Integer). С тем, ЧТО находится В скобках, мы познакомились ранее. То же самое и с областью источника. В качестве картинки передается Bitmap ИЗ Timage.
В качестве прозрачного цвета мы использовали цвет пиксела в позиции [1, 1] картинки Timage. На это указывает запись:
Image1.Picture.Bitmap.Canvas.Pixels[1,1]
Попробуем записать ее немного по-другому:
TImage1. Его_картинка. Bitmap. Холст. Пиксел [ 1_по_оси_Х, 1_по оси_У]
Обратите внимание, что если вы сейчас попытаетесь открыть какой-нибудь не BMP-файл, то программа ничего не отобразит. Это связано с тем, что только ВМР- файлы хранят свои изображения в свойстве Bitmap, все остальные хранят в свойстве Graphic или Metafile (для векторного формата). Так что получить доступ
к JPEG-изображению таким образом нельзя. Зато можно с помощью метода Draw. Для этого нужно подкорректировать обработчик события OnPaint:
Здесь мы уже рисуем не Bitmap, a Graphic, поэтому программа будет работать корректно.
Векторные файлы, например, формата WMF, хранят свои данные в свойстве Metafile. Для их отображения обработчик события OnPaint должен быть таким:
Если Вы хотите сделать движущиеся, анимированные картинки - то посмотрите видеоурок:
Скачайте бесплатно целый видеокурс по Delphi одним архивом - СКАЧАТЬ БЕСПЛАТНО!