КАТЕГОРИИ: Архитектура-(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; Просмотров: 441; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |