Класс TMetafileCanvas

 

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

У класса TMetafileCanvas переопределен конструктор:

constructorCreate(AMetafile: TMetafile; ReferenceDevice: HDC);

 

Конструктор создает экземпляр холста метафайла и выделяет ему дескриптор. Параметр AMetafile соответствует объекту TMetafile; параметр ReferenceDevice – дескриптор графического устройства.

procedureNewMetafile;

varmtf:TMetaFile;

Begin

Try

mtf:=TMetaFile.Create;

WithTMetaFileCanvas.Create(mtf,0) do

Begin

Brush.Color := clRed;

Ellipse(0,0,100,100);

Brush.Color := clYellow;

Rectangle(25,25,50,50);

Destroy;

end;

Form1.canvas.draw(0,0,mtf);

mtf.savetofile('C:\Metafile.emf');

Finally

mtf.free;

end;

end;

 

Процедура NewMetafile создает векторный рисунок из двух объектов: красного эллипса и желтого квадрата, затем сохраняет метафайл в формате EMF. Еще одно дополнение класса TMetafileCanvas – конструктор, отвечающий за внесение в метафайл справочной текстовой информации (вспомните свойства класса TMetafile: CreatedBy и Description):

constructorCreateWithComment(AMetafile: TMetafile; ReferenceDevice: HDC; constCreatedBy, Description: string);

 

Класс TMetafileCanvas

 

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

У класса TMetafileCanvas переопределен конструктор:

constructorCreate(AMetafile: TMetafile; ReferenceDevice: HDC);

Конструктор создает экземпляр холста метафайла и выделяет ему дескрип-

тор. Параметр AMetafile соответствует объекту TMetafile; параметр Reference-Device – дескриптор графического устройства.

 

procedureNewMetafile;

varmtf:TMetaFile;

Begin

Try

mtf:=TMetaFile.Create;

WithTMetaFileCanvas.Create(mtf,0) do

Begin

Brush.Color := clRed;

Ellipse(0,0,100,100);

Brush.Color := clYellow;

Rectangle(25,25,50,50);

Destroy;

end;

Form1.canvas.draw(0,0,mtf);

mtf.savetofile('C:\Metafile.emf');

Finally

mtf.free;

end;

end;

Процедура NewMetafile создает векторный рисунок из двух объектов: красного эллипса и желтого квадрата, затем сохраняет метафайл в формате EMF. Еще одно дополнение класса TMetafileCanvas – конструктор, отвечающий за внесение в метафайл справочной текстовой информации (вспомните свойства класса TMetafile: CreatedBy и Description):

 

constructorCreateWithComment(AMetafile : TMetafile; ReferenceDevice : HDC; constCreatedBy, Description: string);

 

 

Класс TJPEGImage

 

Класс TJPEGImage инкапсулирует возможности популярного в Интернете и в домашней электронной фотографии формата сжатой растровой картинки Windows, называемого JPEG (Joint Photographic Expert Group). Формат JPEG был специально разработан для хранения 24-битных изображений в файлах малого размера. Метод сжатия, используемый в JPEG-файлах, допускает некоторые потери качества изображения, причем, чем больше степень сжатия, тем больше необратимые ухудшения.

Для поддержки проектом Delphi сжатых картинок подключите к нему модуль Jpeg. К особенностям класса TJPEGImage следует отнести: отсутствие у него холста (хотя объект JPEG может нарисовать себя на холсте других объектов); класс не обеспечивает попиксельного доступа к своему растровому изображению; благодаря объекту TJPEGData допускает совместное использование своего дескриптора. Объект JPEG обязан не только сжимать растровые изображения, но и отображать распакованные данные в формате DIB. Самый простой вариант взаимодействия между сжатой и обычной растровыми картинками осуществляется при помощи метода Assign():

 

procedureAssign(Source: TPersistent);

В этом случае выполняется автоматическое конвертирование формата из DIB в JPEG или наоборот. Например:

 

varJPG: TJPEGImage;

JPG.Assign(Image1.Picture.Bitmap);

JPG.SaveToFile('c:\Picture.jpg')

 

Для преобразования рисунка в формате JPEG в DIB предназначен метод:

 

procedureDIBNeeded;

 

Обычно процедура используется перед вызовом метода Draw() холста. Такой подход ускоряет прорисовку картинки. Например:

 

varJPG: TJPEGImage;

JPG.DIBNeeded;

Form1.Canvas.Draw(0,0,JPG);

 

Обратное преобразование из DIB в JPEG осуществляется методом:

 

procedureJPEGNeeded;

 

Для сжатия обычного растрового изображения в формат JPEG прежде всего надо установить качество сжатия. Для этой цели в классе TJPEGImage опубликовано свойство:

 

typeTJPEGQualityRange = 1..100;

propertyCompressionQuality : TJPEGQualityRange;

 

Чем больше значение CompressionQuality, тем меньше потерь качества изображения, но больше размер результирующего файла. С уменьшением этого значения степень сжатия возрастает, но и ухудшается рисунок. По умолчанию значение качества сжатия равно 90.

Сжатие растровой картинки осуществляется методом Compress. Процедура Compress() автоматически вызывается при сохранении объекта JPEG в файл и поток.

procedureCompress;

 

Два взаимосвязанных свойства определяют способ вывода изображения на экран: по мере распаковки (такой метод называют прогрессивной разверткой) или только по завершении распаковки.

 

propertyProgressiveEncoding: Boolean;

propertyProgressiveDisplay: Boolean;

 

Прогрессивная развертка картинки (ProgressiveDisplay = true) возможна только при условии, что файл сохранен в режиме прогрессивного сжатия (ProgressiveEncoding = true). При использовании прогрессивной развертки допустимо сглаживание изображения:

 

propertySmoothing: Boolean;

 

Качество изображения зависит не только от степени сжатия растровой картинки. Ряд свойств класса определяет работу TJPEGImage при декомпрессии и показе изображения. Критерий скорость распаковки/качество изображения задается в свойстве:

 

propertyPerformance: TJPEGPerformance;

typeTJPEGPerformance = (jpBestQuality, jpBestSpeed);

 

При выборе значения jpBestQuality на распаковку файла затрачивается несколько больше времени, но зато получается более качественная картинка. Выбор в пользу jpBestSpeed дает обратный результат. На качество сохраняемого изображения Performance не влияет. Критерий скорость вывода изображения/глубина цветов задается в свойстве:

 

propertyPixelFormat: TJPEGPixelFormat;

typeTJPEGPixelFormat = (jf24Bit, jf8Bit);

 

При выборе значения jf24Bit вы получите полнокровное 24-битное изображение, но на его вывод затратите значительно больше времени, чем на 8-битное. Наряду с уже известным нам методом TCanvas StretchDraw(), позволяющим масштабировать графические объекты (потомки класса TGraphic), класс TJPEGImage поддерживает свой, более эффективный (быстрый) способ масштабирования:

 

propertyScale : TJPEGScale;

typeTJPEGScale = (jsFullSize, jsHalf, jsQuarter, jsEighth);

 

В соответствии со значениями TJPEGScale вы получите изображение в соотношении 1:1, 1:2, 1:4 и 1:8 к размерам исходной картинки.

 








Дата добавления: 2016-03-15; просмотров: 897;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.018 сек.