Известно что стандарт JPEG предусматривает сжатие с потерями

Известно, что стандарт JPEG предусматривает сжатие с потерями
качества. Примененный в JPEG алгоритм позволяет достичь сжатия в
десятки раз – правда, при этом изображение подвергается необрати-
мому искажению, и из него пропадает часть деталей. Бессмысленно
подвергать хранению в формате JPEG чертежи, рисунки, а также лю-
бые изображения с малым числом градаций – он предназначен именно
для изображений фотографического качества.
Поддержка формата JPEG реализована в Delphi посредством класса
TJPEGImage, который описан в модуле JPEG (подключается в uses).
Свойства класса TJPEGImage можно условно разделить на две
группы: используемые при сжатии и при распаковке. Некоторые из
них описаны в табл. 1.9.
Таблица 1.9. Некоторые свойства класса TJPEGImage


К объекту класса TJPEGImage предъявляются двоякие требования.
С одной стороны, он должен поддерживать сжатие данных для записи
на диск, с другой — распакованные данные в формате DIB, чтобы по
требованию системы отрисовать их. Поэтому объект класса
TJPEGimage может хранить оба вида данных, а также производить их
взаимные преобразования, т. е. сжатие и распаковку. Для этого в нем
предусмотрены методы:
procedure Compress;
procedure DIBNeeded;
procedure JPEGNeeded;

Рекомендуется вызывать метод DIBNeeded заранее, перед отрисов-
кой картинки — это ускорит процесс ее вывода на экран.
Следует отметить, что класс TJPEGImage не имеет своей канвы для
рисования — для этого его нужно преобразовать в класс TBitmap. Для
этого полезно использовать метод Assign, который позволяет помес-
тить в класс TBitmap объект TJPEGImage и наоборот:
MyBitmap.Assign(MyJPEGImage);
MyJPEGImage.Assign(MyBitmap);

При этом происходит преобразование форматов.
Пример. Создадим конвертер картинок из формата .bmp в формат
.jpeg. Для этого понадобится компоненты: TImage (для просмотра кар-
тинок), две кнопки TButton (для открытия диалога выбора картинок и
для запуска процесса), TTrackBar (для того чтобы устанавливать каче-
ство картинки) и TOpenDialog. Для OpenDialog1 настроим фильтр,
чтобы можно было открывать только картинки в формате .bmp.
Обработчик события OnClick для первой кнопки может иметь та-
кой вид:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Opendialog1.Execute
then Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;

Далее необходимо написать основную часть программы, то есть
создание jpeg-изображения. Все действия будем производить по щелч-
ку на второй кнопке. Необходимо будет создать объект типа TJpegImage,
провести с ним необходимые действия, а потом с помощью ме-
тода Compress, упаковать изображение и остается только сохранить
изображение в файл. Еще необходимо настроить свойства TrackBar’a:
свойство Max надо сделать равным 100 и свойство Position равным
также 100. Тогда обработчик нажатия на вторую кнопку может быть
таким:
procedure TForm1.Button2Click(Sender: TObject);
var
jpg: TJpegImage;
begin
jpg:=TJpegImage.Create; //создаем экземпляр объекта
//присваиваем ему изображение
jpg.Assign(Image1.picture.graphic);
//устанавливаем степень сжатия (качество) 1..100
jpg.CompressionQuality:=TrackBar1.Position;
jpg.Compress; //упаковываем графику
jpg.SaveToFile(‘C:\Pic\first.jpg’); //сохраняем графику
jpg.free; //уничтожаем экземпляр объекта
end;

РАБОТА С ГРАФИКОЙ В DELPHI
Класс TGraphicsObject
Класс ТРen
Класс TBrush
Класс TFont
Класс TCanvas
Класс TGraphicControl
Класс TShape
Класс TPaintBox
Класс TImage
Использование битовых образов, их загрузка из файла ресурсов
Метод базовой точки
Перемещение объекта по траектории
Класс TGraphic
Класс TBitmap
Класс TIcon
Класс TMetafile
ПЕРЕТАСКИВАНИЕ КОМПОНЕНТОВ В ОКНЕ ПРИЛОЖЕНИЯ

Понравилась статья? Поделиться с друзьями: