Лекции (1171139), страница 20
Текст из файла (страница 20)
последовательность символов 0x0D 0x0A, в один символ 0x0A (' \n' ), а"признак конца файла (потока)" — в значение EOF (End Of File). Константа EOFопределена в заголовочном файле stdio.h и обычно равна -1.При чтении двоичных потоков никаких преобразований не производится. То, скаким потоком мы собираемся работать — текстовым или двоичным, указывается при егооткрытии. Один из способов открытия потока — использование функции fopen. Типпотока указывается в строке параметров, которая является вторым аргументом этойфункции. Пример: f=fopen ("test.ext", " rt"} ; — открытие текстового файла test.ext для72чтения и связывание его с файловой переменной f.
На то, что файл открывается кактекстовый, указывает буква "t" в строке "rt". Чтобы открыть этот файл как бинарный, надоиспользовать букву "b": f=fopen ("test.ext", "rb").В ВМР-файле имеются две части — так называемый заголовок, в котором хранитсяинформация о картинке (соответствующая структура приведена ниже, правда, приходитсяотметить, что лишь небольшое количество полей заголовка нами будет использовано), исобственно изображение. Изображение хранится по точкам, в построчной развертке,начиная с нижней строки картинки.По решению разработчиков формат Bmp-файла не привязан к конкретнойаппаратной платформе.
Этот файл состоит из четырех частей: заголовка,информационного заголовка, таблицы цветов (палитры) и данных изображения. Если вфайле хранится изображение с глубиной цвета 24 бита (16 млн. цветов), то таблица цветовможет отсутствовать, однако в 256-цветном случае она есть. Структура каждой из частейфайла, хранящего 256-цветное изображение, дана в таблице ниже.Заголовок файла начинается с сигнатуры «BM», а затем идет длина файла,выраженная в байтах. Следующие 4 байта зарезервированы для дальнейших расширенийформата, а заканчивается этот заголовок смещением от начала файла до записанных в немданных изображения. При 256 цветах это смещение составляет 1078 — именно столько ипришлось пропустить в нашей прошлой программе, чтобы добраться до данных.Информационный заголовок начинается с собственной длины (она можетизменяться, но для 256-цветного файла составляет 40 байт) и содержит размерыизображения, разрешение, характеристики представления цвета и другие параметры.Ширина и высота изображения задаются в точках растра и пояснений, пожалуй, нетребуют.Количество плоскостей могло применяться в файлах, имеющих небольшуюглубину цвета.
При числе цветов 256 и больше оно всегда равно 1, поэтому сейчас этополе уже можно считать устаревшим, но для совместимости оно сохраняется.Глубина цвета считается важнейшей характеристикой способа представления цветав файле и измеряется в битах на точку. В данном случае она равна 8.Компрессия. В Bmp-файлах обычно не используется, но поле в заголовке для неепредусмотрено. Обычно она равна 0, и это означает, что изображение не сжато. Вдальнейшем будем использовать только такие файлы.Размер изображения — количество байт памяти, требующихся для хранения этогоизображения, не считая данных палитры.Горизонтальное и вертикальное разрешения измеряются в точках растра на метр.Они особенно важны для сохранения масштаба отсканированных картинок.
Изображения,созданные с помощью графических редакторов, как правило, имеют в этих полях нули.Число цветов позволяет сократить размер таблицы палитры, если в изображенииреально присутствует меньше цветов, чем это допускает выбранная глубина цвета.Однако на практике такие файлы почти не встречаются. Если число цветов принимаетзначение, максимально допустимое глубиной цвета, например 256 цветов при 8 битах,поле обнуляют.Число основных цветов — идет с начала палитры, и его желательно выводить безискажений. Данное поле бывает важно тогда, когда максимальное число цветов дисплеябыло меньше, чем в палитре Bmp-файла. При разработке формата, очевидно,принималось, что наиболее часто встречающиеся цвета будут располагаться в началетаблицы.
Сейчас этого требования практически не придерживаются, т. е. цвета неупорядочиваются по частоте, с которой они встречаются в файле. Это очень важно,поскольку палитры двух разных файлов, даже составленных из одних и тех же цветов,содержали бы их (цвета) в разном порядке, что могло существенно осложнитьодновременный вывод таких изображений на экран.73За информационным заголовком следует таблица цветов, представляющая собоймассив из 256 (по числу цветов) 4-байтовых полей. Каждое поле соответствует своемуцвету в палитре, а три байта из четырех — компонентам синей, зеленой и краснойсоставляющих для этого цвета.
Последний, самый старший байт каждого полязарезервирован и равен 0.После таблицы цветов находятся данные изображения, которое по строкам растразаписано снизу вверх, а внутри строки — слева направо. Так как на некоторыхплатформах невозможно считать единицу данных, которая меньше 4 байт, длина каждойстроки выровнена на границу в 4 байта, т. е. при длине строки, некратной четырем, онадополняется нулями.
Это обстоятельство обязательно надо учитывать при считываниифайла, хотя, возможно, лучше заранее позаботиться, чтобы горизонтальные размеры всехизображений были кратны 4.Структура Bmp-файлаИмяДлинаСмещениеЗаголовок файла (BitMapFileHeader)Type20Size42Reserved 126Reserved 228OffsetBits410Информационный заголовок (BitMapInfoHeader)Size414Width418Height422Planes226BitCount228Compression430SizeImage434XpelsPerMeter438YpelsPerMeter442ColorsUsed446ColorsImportant450Таблица цветов (палитра) (ColorTable)ColorTable102454Данные изображения (BitMap Array)ImageSize1078ОписаниеСигнатура "BM"Размер файлаЗарезервированоЗарезервированоСмещение изображения от начала файлаДлина заголовкаШирина изображения, точкиВысота изображения, точкиЧисло плоскостейГлубина цвета, бит на точкуТип компрессии (0 - несжатое изображение)Размер изображения, байтГоризонтальное разрешение, точки на метрВертикальное разрешение, точки на метрЧисло используемых цветов (0 - максимальновозможное для данной глубины цвета)Число основных цветов256 элементов по 4 байтаИзображение, записанное по строкам слева направо иснизу вверх74Представление изображений.
RGB-модель.Компьютер может работать только с цифровыми данными. Для того чтобы обработать с помощьюкомпьютера изображение, его нужно выразить в цифровом виде. Существуют два основных способацифрового представления изображений: растровый и векторный. Для векторной графики характерноразбиение изображения на ряд графических примитивов – точки, прямые, ломаные, дуги, полигоны. Такимобразом, появляется возможность хранить не все точки изображения, а координаты узлов примитивов и ихсвойства (цвет, связь с другими узлами и т. д.). Итак, под растровым (bitmap, raster) понимают способпредставления изображения в виде совокупности отдельных точек (пикселей) различных цветов илиоттенков.
Это наиболее простой способ представления изображения, ибо таким образом видит наш глаз. Всеизображения можно подразделить на две группы с палитрой и без нее. У изображений с палитрой в пикселе(pixel - picture element) хранится число - индекс в некотором одномерном векторе цветов называемомпалитрой. Чаще всего встречаются палитры 16 и 256 цветов.Цвета образуются в природе различным образом. С одной стороны, источники света (солнце,лампочки, экраны компьютеров и телевизоров) излучают свет различных длин волн, воспринимаемыйглазом как цветной свет.
Попадая на поверхности несветящихся предметов, свет частично поглощается, ачастично отражается. Отраженное излучение воспринимается глазом как окраска предметов. Таким образом,цвет объекта возникает в результате излучения или отражения. Описание цвета объекта в первом случаеотличается от второго, т. е. применяются разные модели цвета. Модель RGB описывает излучаемые цвета иоснована на трех базовых цветах — Red (Красный), Green (Зеленый), Blue (Синий).
Остальные цветаобразуются при смешивании этих трех основных. При сложении (смешении) двух лучей основных цветоврезультат светлее составляющих. Цвета этого типа называются аддитивными.Из смешения красного и зеленого получается желтый, зеленого и синего — голубой, синий икрасный дают пурпурный.
Если смешиваются все три цвета, в результате образуется белый. Смешав трибазовых цвета в разных пропорциях (с разными яркостями), можно получить все многообразие оттенков.Если говорить о растровом изображении в модели RGB, то каждый его пиксел представляется яркостямитрех базовых цветов: красного, зеленого и синего. Как уже говорилось выше, яркости пикселов хранятся вканалах. Таким образом, для RGB-изображения требуется три канала.75Цветовой канал — это полутоновое изображение, отражающее распределение яркостейсоответствующего базового цвета.
Если документ имеет модель Grayscale, то содержимое единственногоканала и образует изображение. Редактирование канала и редактирование изображения в этих случаях однои то же.Если модель документа — RGB, то изображения в красном, зеленом и синем канале, накладываясьдруг на друга, образуют цветную картинку. При этом, заметьте, цвета смешиваются аддитивно, как лучисвета. Это значит, что при наложении результат осветляется.