Читайте также:
|
|
//
// Структура заголовка формата Kofax Raster Image File Format
// LONG — это длинное целое со знаком (32 бита)
// SHORT — это короткое целое со знаком (16 битов)
//
typedef struct _KofaxHeader
{
//
//Тип Имя Смещение. Комментарий
//
LONG Magic; /* Ooh Магическое число (68464B2Eh) */
SHORT HeaderSize; /* 04h Размер заголовка */
SHORT HeaderVersion; /* 06h Номер версии заголовка */
LONG Image Id; /* Oah Идентификатор изображения */
SHORT Width; /* Och Ширина изображения в байтах */
SHORT Length; /* Oeh Длина изображения в строках развертки */
SHORT Format; /* 10h Кодирование */
CHAR Bitsex; /* llh He 0, если Bitsex инвертирован */
CHAR Color; /* 12h He 0, если цвет инвертирован */
SHORT Xres; /* 14h Количество точек на дюйм по горизонтали */
SHORT Yres; /* 16h Количество точек на дюйм по вертикали */
CHAR Planes; /* 18h Количество плоскостей */
CHAR BitsPerPixel; /* 19h Количество битов на пиксель */
SHORT PaperSize; /* lAh Исходный размер бумаги */
CHAR Reservedl[20]; /* Ich Резервное поле */
LONG Dcreated; /* 30h Дата создания */
LONG Dmodified; /* 34h Дата модификации */
LONG Daccessed; /* 38h Дата доступа */
CHAR Reserved2[4]; /* 3Ch Резервное поле */
LONG loffset /* 40h Смещение Index Text Info */
LONG Ilength /* 44h Длина Index Text Info */
LONG Coffset /* 48h Смещение комментария */
LONG Clength /* 4Ch Длина комментария в байтах */
LONG Uoffset /* 50h Смещение данных пользователя */
LONG Ulength /* 54h Длина данных пользователя в байтах */
LONG Doffset /* 58h Смещение данных изображения */
LONG Diength /* 5Ch Длина данных изображения в байтах */
CHAR Reserved3[32]; /* 60h Резервное поле */
} KFXHEAD;
Обратите внимание на то, что заголовок формата Kofax Raster значительно больше, чем заголовки Windows Bitmap или Sun Raster. Он включает поля, задающие горизонтальное и вертикальное разрешения, размер бумаги, на которую будет выведено изображение, смещения различных вспомогательных данных в файле, время и дату создания изображения, его последней модификации и доступа.
Несколько полей в этом заголовке помечены как резервные. Заголовок формата Kofax Raster специально дополнен до 128 байтов, чтобы можно было использовать часто применяемый размер буфера для чтения и записи, хотя в представленной здесь модификации заголовок занимает всего 72 байта. Спецификация формата Kofax Raster гарантирует, что первые 128 байтов каждого файла изображения Kofax можно интерпретировать как заголовок в любой модификации формата. Программа может просто игнорировать зарезервированные поля. Общая информация о зарезервированных полях представлена в разделе "Неиспользуемое п ространство".
Оптимизация чтения заголовка
Чтение данных заголовка может осуществляться различными способами. Проанализировав, как ваша программа использует имеющиеся данные, вы можете оптимизировать скорость чтения. Если вам нужны не все данные из заголовка, то программа может рассчитать смещение требуемых данных относительно некоторого контрольного ориентира, например относительно начала файла, найти и прочесть их. Смещения полей от начала заголовка, приведенные в комментариях к примерам, могут быть использованы для поиска нужных данных.
Если программе требуется большинство из содержащихся в заголовке данных, то, вероятно, целесообразно прочесть весь заголовок в буфер или специально выделенную для этих целей структуру данных. Такое чтение, как правило, выполняется очень быстро. После этого все данные заголовка становятся доступными в памяти и при необходимости могут быть кэшированы для дальнейшего использования. Однако если порядок байтов в словах в системе, в которой записывался файл, отличается от принятого в системе, в которой файл читается, может возникнуть проблема. Например, большинство функций блочного чтения файлов не предусматривают автоматического преобразования данных. Другая проблема может возникнуть в том случае, если компилятор или среда исполнения программы выравнивают элементы структуры по определенной границе.
Растровые данные
Реальные растровые данные обычно занимают большую часть растрового файла. В большинстве форматов растровых файлов растровые данные располагаются непосредственно после заголовка, но могут размещаться и в любом другом месте файла. Вместе с ними могут храниться палитра и другие данные. В таком случае в заголовке в поле смещения данных изображения (либо в документации) указывается местоположение начала данных изображения в файле.
Структура растровых данных в большинстве форматов довольно проста. Растровые данные состоят из пиксельных значений. На устройстве вывода пиксели обычно выводятся в виде строк развертки по всей ширине поверхности отображения, и этот факт, как правило, определяет порядок расположения данных в файле. Поэтому информация о том, на какое устройство вывода ориентировался разработчик формата, возможно, поможет вам "вычислить" точный порядок расположения данных.
Строки развертки объединяют пиксельные данные в двухмерную сетку, что позволяет нам рассматривать местоположение каждого пикселя растра в заданных логических координатах. Растр может быть представлен и в виде последовательности значений, которые логически отображают в файле растровые данные, соответствующие картинке на поверхности отображения устройства вывода. Реальные растровые данные обычно составляют большую часть любого растрового файла.
Как растровые данные записаны в файле
Как правило, программа, прежде чем сохранить изображение в файле, накапливает данные в одном или нескольких блоках памяти, которые могут находиться в оперативной памяти компьютера или на устройстве внешней памяти. Точный порядок расположения данных зависит от нескольких факторов, к которым можно отнести общий объем оперативной памяти, объем памяти, доступный данной программе, а также те операции, которые применялись для накопления данных или их записи в файл. Однако записанные в файл растровые данные обычно организованы одним из двух способов: в виде строк развертки или в виде плоскостей.
Дата добавления: 2015-01-30; просмотров: 104 | Поможем написать вашу работу | Нарушение авторских прав |
|