На этом шаге рассмотрим форматы графических файлов.
Растровые изображения представляют собой набор цветовых значений, именуемых пикселами. Пикселы — это "клеточки", формирующие графический образ на устройстве вывода. Глаз человека не способен различать отдельные такие клеточки, поэтому мозг синтезирует общую картину, соединяя их в одно целое.
Растровые изображения можно как записывать в файлы разных форматов, так и загружать из них. Qt поддерживает следующие растровые форматы: PNG, BMP, XBM, XPM, PNM, JPEG, MNG, GIF, PNM, PBM, PGM и PPM. Приведем описание некоторых наиболее распространенных форматов.
Если вы написали приложение с поддержкой графических файлов и собираетесь передать его клиентам, то не забудьте позаботиться о том, чтобы система расширений для нужных форматов была вместе с вашим приложением. Например, для ОС Windows сами файлы системы расширений qgif4.dll, qico4.dll, qjpeg4.dll, qtiff4.dll должны находиться в каталоге <MyApplication>/imageformats/. Для Linux используется тот же подкаталог, а для Mac OS X используйте утилиту "macdeployqt", которая сделает эту работу за вас. Иначе файлы этих форматов отображаться не будут.
Формат BMP (сокр. от Bit map) является растровым форматом для ОС Windows и используется для хранения практически всех типов растровых данных, а также поддерживает любые разрешения экрана. Данные в этом формате почти всегда хранятся в несжатом виде и поэтому занимают сравнительно много места. Структура формата BMP тесно связана с интерфейсом прикладного программирования (API) для ОС Windows. Формат BMP никогда не рассматривался как переносимый и не использовался для обмена растровыми изображениями между операционными системами, но с поддержкой этого формата в Qt все изменилось — он стал платформонезависимым.
Формат GIF (Graphics Interchange Format) — это формат обмена графическими данными. Он один из самых популярных растровых форматов в сети Интернет. Основное преимущество этого формата состоит в высокой степени сжатия без потерь, что достигается применением алгоритма сжатия LZW (Lempel-Ziv-Welch, по фамилиям разработчиков Лемпель, Зив и Велч). GIF поддерживает и анимацию. Недостатками этого формата являются поддержка только 8-битной глубины цвета и требование лицензионных отчислений за каждую программу, использующую LZW-алгоритм.
Формат PNG (Portable Network Graphics) — переносимая сетевая графика. Этот формат разработан как альтернатива GIF в пику юридическим сложностям, связанным с требованиями оплаты при использовании. Неофициальная трактовка названия PNG — "PNG's Not GIF" ("PNG — это не GIF"). Подавляющее большинство Web-браузеров поддерживают этот формат, который не сложен в реализации, а по своим функциональным возможностям даже превосходит GIF. PNG распространяется бесплатно, что позволяет избежать бремени лицензионных платежей и патентных сборов. Как и в формате GIF, обеспечивается сжатие данных без потерь и поддерживается прозрачность, кроме того, поддерживается глубина цвета до 48 бит.
В качестве альтернативы для анимированных файлов формата GIF можно использовать формат MNG, хранящий в себе серии изображений формата PNG.
Формат JPEG получил свое название от Joint Photographic Experts Group — объединенная экспертная группа по фотографии (организация, разработавшая стандарт и метод сжатия). Этот формат разрабатывался с 1991 по 1993 г., после чего был стандартизирован. Его отличительная особенность — это очень высокая степень сжатия, но с потерей информации, поэтому файлы такого формата используются, в основном, для хра-нения фотографических изображений, т. к. именно на таких картинках обеспечиваются наименьшие погрешности.
XPM (XPixMap) — это распространенный в системе X11 (UNIX) формат. Мы привыкли к тому, что изображение хранится в виде двоичной информации, но в XMP-формате данные хранятся в виде исходного кода на языке С, который можно вставлять в свои программы. Это позволяет превратить обычный текстовый редактор в инструмент для создания и изменения растровых изображений. Формат можно использовать для любых разрешений экрана и 24-битной глубины цвета.
Ввиду того, что формат неэкономично расходует дисковое пространство, его лучше использовать для небольших по размеру растровых изображений. Этот формат очень интенсивно использовался до третьей версии Qt, но с появлением в четвертой версии системы ресурсов его использование потеряло былую актуальность, т. к. стало возможным включать в исполняемый код программы и библиотеки более экономичные форматы, такие, например, как PNG и JPEG.
На следующем шаге рассмотрим класс QImage.