русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Форматы графических файлов


Дата добавления: 2014-12-02; просмотров: 629; Нарушение авторских прав


Классы TPicture и TGraphic

Как уже было отмечено, важнейшей частью компонента Image является свойство Picture (рисунок), имеющее тип TPicture. Именно оно используется для работы с самим изображением, включая такие операции, как чтение из файла и запись в файл. Оригинальный размер изображения так же доступен через свойства Height и Width рисунка. В свою очередь, класс TPicture включает в себя несколько свойств, основанных на классе TGraphic, которые собственно и могут содержать само изображение. Всего предусмотрено несколько таких свойств:

Bitmap типа TBitmap - для файлов типа BMP;

Icon типа TIcon - для файлов типа ICO;

MetaFile типа TMetaFile - для файлов типа WMF или EMF.

Кроме них, существует еще свойство Graphic, которое ссылается на картинку вне зависимости от конкретного формата и имеет такие общие для всех рисунков свойства, как Height, Width и Transparent. Поэтому в тех случаях, когда тип изображения заведомо неизвестен, следует использовать именно это свойство. Более того, если используются нестандартные для Windows и Delphi типы графических фалов (взять тот же JPEG, который является опциональным в VCL), то только через свойство Graphic к нему и можно будет обращаться для того, чтобы, скажем, узнать размеры. Собственно говоря, когда используются свойства Height или Width объекта Picture, то они берут значения как раз от этого объекта.

Вообще можно отметить, что компонент Image является всего лишь полем для отображения изображений, поддержка которых полностью возложена на класс TPicture и его дочерние свойства, основанные на TGraphic. Единственной его особенностью являются сервисные функции для масштабирования изображений. В то же время, если этого не требуется, то можно просто создать программными методами экземпляр класса TPicture и выводить изображение на поверхность любого компонента, имеющего свойство Canvas:



var Pic: TPicture; ... Pic:=TPicture.Create; Pic.LoadFromFile('c:\mypicture.bmp'); Form1.Canvas.Draw(1,1,Pic.Graphic);

Кроме того, "сам по себе" класс TPicture может быть полезным при работе с таким компонентом, как ImageList. Например, можно сделать так, чтобы рисунки для изображений меню или панелей инструментов загружались из отдельного файла. В таком случае даже помещать ImageList на форму во время проектирования приложения, в обще-то не обязательно - все можно делать во время работы приложения. Кроме того, поскольку формат файл заранее известен - это будет BMP, то использовать класс TPicture так же нет необходимости, проще будет сразу обратиться к классу TBitmap - все равно TPicture будет просто переадресовывать все обращения к своему свойству Bitmap:

var ImgLst: TImageList; Bmp: TBitmap; ... ImgLst:=TImageList.Create; Bmp:=TPicture.Create; Bmp.LoadFromFile('tools.bmp'); Bmp.Transparent:=true; ImgList.AddMasked(Bmp,Bmp.TransparentColor);

Но в ряде иных случаев использование самого класса TPicture может быть более предпочтительным по той причине, что таким образом можно обеспечить поддержку других форматов. Для примера рассмотрим приложение, которое сможет не только показывать, но и создавать графические файлы. Для этого нам понадобится создать новое приложение, на главной форме которого расположим какой-либо объект, на поверхности которого можно рисовать, скажем, тот же Image. По традиции, назовем форму MainFrm, а изображение - Img. Затем поместим на форме 2 кнопки и назовем одну InsertBtn (вставить), а другую - SaveBtn (сохранить). Так же нам потребуется 2 диалога - для того, чтобы открывать и сохранять картинки. Используем специализированные диалоги OpenPictureDialog (OpenPicDlg) и SavePictureDialog (SavePicDlg).

Для того чтобы область, выделенная для творчества, была изначально заполнена белым фоном, имитируя лист бумаги, для события OnCreate или OnShow формы можно предусмотреть следующий код:

Img.Canvas.Brush.Color:=clWhite; Img.Canvas.FillRect(Rect(0,0,Img.Width,Img.Height));

После проделанной подготовительно работы напишем код для кнопки вставки, которая будет вставлять в центр рисунка изображение из выбранного файла:

procedure TMainFrm.InsertBtnClick(Sender: TObject); var Pic: TPicture; begin if not OpenPicDlg.Execute then exit; Pic:=TPicture.Create; Pic.LoadFromFile(OpenPicDlg.FileName); Img.Canvas.Draw((Img.Width-Pic.Width) div 2,(Img.Height-Pic.Height) div 2,Pic.Graphic); Pic.Free; end;

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

Но это еще не все: все-таки составлять коллажи - не единственная возможность, предоставляемая холстом. Можно на нем просто рисовать, что уже было рассмотрено в предыдущей части книги. Между тем, мы можем не просто выводить какие-либо предопределенные фигуры, но и предоставить пользователю возможность нарисовать что-либо. Пусть это будут хотя бы простые линии, которые будут появляться после того, как пользователь нажмет на левую клавишу мышки, переместит указатель, и отпустит клавишу. Для этого мы задействуем обработчики событий OnMouseDown и OnMouseUp для объекта Img, и используем методы MoveTo и LineTo его холста:

procedure TMainFrm.ImgMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Img.Canvas.MoveTo(X,Y); end; procedure TMainFrm.ImgMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Img.Canvas.LineTo(X,Y); end;

Наконец, нам остается реализовать возможность сохранения того, что в данный момент отображается в Img. Для этого нам и пригодится 2-я кнопка, код для которой будет выглядеть следующим образом:

if SavePicDlg.Execute then Img.Picture.SaveToFile(SavePicDlg.FileName);

Таким образом, все, что нарисовано на холсте, может быть без каких-либо ухищрений сохранено в качестве обычного файла в формате Windows Bitmap. Исходный код этой программы можно найти в каталоге Demo\Part3\PicEdit.

 



<== предыдущая лекция | следующая лекция ==>
Файл к статье | Основные типы БД. создание БД


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.