Компонент роботи з графічними файлами (timage), delphi, компоненти delphi, вихідні коди delphi
Компонент роботи з графічними файлами (Timage)

Компонент Timage досить універсальний і може відображати картинки різного формату. Але в початковій установці він може завантажувати тільки файли форматів BMP, JPG, JPEG або WMF. Давайте подивимося, як це робиться. Ство-дайте новий додаток і встановіть на форму одну кнопку і компонент Timage з вкладки Additional.
Тепер киньте на форму компонент openPictureDialog з вкладки Dialogs. Цей компонент призначений для ото-браженія на екрані стандартного вікна відкриття картинки. Нам також понад-бится кнопка, після натиснення якої ми будемо відображати вікно відкриття кар-тинки і потім завантажувати обрану.
На рис. вище ви можете побачити форму майбутньої програми. Але поки готова лише форма. Щоб програма стала повноцінною, треба написати код завантаження картинки. За натисканні кнопки Відкрити картинку пишемо дотримуюся щий код:
procedure TForm1.ButtonlClick (Sender: TObject);
begin
if OpenPictureDialogl.Execute then Imagel.Picture.LoadFromFile (OpenPictureDialogl.FileName);
end;
У першому рядку відображається стандартне вікно відкриття картинки. Для цього досить викликати метод Execute компонента OpenPictureDialogl, т. Е. Написати OpenPictureDialogl.Execute. Цей метод повертає логічне значення.

Якщо воно дорівнює true, то користувач вибрав файл, інакше натиснув скасування. Саме тому-му ми перевіряємо результат виклику методу Execute за допомогою:
if OpenPictureDialogl.Execute then
Якщо файл обраний, то виконується наступний код:
Розберемо цю конструкцію по частинах. У компонента 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, щоб після відкриття графічного файлу форма прорисовалась заново і зголосився
Тепер спробуйте запустити програму і завантажити в неї файл формату BMP. Ви повинні побачити результат, подібний до того, що показаний на рис. 12.13. Зліва у нас знаходиться зображення картинки image1, а праворуч ми робимо копію зображення на форму.
Область приймача оголошена як TRect, який має вигляд TRect = (Left, Top, Right, Bottom: Integer). З тим, ЩО знаходиться В дужках, ми познайомилися раніше. Те ж саме і з областю джерела. Як картин-ки передається Bitmap З Timage.
В якості прозорого кольору ми використовували колір пікселя в позиції [1, 1] картинки Timage. На це вказує запис:
Спробуємо записати її трохи по-іншому:
TImage1. Его_картінка. Bitmap. Полотно. Піксель [1_по_осі_Х, 1_по осі_У]
Зверніть увагу, що якщо ви зараз спробуєте відкрити який-небудь не BMP-файл, то програма нічого не відобразить. Це пов'язано з тим, що тільки ВМР- файли зберігають свої зображення в властивості Bitmap, всі інші зберігають у властивості Graphic або Metafile (для векторного формату). Так що отримати доступ
до JPEG-зображення таким чином не можна. Зате можна за допомогою методу Draw. Для цього потрібно підкоригувати обробник події OnPaint:
procedure TForm1.FormPaint (Sender: TObj ect);
begin
Canvas.Draw (200, 16, Imagel.Picture.Graphic);
end;
Тут ми вже малюємо НЕ Bitmap, a Graphic, тому програма буде працювати коректно.
Векторні файли, наприклад, формату WMF, зберігають свої дані у властивості Metafile. Для їх відображення обробник події OnPaint повинен бути таким:
procedure TForm1.FormPaint (Sender: TObject);
begin
Canvas.Draw (200, 16, Image1.Picture.Metafile);
end;