Графический файл какого формата потребует наибольшего количества памяти
Формат графического файла определяет способ хранения графической информации в файле (растровый или векторный), а также форму хранения информации (используемый алгоритм сжатия для уменьшения объёма файла).
Растровые форматы используются для хранения растровых данных. Файлы этого типа особенно хорошо подходят для хранения реальных изображений, например фотографий и видеоизображений.
Растровые файлы, по сути дела, содержат точную попиксельную карту изображения. Программа визуализации реконструирует это изображение на отображающей поверхности устройства вывода.
Наиболее распространенные растровые форматы — это BMP, GIF, TIFF, JPEG и PSD.
— формат хранения растровых изображений, разработанный компанией Microsoft.
С форматом BMP работает огромное количество программ, так как его поддержка интегрирована в операционные системы Windows и OS/2.
Формат BMP поддерживается всеми графическими редакторами, работающими под ее управлением, способен хранить как индексированный (до 256 цветов), так и RGB-цвет ( 16,7 млн. оттенков).
Имена файлов BMP используют расширения *.bmp, *.dib и *.rle
— стандартный растровый формат представления изображений в WWW.
Формат GIF позволяет хорошо сжимать файлы, в которых много однородных заливок (логотипы, надписи, схемы), записывать изображение "через строчку" (Interlaced mode), благодаря чему, имея только часть файла, можно увидеть изображение целиком, но с меньшим разрешением.
Применяется для хранения рисунков и анимации в Интернете.
Имена файлов GIF используют расширение *.jpg .
TIFF используется в полиграфии, при печати изображений.
TIFF может сохранять векторную графику программы Photoshop, Alpha-каналы для создания масок в видеоклипах Adobe Premiere и др.
Имена файлов TIFF используют расширение *.tiff и *.tif.
— один из популярных графических форматов, применяемый для хранения фотоизображений.
Алгоритм JPEG в наибольшей степени пригоден для сжатия фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета. Наибольшее распространение JPEG получил в цифровой фотографии и для хранения и передачи изображений с использованием сети Интернет.
JPEG не подходит для сжатия изображений при многоступенчатой обработке, так как искажения в изображения будут вноситься каждый раз при сохранении промежуточных результатов обработки.
Имена файлов JPEG используют расширения: .jpg, .jfif, .jpg, .JPG, или .JPE.
— формат фирмы Adobe Photoshop с неразрушаемым сжатием.
Формат PSD обеспечивает хранение полноцветных изображений со всеми их особенностями, каналами, масками, различными слоями, векторными фигурами, контурами, эффектами и т.п., известными и понятными только этой программе. Особо рекомендуется использовать при работе с Photoshop.
Имена файлов PSD используют расширение *.psd.
Векторные изображения состоят из математических формул, описывающих простые графические объекты, из которых и состоит векторный файл. Такой файл содержит информацию о том, где и какой объект находится.
Векторные изображения различных форматов различает способ их создания и принципы кодирования графических объектов.
Наиболее распространенных векторных форматов — WMF и CDR.
Данная разработка урока применяется в 9 классе при изучении темы «Растровая и векторная графика» по программе Н.Д. Угриновича. На уроке используется презентация «Растровая и векторная графика», а также применяется ЦОР, скачанный с Интернета: Видеоролик «Мона Лиза, нарисованная в Paint ».
В презентации к уроку в заметках к слайдам прокомментирована организация деятельности школьников на разных этапах урока.
План-конспект урока.
Тип урока: урок усвоения новых знаний.
Образовательная – познакомить учащихся с особенностями растровой и векторной графики, выявить достоинства и недостатки растровой и векторной графики, познакомить с форматами графических файлов.
Развивающая – продолжить развитие познавательных психических и эмоционально-волевых процессов: внимание, память, воображение.
Воспитательная – воспитывать внимательность, аккуратность, интерес к предмету.
Оборудование:
пакет Microsoft Office 2007,
Изучение нового материала:
Растровые графические редакторы
Векторные графические редакторы
Форматы графических файлов
Подведение итогов урока.
(название, время)
Сценарий этапа урока
(задания, деятельность учителя, учеников)
Слайды (изображение или текстовое описание)
Учитель сообщает тему урока. Совместно с учащимися определяют цели урока.
Учитель: Ребята, на прошлом уроке мы начали изучение графики, выяснили, как она кодируется. И сегодня мы продолжим изучение, но будем уже говорить о видах графики. Открывайте тетради, записывайте число и тему урока «Растровая и векторная графика»
Учащиеся записывают тему урока
2. Изучение нового материала.
Растровая графика
Учитель: Начнем мы с того, что же такое компьютерная графика? Запишем в тетрадь определение.
Компьютерная графика - раздел информатики, предметом которого является работа на компьютере с графическими изображениями (рисунками, чертежами, фотографиями, и пр.).
Учащиеся записывают определение в тетрадь.
Учитель: Как вы уже поняли из названия нашей темы, все компьютерные изображения можно разделить на два больших класса: растровые и векторные изображения. Так в чем же их отличие? Зарисуйте эту схему
Итак, начнём мы с растровой графики.
Учащиеся зарисовывают схему в тетрадь
Учитель: Принцип растровой графики чрезвычайно прост. Он был изобретен и использовался людьми за много веков до появления компьютеров. Во-первых, это такие направления искусства, как мозаика, витражи, вышивка. В любой из этих техник изображение строится из одиночных элементов.
Учитель: Растровые изображения формируются из точек различного цвета (пикселей), которые образуют строки и столбцы. Что такое пиксель мы уже изучили. Давайте вспомним определение: Пиксель – это минимальный участок изображения, которому независимым образом можно задать цвет.
Учитель: Обратите внимание: на рисунке изображена таблица с квадратными ячейками, закрашенными в определенный цвет. Каждая такая ячейка рисунка называется пикселем.
Растровая графика работает с сотнями и тысячами пикселей, которые формируют рисунок. Пиксели «не знают», какие объекты они составляют, лишь только уже из группы составленных пикселей можно сказать, какой объект в итоге мы видим.
Учащиеся записывают в тетрадь, из чего формируются растровые изображения
Учитель: Примерами растровой графики являются сканированные фотографии, цифровые фотографии и изображения, созданные в различных растровых графических редакторах.
(Слайд 6) Учитель: Качество растрового изображения зависит от двух факторов:
1) от расстояния между соседними пикселями. Если вам когда-то приходилось снимать ксерокопию, то вы наверняка обращали внимание, что ксерокопия всегда получается намного хуже оригинала. Это происходит потому, что на ксерокопии число единиц изображения, приходящихся на единицу длины, намного меньше, чем на фотографии. Этим и вызвано ухудшение качества.
2) от количества цветов в изображении. Как известно, глаз человека способен различать 350 тысяч цветов. Чем больше цветовых оттенков используется в изображении, тем ближе оно будет к реальности и тем выше будет его качество.
Достоинства:
Растровая графика позволяет создать (воспроизвести) практически любой рисунок, вне зависимости от сложности;
Распространённость — растровая графика используется сейчас практически везде: от маленьких значков до плакатов;
Высокая скорость обработки сложных изображений, если не нужно масштабирование;
Растровое представление изображения естественно для большинства устройств ввода-вывода графической информации, таких как мониторы, матричные и струйные принтеры, цифровые фотоаппараты, сканеры.
Беседа с учащимися
Большой размер файлов с простыми изображениями.
Невозможность идеального масштабирования. Увеличение изображение приводит к тому, что точки растра становятся крупнее, что визуально искажает иллюстрацию и делает ее грубой. Уменьшение картинки, наоборот, не позволит различить мелкие детали изображения
Невозможность вывода на печать на плоттер.
Беседа с учащимися
Графический редактор
Учитель: Чтобы создать графическое изображение, необходимо воспользоваться специальной программой – графическим редактором.
Как вы думаете, что такое графический редактор?
Запишите определение: Графический редактор – это программа для создания, редактирования и просмотра графических изображений.
Растровые графические редакторы являются наилучшим средством обработки цифровых фотографий и отсканированных изображений, поскольку позволяют повышать их качество путем изменения цветовой палитры изображения и даже цвета каждого отдельного пикселя. Можно повысить яркость и контрастность старых или некачественных фотографий, удалить мелкие дефекты изображения (например, царапины), преобразовать черно-белое изображение в цветное и т. д.
Кроме того, растровые графические редакторы можно использовать для художественного творчества путем применения различных эффектов преобразования изображения. Обычную фотографию можно превратить в мозаичное панно, рисунок карандашом или рельефное изображение.
Учащиеся записывают определение в тетрадь
Растровые графические редакторы
Растровые графические редакторы
Вы можете без труда привести пример растрового графического редактора – это всем известный Paint. К этой же группе относится и мощный графический пакет компании Adobe – Photoshop. Этой программой пользуются как начинающие пользователи, так и профессиональные художники и дизайнеры. И его конкурент из приложений, разрабатываемых по лицензии GNU General Public License — GIMP, с которым мы и будем работать.
Беседа с учащимися. Использование ЦОР: Видеоролик «Мона Лиза, нарисованная в Paint »
Векторная графика
Учитель: Помимо растровой графики существует еще один, качественно отличный от нее тип изображений – векторный. Давайте рассмотрим его подробнее. Векторные рисунки используются для хранения высокоточных графических объектов (рисунков, чертежей и схем), для которых имеет значение сохранение четких и ясных контуров.
Учитель: Векторное изображение создается из графических примитивов, (линий, окружностей, прямоугольников и т.д.) и описывается математическими формулами. Так, векторное изображение стрелки будет выглядеть так же, как на слайде. Изображение создается в некоторой системе координат и состоит из трех линий. Положение каждой линии задается положением начальной и конечной точек в системе координат и описывается математическими формулами.
Векторные рисунки формируются из базовых графических объектов, для каждого из которых задаются координаты опорных точек, формулы рисования объекта, а также цвет, толщина и стиль линии его контура.
Учащиеся записывают в тетрадь, как создается векторное изображение
Достоинства:
Учитель: Векторная графика лишена тех недостатков, которые присущи растровым изображениям.
Во-первых, для хранения векторного изображения не требуется большого количества памяти, так как компьютеру не нужно помнить местоположение и цвет каждого пикселя в отдельности. Во-вторых, при увеличении размеров изображения изменяются координаты начальной и конечной точки, а, следовательно, не происходит потери качества.
Итак, запишите: основными достоинствами растровой графики являются: 1) небольшой объем 2) масштабирование без потери качества.
Беседа с учащимися
Векторная графика не позволяет получить изображение фотографического качества, а также не каждый объект может быть легко изображен в векторном виде.
Перевод векторной графики в растр достаточно прост. Но обратного пути, как правило, нет — трассировка растра обычно не обеспечивает высокого качества векторного рисунка.
Векторная графика описывается тысячами командами и при распечатке выглядит не так как на мониторе. Это связано с тем, что принтеры работают по растровой схеме, то есть печатают попиксельно, а так как векторная графика не содержит пикселей, следовательно принтеру тяжело распечатать картинку в идеальном качестве.
Беседа с учащимися
Векторные графические редакторы
Векторные графические редакторы:
Учитель: С векторным графическим редактором вы тоже уже знакомы – это графический редактор, встроенный в приложение MS Word. Кроме того, в группу векторных редакторов входит пакет программ CorelDraw и программа для создания мультипликации Mac romedia Flash. Векторный графический редактор, с которым мы будем знакомиться, называется Inkscape .
Беседа с учащимися о векторных графических редакторах. С каким же векторным графическим редактором мы будем знакомиться в операционной системе Linux ? Inkscape
Форматы графических файлов
Форматы растровых графических файлов
Учитель: Теперь вы должны ознакомиться с форматами графических файлов. Как вы знаете, форматы графических файлов определяют способ хранения информации в файле.
Вспомните, какие форматы текстовых файлов вы знаете? (выслушиваются ответы учащихся). Изображения, созданные в графических редакторах, тоже имеют свой формат. Их очень много, мы рассмотрим наиболее употребительные из них.
1) Формат BMP – это универсальный растровый формат. Этот формат имеют все изображения, созданные во встроенном графическом редакторе Paint. Универсальным он называется, потому что поддерживается большинством существующих в настоящее время приложений. Картинку, созданную в Paint, вы можете вставить и в Word, и в Excel, и в презентацию, и даже, если хотите, в Photoshop.
2) Формат GIF – растровый, поддерживается не только операционной системой Windows, но и многими другими. Его рекомендуется использовать для хранения изображений с небольшим количеством цветов (до 256) – графиков, диаграмм и т.д. Также он очень удобен для размещения графики и анимации в сети Интернет.
3) Формат PNG – усовершенствованный вариант формата GIF .
4) Формат JPEG – наиболее распространенный растровый формат, практически идентичный формату GIF. Основные отличия его состоят в том, что он использует другой алгоритм сжатия (с потерей качества информации) и не предназначен для хранения анимированных рисунков.
5) Формат TIFF – тоже растровый формат. Применяется он в тех случаях, когда необходимо уменьшить размер графического файла без потери его качества. Поэтому этот формат нашел широкое применение в полиграфической и издательской деятельности.
Учащиеся конспективно записывают форматы растровых графических файлов
Форматы векторных графических файлов
WMF – этот формат используется для хранения коллекции графических изображений Microsoft Clip Gallery .
ODG – собственный формат программы OpenOffice . org Draw
CDR – собственный формат программы CorelDraw
SVG – собственный формат программы Inkscape .
Учащиеся конспективно записывают форматы векторных графических файлов
3. Подведение итогов урока
Теперь давайте подведем итоги урока.
I . (Слайды 19-25) Тест (6 вопросов)
Графика, представляемая в памяти компьютера в виде совокупности точек, называется:
Графика, представляемая в памяти компьютера в виде математического описания объектов, называется:
Простейшие графические объекты (овал, прямоугольники и т.п.), создаваемые инструментами графического редактора, называются:
1) Геометрические объекты
Выберите из предложенного списка расширения графических файлов.
Формат, который понимают все растровые графические редакторы, - .
Графический файл какого формата потребует наибольшего количества памяти?
Где применяется компьютерная графика?
На какие типы делятся графические изображения?
Из каких элементов строится растровое изображение?
Из каких элементов строится векторное изображение?
От чего зависит качество растрового изображения?
Какие изменения происходят с растровым изображением при масштабировании?
Какие изменения происходят с векторным изображением при масштабировании?
4. Домашнее задание.
Запись в тетради
Перечень используемых источников.
Н.Д. Угринович. Информатика и ИКТ. 9 класс, М., БИНОМ, 2010
М.Г. Гилярова. Информатика. 9 класс. Поурочные планы по учебнику Угриновича Н.Д. Волгоград, ИТД Корифей, 2009
Простейшие графические объекты (овал, прямоугольники и т.п.), создаваемые инструментами графического редактора, называются:
Выберите один из 4 вариантов ответа:
3) Геометрические объекты.
Графика, представляемая в памяти компьютера в виде совокупности точек, называется:
Выберите один из 4 вариантов ответа:
Графика, представляемая в памяти компьютера в виде математического описания объектов, называется:
Выберите один из 4 вариантов ответа:
Качество растрового изображения оценивается:
Выберите один из 4 вариантов ответа:
1) Количеством пикселей.
2) Количеством пикселей на дюйм изображения.
3) Размером изображения.
4) Количеством бит в сохраненном изображении.
Элементарным объектом векторной графики является:
Выберите один из 4 вариантов ответа:
Элементарным объектом растровой графики является:
Выберите один из 4 вариантов ответа:
1) То, что рисуется одним инструментом.
Выберите из предложенного списка расширения графических файлов.
Выберите несколько из 6 вариантов ответа:
Для чего в растровых редакторах нужен инструмент Пипетка?
Выберите один из 4 вариантов ответа:
1) Для рисования овалов.
2) Для изменения палитры.
3) Для копирования цвета.
4) Для преобразования растровых изображений в векторные.
Для хранения растрового изображения размером 64х64 пикселей отвели 512 байтов. Какого максимально возможное число цветов?
Выберите один из 4 вариантов ответа:
Формат, который понимают все растровые графические редакторы, - .
Выберите один из 4 вариантов ответа:
В системе цветопередачи RGB палитра цветов формируется сложением .
Выберите один из 4 вариантов ответа:
1) Синего, желтого, белого цветов.
2) Синего, красного, белого цветов.
3) Желтого, зеленого, красного цветов.
4) Красного, зеленого, синего цветов.
Что не является графическим примитивом?
Выберите один из 4 вариантов ответа:
Графический файл какого формата потребует наибольшего количества памяти?
Выберите один из 4 вариантов ответа:
Черно-белое (без градаций серого) растровое графическое изображение имеет размер 10х10 точек. Какой объем памяти займет это изображение?
Выберите один из 4 вариантов ответа:
Глубина цвета - это .
Выберите один из 4 вариантов ответа:
1) кодирование цвета в палитре.
2) количество информации для кодирования цвета точки изображения.
3) черный и белый цвет из палитры.
4) преобразование изображения.
Цветное (с палитрой 256 цветов) растровое графическое изображение имеет размер 10х10 точек. Какой информационный объем несет изображение?
Выберите один из 4 вариантов ответа:
В мониторе графическая разрешающая способность экрана 800х600, глубина цвета равна 16. Каков объем видео пямяти?
Выберите один из 4 вариантов ответа:
Векторное графическое изображение хорошо поддаётся масштабированию (изменению размеров), так как:
Выберите один из 4 вариантов ответа:
1) Использует большую глубину цвета.
2) Формируется из пикселей.
3) Формируется из графических примитивов (линий, окружностей, прямоугольников и т.д.).
4) Использует эффективные алгоритмы сжатия.
Для размещения изображений на web-страницах используется формат графических файлов:
Выберите один из 4 вариантов ответа:
Растровая и векторная анимация - это .
Выберите один из 4 вариантов ответа:
2) Создание иллюзии движения объектов на экране монитора.
3) Надписи к изображениям.
4) Графические примитивы.
В мониторе разрешающая способность экрана 1024х768, глубина цвета равна 24. Каков объем видео пямяти?
На что при загрузке сайта расходуется больше трафика? Чаще всего это картинки, и их суммарный «вес» частенько в несколько раз больше, чем у разметки, скриптов и стилей. В файлах изображений распространенных форматов растровые данные хранятся в сжатом виде, и это значительно лучше, чем несжатый BMP. А если хочется ещё лучше? Ведь в достаточно крупных проектах каждый байт на счету (например, в TradingView, чего уж там скромничать).
Существует множество утилит для пережатия графики, от узкоспециализированных до всемогущих комбайнов. На хабре уже есть замечательный обзор таких программ, и вопрос, чем можно пережать картинку, рассмотрен более, чем детально.
Но как работают такие программы, что можно улучшить и как сделать свою? Приглашаю на обзорную экскурсию по форматам изображений и алгоритмам сжатия растровых данных.
Средневековье
Восьмидесятые годы прошлого столетия стали временем становления растровой графики. Графика как таковая применялась и раньше, но теперь она стала гораздо более доступна, и не в последнюю очередь на неё повлияла игровая индустрия. Atari 2600 позволяла рисовать нечто более изысканное, чем белый прямоугольник. А Commodore 64 обладал видеопамятью, с настоящими пикселями, и работать с ним было удобнее, чем «переключи цвет не позже 31415-го такта».
Нарисовать на экране Мону Лизу, выставляя пиксели вручную по хитрому алгоритму, трудновато. Да и не нужно, потому что из видеопамяти выдернуть кусок данных и сохранить его в файл, а потом из файла вставить. Такой дамп памяти в Бейсике делался командой BSAVE , а сам формат назывался в честь неё BSAVE'd. Редактировать изображения стало намного удобней, и расцвели пышным цветом простенькие графредакторы, большей частью неотличимые друг от друга.
Но некоторые из редакторов переросли детский возраст и стали весьма удобным и полезным инструментом. Так в 1984 появился PCPaint, в котором можно было рисовать при помощи мыши. Помимо очевидных удобств пользовательсого интерфейса PCPaint давал еще одно преимущество. Дело в том, что дамп BSAVE не включал данных о размере изображения, глубине цвета и палитре, и если видеорежимов было немного (да и цветное изображение вменяемо показывалось в черно-белом режиме) то для палитры приходилось использовать отдельный файлик PAL. В формате PIC редактора PCPaint содержались и палитра, и дамп BSAVE. Это маленький шаг для программиста и гигантский скачок для всего человества. Что-то вроде «а давайте придумаем формат MKV, в котором субтитры можно будет хранить внутри, и чтобы не нужно было их в нужную папочку класть».
Но еще одна проблема оставалась нерешенной: на PC есть BSAVE и на Apple есть BSAVE , но они генерируют файлы разного формата. Это и не удивтельно, внутреннее представление картинки в памяти различалось. Существовали транскодеры, но стало понятно, что долго эта вендор-зависимая кутерьма не продержится. В 1984 компания Truevision представила формат TARGA, более известный как TGA. А в следующем 1985 году свет увидела рисовалка PC Paintbrush. Хотя PC Paintbrush и продавалась хуже, её формат PCX, переносимый и достаточно простой, прожил дольше, чем PIC.
И в TGA, и в PCX данные о размере изображения и палитре хранились в явном виде, без сильной привязки к железу. Это стало возможным, потому как пиксельные данные перестали зависеть о конкретной платформы и представляли из себя просто сканлайны: слева направо, сверху вниз.
Но была ещё одна важная особенность у этих двух форматов, растровые данные в них хранились в сжатом виде. Применяемый алгоритм RLE не был верхом эффективности, но это было уже весьма неплохо.
RLE (Run length encoding) достаточно простой алгоритм, но он хорошо показывает, как работает сжатие данных. Сжать данные без потерь означает, избавиться от избыточности в них. Для этого берем набор данных, находим в них цепочки повторяющихся значений и заменяем их на нечто более компактное.
Обычно RLE переводят как «кодирование длин серий», и такие повторяющиеся значения именуют «серии». И хотя мне больше по душе перевод «прогон», ничего не могу поделать, это уже устоявшися термин.
Скорее всего, Вы уже пользуетесь им. Посмотрим на строку « AAAAAAAAAAAABBBAAAAAAAAA ». Если нам придется продиктовать её по телефону, то это будет звучать как «двенадцать заглавных букв A, три заглавные B, девять заглавных A». Если записать это, получится « 12 A 3 B 9 A », а чтобы не было разночтений, то « 9 A 3 A 3 B 9 A ». Гораздо компактнее.
Возьмем теперь другую строку, « 0KXQsNCx0YDQsNGF0LDQsdGA », и попытаемся её так сжать. Получится « 1 0 1 K 1 X …», стоп-стоп-стоп! Строка получается вдвое длиннее, чем исходная, это же ни разу не сжатие. Модифицируем алгоритм и добавим к цифрам буквы: буква A означает, что следующий символ пишется «как есть»; если B, то два; если C, то три, и так далее. Выходит « X 0KXQsNCx0YDQsNGF0LDQsdGA ». Итого, в лучшем случае мы получаем сжатие в 350%, а худшем случае мы теряем только 4%.
Разумеется, в реальных условиях кодируются обычно байты, а не буквы латинского алфавита, и длины последовательностей кодируются значениями от 0 до 255. Плюс к тому, обычно бессмысленные значения длин серий игнорируются: в нашем примере 1 и A делают одно и тоже, а 0 вообще смысла не имеет. Но это детали, суть остается одна и та же.
Энтропия
Как бы ни хотелось избежать теории, эта вещь слишком важная, чтобы её игнорировать. Вы заметили, что не все последовательности получается сжать? Строки AAAAAAAAAAAABBBAAAAAAAAA и 0KXQsNCx0YDQsNGF0LDQsdGA одной длины, 24 символа, но во второй эти символы более хаотичны, и её сжать труднее.
Чтобы проиллюстрировать это, обратимся к тому, что на первый взгляд не имеет отношения к IT.
Судоку слева содержит 81 цифру и уже решен. Тот, что посередине, содержит меньше информации, 26 цифр, но решив его, можно восстановить все исходные 81.
А вот с судоку справа все очень плохо — из него удалено слишком много данных, и он уже не решается, т.е., исходный набор данных мы уже не получим.
Но вернемся к PCX и займемся тем, чего уже лет десять никто не делал, создадим файл PCX, причем вручную. Знать свой инструмент нужно, поэтому обратимся с спецификации, и узнаем, что представляет из себя этот формат. Вот основные тезисы:
- Изображение может иметь размеры до 65536×65536. Палитра до 256 цветов, либо 24-битный цвет без палитры. Заголовок всегда размером 128 байт, содержит размер изображения, количество цветов и палитру до 16 цветов по одному байту на канал. Естественно, 256-цветовая палитра в такой заголовок не влезет, и если она есть, она дописывается в конец файла и имеет размер 769 байт (1 байт сигнатуры и 256×3 байт данных). Есть ещё поле для палитры CGA, но она более не поддерживается.
- «Сырой» поток данных состоит из сканлайнов — горизонтальных линий в один писель. Внутри каждого сканлайна может быть до 4 битовых плоскостей: R, G, B, A. Все плоскости пишутся последовательно: RRRRGGGGBBBBAAAA . Плоскости состоят из строго чётного количества байтов, и при необходимости к сырым данным дописываются заполнители, чтобы это условие выполнялось. Такие данные-заполнители при декодировании игнорируются.
- Сжатие «сырых» растровых данных производится построчно, при помощи RLE. «Построчно» означает, что серия RLE не может выходить за пределы битовой плоскости.
- В RLE байтовые значения от 192 до 255 кодируют количество повторений символа от 0 до 63 раз соответственно. Остальные значения — литеральные, если ни встречаются на том месте, где ожидается количество повторений, считается, что они повторяются один раз.
PCX на практике
Теперь давайте на примере разберем этот шмат технических данных. Возьмем для примера такую вот картинку (17×8, для удобства увеличена в 8 раз):
Определимся с палитрой. В изображении три разных цвета, поэтому нам подходят палитры из 4, 16 и 256 цветов, а также Truecolor. В 4-цветовой палитре у нас будет в одном байте 4 значения (8 бит байта поделить на 2 бита номера в палитре); в 16-цветовой — 2 пикселя на байт; в 256-цветовой — пиксель на байт (плюс 769 байт дополнительной палитры); в Truecolor — три байта на пиксель. Выбор очевиден, 4 цвета.
Цвета расположим, например, так:
Теперь выписываем битовые значения первой строки, начиная со старших битов. Листинг в четверичной системе, разделители — границы байтов.
0000 0000 0000 0000 0
Получается 4,25 байта. RLE с дробными байтами не работает, добиваем до пяти.
0000 0000 0000 0000 0 000
В документации сказано, что в сканлайне должно быть чётное количество байт. Делать нечего, добиваем ещё.
0000 0000 0000 0000 0 000 0000
То же самое проделываем с остальными строками, получаем:
0000 0000 0000 0000 0 000 0000
0111 1111 1111 1111 0 000 0000
0121 2121 2121 2121 0 000 0000
0212 1212 1212 1212 0 000 0000
0222 2222 2222 2222 0 000 0000
0202 0202 0202 0202 0 000 0000
0020 2020 2020 2020 0 000 0000
0000 0000 0000 0000 0 000 0000
Теперь посмотрим, какие значения можно сжать. Отметим только последовательности одинаковых байтов длиннее 2, потому что кодирование серии в 2 байта займет 2 байта, и смысла в этом особого нет.
0000 0000 0000 0000 0 000 0000
0111 1111 1111 1111 0 000 0000
0121 2121 2121 2121 0 000 0000
0212 1212 1212 1212 0 000 0000
0222 2222 2222 2222 0 000 0000
0202 0202 0202 0202 0 000 0000
0020 2020 2020 2020 0 000 0000
0000 0000 0000 0000 0 000 0000
Обратите внимание, что хотя нулевые байты в конце предпоследней строки так и просятся прицепиться к последней строке, этого сделать не получится, границу сканлайна пересекать нелья.
Теперь ход конём. В спецификации нигде не написано, чем именно нужно добивать сканлайны до чётного количества байт. Все равно, эти значения декодер выкинет. Поэтому можем сэкономить аж два байта, сделав вот так:
0000 0000 0000 0000 0 000 0000
0111 1111 1111 1111 0 000 0000
0121 2121 2121 2121 0 000 0000
0212 1212 1212 1212 0 000 0000
0222 2222 2222 2222 0 000 0000
0202 0202 0202 0202 0 202 0202
0020 2020 2020 2020 0 000 0000
0000 0000 0000 0000 0 000 0000
Закодируем получившееся в RLE. Пожалуй, будет удобней перейти к более привычному шестнадцатеричному виду:
00 00 00 00 00 00
15 55 55 55 00 00
19 99 99 99 00 00
26 66 66 66 00 00
2A AA AA AA 00 00
22 22 22 22 22 22
08 88 88 88 00 00
00 00 00 00 00 00
Кодируем первую строку. 6 байт 0x00 . Повтору 6 раз соответсвует значение 192 + 6 = 198 или C6 . После него пишем, какое же значение мы собираемся повторять 6 раз, получается 0xC6 0x00 . Первый сканлайн готов.
Далее три одинаковых байта становятся 0xC3 0x55 .
И в конце строки два нулевых байта, которые можно представить двумя способами: в лоб, 0x00 0x00 , или более хитро, 0xC2 0x00 . И так и сяк два байта. На девушек произвести впечатление хитрым приёмом вряд ли получится, а других причин делать вещи заковыристее, чем требуется, нету, поэтому берем просто 0x00 0x00 .
Продолжая подобным образом, получим:
PCX на практике 2: палитра
Возьмем теперь другое изображение и снова переведем его в PCX, пытаясь максимально сжать. На этот раз картинка поменьше, 7×5.
Это НЛО. Знаю, что не очень похоже.
Перво-наперво, выберем глубину цвета: 2 бита. Это четыре цвета, как раз, сколько нам и нужно. Определяем палитру, например, так:
Теперь очередь растровых данных. Второй раз утомительный процесс выписывания циферок производить не будем, сразу запишем сырые данные и то, что из них получилось, в шестнадцатеричном виде.
Сырые данные | Сжатые данные |
0F C0 3A B0 FF FF D9 9C 3F F0 | 0F C1 C0 3A B0 C2 FF C1 D9 9C 3F C1 F0 |
Упс! Сжатые данные получились больше по размеру, чем исходные. Это потому, что значения от 0xC0 до 0xFF — это маркеры количества повторений, и их нельзя записать просто так. Вместо 0xC0 пришлось подставить C1 C0 , вместо 0xF0 — 0xC1 0xF0 и так далее.
В случае 0xFF 0xFF нам повезло — там мы драгоценных байт не потеряли. Но в целом выходит унылая картина: теперь RLE вместо того, чтобы помогать, только мешает.
В сторону безысходность, посмотрим, что с этим можно сделать. Маркерами являются байты с двумя старшими битами равными единице, 11XXXXXX. Данные пишутся последовательно, начиная со старшего бита. Зачит, при двухбитной глубине цвета на то, будет ли байт маркером или нет, влияют пиксели по смещению 4×n. А именно, пиксели цвета под номером 3 (в нашем случае, темно-серый).
Вот они, виновники разрастания размеров файла. В третьей строке темно-серые пиксели тоже попадают в выделенные колонки, но погоды они нам не делают: сама строка при кодировании даст два одинаковых байта.
Порядок цветов в палитре мы определяем сами, поэтому выберем в качестве цвета номер 3 тот, который меньше всего встречается по смещению 4×n. Синий — лучший кандидат, он не встречается на таких местах вообще ни разу. Переопределяем палитру и делаем вторую попытку.
Сырые данные | Сжатые данные |
0A 80 25 60 AA AA B7 78 2A A0 | 0A 80 25 60 AA AA B7 78 2A A0 |
Сжатые данные оказались идентичны исходным. RLE это изображение пришлось не по зубам, но хотя бы нет и оверхеда. Так или иначе, растровые данные готовы, и это максимум, что можно выжать.
Итого
Еще раз вкратце техники, помогающие уменьшить вес PCX:
- Выбор минимально возможной глубины цвета (размера палитры);
- Оптимизация мусорных данных;
- Удаление бессмысленных данных (серии длиной 0);
- Оптимизация палитры.
Продолжение следует
Ну вот, пожалуй, и всё. Про TGA я рассказывать не буду, он хоть и отличается от PCX, но сходств гораздо больше, чем отличий. А других прямо уж примечательных графических форматов того времени и не было.
Кроме, конечно же, формата GIF компании CompuServe. В нем мы и покопаемся в следующий раз.
Читайте также: