Я прожил все юные годы в самом центре Москвы, рядом с Кремлем. Там я ходил в школу, оттуда будучи студентом ездил в МГУ на занятия. Но уже достаточно давно я переехал на юг столицы, в большой шестнадцатиэтажный дом. На окраине намного больше детей и подростков, чем в центре, что и говорить — “спальный” район. Дети сейчас растут быстро, как губка, впитывают всю новую информацию. Самым большим увлечением для современных мальчишек является компьютер и все, что с ним связано. Вот такой интересующийся мальчишка по имени Вова живет с мной на одном этаже и часто заходит в гости, подолгу стоя за моей спиной, пока я брожу по просторам Internet. И задает кучу вопросов: “что это?”, “как это?” и т.д. А я терпеливо отвечаю на его вопросы, шаг за шагом раскрывая перед Вовой “страшные компьютерные тайны”. И ему эти вечера очень нравятся...
Этот материал базируется на содержании “вечерних бесед” с Вовой. Конечно, я добавил свои комментарии, где это требуется.
1. О пользе соглашений. Вечер первый
Вова опять сидит у меня за спиной. А я работаю за компьютером, корректирую цветопередачу только что загруженной фотографии (использую программу Ulead Photo Express): больше красного, еще больше, еще чуть-чуть... Вроде все. Вполне естественный цвет. Сохраняю результат работы в файле. Вова молча следит за моими действиями. Печатаю файл на принтере Olympus 330 (принтер использует специальную бумагу, получаются почти натуральные фотографии). И тут Вова спрашивает:
— Дядя Саша (дядя Саша — это я. — прим. автора, дяди Саши),— а как компьютер понимает, что в файле находится фотография?
Вова уже “продвинутый” мальчик: он свободно ориентируется в Internet, управляется с Windows и многим другим.
— Компьютер сам, конечно, не понимает, — отвечаю я, — да ему это и не нужно. Понимает программа, которую исполняет компьютер. Сейчас у меня исполняется специальная программа Ulead Photo Express, она предназначена для обработки графических файлов, т.е. файлов, содержащих закодированные изображения.
— Закодированных, то есть зашифрованных, чтобы никто не смог посмотреть? — спросил Вова.
— Закодировать и зашифровать — это разные вещи. Когда шифруют, то целью является создать файл, который невозможно прочесть чужаку. Когда кодируют, напротив, просто преобразуют информацию, представляя в некоторой удобной форме (например, для хранения на диске). Это может быть известное тебе двоичное кодирование или какое-нибудь еще. Закодировать можно тысячами способов, но очень важно, чтобы тот, кто кодирует, и тот, кто потом раскодирует, понимали друг друга. То есть у них было бы принято соглашение о методах кодирования.
Тут необходимо пояснение. Соглашение подразумевает формальное описание того, что означает каждый байт (или бит) закодированной информации. Это и принято называть форматом. Формат описывает метод кодирования, но не фиксирует алгоритм преобразования. Алгоритмов, вообще говоря, может быть много, но все они приводят к одинаковому результату. То есть их можно не различать, для простоты считая, что формат — это соглашение об алгоритмах кодирования/раскодирования.
— Соглашение? — удивился Вова. — Эти соглашения подписывает президент страны? Вон по телевизору показывают?
— Почти. Президенты подписывают соглашения между странами. То есть фиксируют взаимное поведение. Это нужно политикам и простым гражданам. А соглашение об алгоритме кодирования должны знать те, кто работает с закодированной информацией. Если ты кодируешь и затем пересылаешь мне закодированную информацию...
— Через Internet? — перебил меня Вова.
— Да, можно через Internet. Я получаю твой закодированный файл, но если мы не договорились, не “подписали” соглашение об алгоритме кодирования/раскодирования, то твоя информация для меня просто бесполезна. Смотри! — Я написал “ЧЕПУХА”.
— Что такое “RENIXA”? — спросил меня мальчик.
— Ну вот и ты купился! Это не РЕНИКСА, а ЧЕПУХА, ты не понял мое послание, потому что мы не договорились, у нас не было соглашения писать по-английски или по-русски. И содержание, смысл послания для тебя потерян. То есть одним из важных пунктов при хранении и передаче информации является выработка соглашения об алгоритмах кодирования/раскодирования. Вот и ответ на твой вопрос: программы для работы с фотографиями используют общепринятые соглашения о кодировании графической информации, т.е. изображений. Именно поэтому эти программы могут отличить, находится ли в файле фотография или там текст письма.
— Или это звуковой файл. — Без сомнения, Вова был сообразительным мальчиком.
— Да, или звуковой файл. Попробуем “подсунуть” чужой файл вот этой программе. — Я имел в виду Ulead Photo Express. — Смотри, она вообще не хочет открывать файл, в котором нет картинки. По расширению имени файла программа определяет, является ли этот файл картинкой или нет. Если файл имеет имя, оканчивающееся на GIF или BMP, то это файл с картинкой.
— Тут целый список! — воскликнул Вова, — и PNG, и TIF, и JPG, и PCX, и еще, и еще...
— Да, различным методам кодирования картинок соответствуют различные расширения в именах файлов. Но попробуем обмануть программу Ulead Photo Express, переименовав файл с письмом, заменив ему расширение TXT на BMP. И снова попробуем его открыть. Смотри! Сообщение об ошибке, программа не может его раскодировать. Значит, не только расширение является определяющим для программы, но и содержимое файла. Не соблюдается соглашение, значит, там не картинка.
— Я не понимаю, как теперь программа Ulead Photo Express отличила письмо от картинки? — недоумевал мой прилежный ученик.
— Все дело в соглашении. Соглашение описывает, что должно находиться в файле с расширением BMP. Это соглашение мы с тобой будем называть “форматом графического файла”. Каждый тип графического файла имеет собственный формат, собственное соглашение об алгоритмах кодирования/раскодирования информации, хранящейся в нем.
— И все графические редакторы умеют работать со всеми различными файлами?
— Нет, не все. Например, твой любимый Paint, простейший графический редактор из Windows 98, умеет читать только PCХ и JPG-файлы. А другие типы файлов не умеет. Напротив, Ulead Photo Express умеет работать с большим числом различных типов графических файлов. Есть еще масса программ, которые умеют работать практически со всеми наиболее известными типами графических файлов.
— Сколько же всего различных форматов?
— Популярных — десяток и более, тебе для ознакомления хватит и шести:
BMP
TIF
GIF
PNG
PCX
JPG
Прежде чем рассказывать про каждый из них, скажи мне: как на экране компьютера изображаются картинки?
— Ну, это просто, — улыбнулся Вова, — экран состоит из точек, растра точек, как сетка, вот сейчас на экране режим 800
ґ600 = 480 000, 800 точек по горизонтали и 600 по вертикали. Еще бывают режимы 1024ґ768 и 1280ґ1024. Эти режимы круче. Каждая из 480000 точек горит своим цветом. Сейчас 24 бита на цвет точки (pixel). Этот режим называется true color. Еще есть high color и режим 256 цветов.— Исчерпывающая информация. — Я был доволен. — Так и придумай способ, как сохранять картинку в файле. В качестве подсказки припомни собственные слова, 24 бита на точку!
— Придумал! — закричал мальчик после минутной паузы, — сохраняем весь растр по точкам, на каждую точку приходится по 24 бита=3 байта, т.е. картинка займет 800
ґ600ґ3 = 1440000 байт, то есть около 1,4 мегабайта.— Давай проведем эксперимент. Жми клавишу <PRINT SCREEN>.
Нажал?
Хорошо! Теперь загружай Paint и жми <CTRL> + <V> — вспомни картинку, затем сохрани ее и посмотри размер. Сколько? Около 1,47? Не удивляет ли тебя, что размер файла почти совпадает с размером файла в придуманном тобой формате?
Это потому, что именно так устроен самый простой из графических форматов — BMP. Все вышеперечисленные форматы предназначены для хранения растровой графической информации, где кодируется каждая точка изображения. Но есть и другие способы. Представь себе, что ты рисуешь на листке бумаги карандашом. Пусть у тебя на запястье находится специальное устройство, передающее в компьютер все движения твоей руки. Тогда законченный тобой рисунок можно сохранить в файле не только как набор точек (растр), а как последовательность движений твоей руки (с карандашом). Этот метод представления графической информации называется векторным.
— А зачем его придумали, — удивился Володя, — неужели недостаточно растрового?
— Представь, что ты нарисовал треугольник. В BMP-файле тебе потребуются все те же 1,4 Мб, а если рисовать треугольник векторами, указывая координаты начала и конца отрезков, а координаты двухбайтовые? Какой объем файла потребуется для сохранения такого треугольника?
— 16 байт. — Ответ прозвучал через несколько секунд.
Задача 1. Почему Вова сказал, что ответ — 16 байт? Поясните.