Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример1




. Как осуществить доступ к отдельной точке на изображении (на холсте).

procedure TForm1.Button1Click(Sender: TObject);

var

i, j: Longint;

begin

Button1.Enabled:=False;

with Canvas do

for i:=1 to Width do begin

Application.ProcessMessages;

for j:=1 to Height do

Pixels[i,j]:=i*j;

end;

Button1.Enabled:=True;

end;

Пример использования методов, выводящих изображение - Draw и StretchDraw:

Прорисовка изображений происходит в обработчике события OnPaint для формы:

procedure TForm1.FormPaint(Sender: TObject);

begin

with Canvas do begin

Draw(0,0, Image1.Picture.BitMap);

StretchDraw(Rect(250,0,350,50),Image1.Picture.BitMap)

end;

end;

 

Класс TPicture

TPicture – это полнофункциональный класс, который инкапсулирует в себе все необходимое для работы с графическими изображениями (значком, растром, метафайлом). Его свойство Graphic может содержать объект любого из этих типов, то есть это свойство обеспечивает доступ к графическим объектам указанных типов. Свойства Htight и Width определяют высоту и ширину изображения в пикселах.

Если в поле Graphic хранился объект одного класса, а затребован другого, то прежний объект уничтожается, а вместо него создается пустой объект нужного класса.

Перечислим остальные методы и свойства:

 

procedure LoadFromFile (const Filename: scring); Анализирует расширение имени файла FileName и, если оно известно (зарегистрировано), то создается объект нужного класса и вызывается его метод LoadFromFile. В противном случае возникает исключительная ситуация EInvalidGraphic. Стандартными расширениями являются.ICO,.WMF и.BMP.

 

procedure SaveToFile (const Filename: string); Сохраняет графику в файле Filename.

 

procedure LoadFromClipboardFormat (var AFormat: Word; var AData: THandle; var APalette: HPALETTE);

Ищет в буфере обмена (clipboard) зарегестрированный формат Aformat и если формат найден, загружает из буфера изображение Adata и его палитру Apalette.

. Стандартно зарегистрированных форматов два: битовое изображение и метафайл.

 

procedure SaveToClipboardFormat (var AFormat: Word; var AData: THandle; var APalette: HPALETTE; Сохраняет графическое изображение Adata и его цветовую палитру APalette в буфере обмена в формате AFormat.

 

procedure Assign (Source: TPersistent);

Связывает собственный графический объект Graphic с объектом Source. Присваиваемый объект может быть класса как TPicture, так и TGraphic или любого его потомка. Кроме того, параметр Source может быть равен nil — в этом случае поле Graphic очищается с удалением прежнего объекта.

 

Все три разновидности графических объектов имеют свои системы кэширования. Это означает, что на один реально существующий в системе (и занимающий долю ресурсов!) дескриптор могут одновременно ссылаться несколько объектов. Реализуется такое связывание через метод Assign. Выражение Iconi.Assign(Icon2); означает, что два этих объекта разделяют теперь один значок.

Более простым является кэширование для TIcon и TMetafile, которые умеют только отображать себя и не предназначены для редактирования (создатели Delphi считают, что дескриптор графического объекта дается программисту не для того, чтобы ковыряться в нем на уровне двоичных кодов). Гораздо сложнее устроен механизм кэширования для TBitmap, который имеет свою канву для рисования.

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

Кого-то может удивить отсутствие объявленных методов рисования вроде Draw у TIcon, TMetafile и TBitmap. Такие методы есть, но они недоступны. Все рисование должно осуществляться через вызовы методов Draw и StretchDraw холста, содержащго графику, ибо холст несет тот контекст, в котором должна осуществляться операция. Рассмотрим предопределенные графические классы.

 

Класс TMetafile

TMetafile = class(TGraphic)

Инкапсулирует свойства стандартного метафайла Windows. В нем перекрываются методы Assign, LoadFromStream, SaveToStream, LoadFromClipboardFormat, SaveToClipboardFormat. В буфер обмена объект помещает свое содержимое в формате CF_METAFILEPICT. Помимо общих, класс имеет свойства:

Handle: типа HMETAFILE; Дескриптор метафайла.

Inch: типа Word; Число точек на дюйм в координатной системе метафайла. Связано с установленным режимом отображения.

 

Класс TIcon

TIcon = class(TGraphic)

Инкапсулирует значок Windows. Не пытайтесь изменить размеры значка — они постоянны (равны GetSystemMetrics(SM_CXICON) и GetSystemMetrics(SM_CYICON)), и при попытке присвоить новые значения возникает исключительная ситуация EInvalidGraphicOperation. Значок нельзя также читать и писать в буфер обмена, так как в Windows нет соответствующего формата. В этом классе перекрываются методы класса TGraphic: Assign, LoadFromStream и SaveToStream. Дополнительно также определены:

свойство Handle: HICON; дскриптор значка.

метод ReleaseHandle: типа HICON; Метод "отдает" дескриптор — возвращает значение дескриптора, обнуляя ссылку на него в объекте.

 

Класс TBitmap

TBitmap = class(TGraphic)

Класс соответствует битовой карте, зависимой от устройства (Device — dependent bitmap, DDB). В нем перекрываются методы Assign, LoadFromClipboardFormat, LoadFromStream, SaveToClipboardFormat, SaveToStream. Объект взаимодействует с буфером обмена в формате CF_BITMAP. Холст битовой карты доступен через свойство Canvas: TCanvas;

Обратите внимание на то, что другие потомки TGraphic холста не имеют. С его помощью можно рисовать на поверхности изображения.

Дескрипторы битовой карты и ее палитры доступны как свойства: Handle: HBITMAP; Palette: HPALETTE;

Два метода: function ReleaseHandle: HBITMAP; и function ReleasePalette: HPALETTE;возвращают дескрипторы битовой карты и палитры и после этого обнуляют соответствующие поля, т. е. как бы "отдают" дескрипторы пользователю.

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

procedure Dormant — выгружает изображение в поток и уничтожает дескрипторы битовой карты и палитры,

procedure Freelmage — "освобождает" дескриптор битовой карты для дальнейшего использования и внесения изменений. Это означает, что если на данный дескриптор есть ссылки, то он дублируется; поток очищается.

Битовая карта может быть монохромной и цветной, что определено свойством:

property Monochrome: Boolean - Значение True соответствует монохромной битовой карте. При его изменении происходит преобразование содержимого к требуемому виду.

"Фоновый" цвет битовой карты определяется свойством TransparentColor: TColor;

Это тот цвет, который можно отменить в операции BrushCopy, чтобы она выглядела прозрачной. Для монохромной карты этот цвет — белый.

Функции для работы с графикой.

В модуле GRAPHICS сосредоточен целый ряд полезных функций:

function GraphicFilter (GraphicClass: TGraphicClass): string; Эту функцию удобно использовать вместе с диалогами открытия и закрытия файла. Для заданного класса GraphicClass она вернет строку, которую сразу можно присвоить свойству Filter диалога. Например, для TBitmap она вернет строку 'Bitmaps (*.BMP)|*.BMP'.

function GraphicExtension( GraphicClass: TGraphicClass): string; Возвращает строку, содержащую расширение, которое встречается у файлов в формате GraphicClass. Например, GraphicExtension(TIcon) равно строке 'ICO'.

function ColorToRGB (Color: TColor): Longint; Преобразует значение типа TColor в формат RGB.

 

function ColorToIdent (Color: Longint; var Ident: string): Boolean; function IdentToColor (const Ident: string; var Color: Longint):Boolean; Функции взаимного преобразования цвета в строку с его названием (определенным в модуле GRAPHICS). Например, ColorToIdent(clWhite, AString) присвоит AString значение 'clWhite'. В случае неуспеха возвращается False;

function ColorToString (Color: Tcolor): string; function StringToColorfS: string): TColor; Назначение аналогично двум предыдущим функциям. При отсутствии цвета Color в списке предопределенных цветов возвращается строка с его значением в шестнадцатиричном формате. При отсутствии цвета с именем S (в том же списке) делается попытка преобразовать строку в число, в случае неудачи возникает исключительная ситуация.

 

Для преобразования битовой карты из зависимого от устройства формата DDB в независимый (DIB) предназначены две функции:

 

procedure GetDIBSizes (Bitmap: HBITMAP; var InfoHeaderSize: Integer; var ImageSize: Longint); Возвращает размер заголовка изображения и размер самого изображения. Значение InfoHeaderSize равно размеру структуры TBitmapInfoHeader плюс, при необходимости, размеру палитры (каждый элемент которой TRGBQuad занимает 4 байта). В ImageSize возвращается коли­чество байт, которое нужно отвести для получения изображения в формате DIB

 

function GetDIBfBitmap: HBITMAP; Palette: HPALETTE; var Bitmaplnfo; var Bits): Boolean; Преобразует DDB (определенную через Bitmap и Palette) в DIB. Заголовок помещается в Bitmaplnfo, а сами данные — в Bits

 




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 410; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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