Заранее предсказать размер сжатого файла нельзя - разные картинки сжимаются по-разному, даже при одном значении CompressionQuality.
По умолчанию значение этого свойства равно 75, что обеспечивает разумный компромисс между размером и качеством.
Кроме CompressionQuality, на качество отображения может повлиять и свойство
type TJPEGPerformance = {jpBestQuality, jpBestSpeed);
property Performance: TJPEGPerformance;
Оно нужно только при распаковке и отвечает за способ восстановления цветовой палитры из сжатой информации. На качество записываемого изображения оно никак не влияет.
Как и у класса TBitmap, у TJPEGimage есть свойство
typa TJPEGPixelFormat = (jf24Bit, jfSBit);
prcperty PixelFormat: TJPEGPixelForm;
Для рассматриваемого объекта возможных значений всего два- jf8bit и jf24bit. По умолчанию используется 24-битный формат. Если информация о цвете не нужна, то можно установить свойство Grayscale в значение True - в этом случае изображение будет записано (или распаковано) в полутоновом виде (256 оттенков серого).
Свойства ProgressiveEncoding И ProgressiveDisplay определяют способ ПО-каза изображения при распаковке. Первое из них отвечает за порядок записи в файл сжатых компонентов. Если ProgressiveEncoding установлено В значение True, начинает играть роль СВСЙТЮ ProgressiveDisplay. От его значения зависит, будет ли показываться изображение по мере распаковки (при значении True), либо будет сначала полностью распаковано, а потом показано (при значении False).
Чтобы организовать предварительный просмотр большого числа больших изображений, уместно воспользоваться свойством:
type TJPEGScale = (jsFullSize, jsHalf, jsQuarter, jsEighth);
property Scale: TJPEGScale;
Искушенные в графике специалисты зададут вопрос: зачем оно? Ведь можно прочитать изображение, а затем уменьшить его масштаб стандартными способами? Представление информации в файлах JPEG таково, что можно достаточно просто извлечь изображение сразу в нужном масштабе. Таким образом достигается двойной выигрыш - на времени распаковки и на времени отображения.
(_Примечание ^
Печать растровых изображений может вызвать проблемы при согласовании его размеров с размерами листа принтера и его разрешением. Большую часть из них можно снять, изучив пример, поставляемый с Delphi - jpegProj. Он находится не в папке \Demos, как обычно, а в папке Help\Examples\Jpeg.
В заключение отметим, что класс TjPEGirrfâge не имеет своей канвы для рисования - для этого его нужно преобразовать в классе TBitmap.
Компонент Tlmage
Этот компонент служит надстройкой над классом TPicture и замыкает всю иерархию графических объектов VCL. Именно на его поверхности и будут отображаться графические объекты, содержащиеся в свойстве:
prcperty Picture: TPicture;
В качестве канвы компонента (свойство canvas) используется канва объекта из свойства Picture.Graphic, но только если поле Graphic ссылается на объект класса TBitmap. Если это не так, то попытка обращения к свойству вызовет исключительную ситуацию EinvalidOperation, т. к. рисовать на метафайле или значке нельзя.