Расширение имени файла | .iff , .lbm |
---|---|
Разработано | Electronic Arts |
Первый выпуск | 14 января 1985 г.. (35 лет назад) (1985-01-14) |
Тип формата | Форматы файлов изображений |
Содержится в | Формат файла обмена |
Стандарт | EA IFF 85: Стандарт для формата обмена |
Открытый формат ? | Исходный код общедоступного домена |
Чередование Bitmap (ILBM ) - это формат файла изображения, соответствующий стандарту Interchange File Format (IFF). Формат возник на платформе Amiga, а в IBM-совместимых системах файлы в этом формате или соответствующем формате PBM (Planar Bitmap) обычно встречаются в играх конца 1980-х и начала 1990-х годов, которые были либо портами Amiga , либо их графические ресурсы были разработаны на машинах Amiga.
Характерной особенностью формата является то, что он хранит растровые изображения в виде чередующихся битовых плоскостей, который дает название формату; это отражает способ, которым графическое оборудование Amiga изначально считывает графические данные из памяти. Поддерживается простая форма сжатия, чтобы сделать файлы ILBM более компактными.
На Amiga эти файлы не связаны с конкретным расширением файла, хотя, поскольку они начали использоваться в системах ПК, где систематически используются расширения, они использовали расширение.lbm или иногда расширение.bbm.
ILBM является реализацией IFF формат файла, состоящий из ряда последовательных фрагментов, порядок которых в некоторой степени может быть разнообразный. У каждого блока своя функция и один и тот же базовый формат. Это означает, что программе не нужно читать или декодировать каждый фрагмент файла, а только те, с которыми она хочет иметь дело, или те, которые она может понять.
Файлы ILBM обычно содержат достаточно информации, чтобы позволить им быть отображается программой редактирования изображений, включая размеры изображения, палитру и пиксельные данные. Некоторые файлы были разработаны для использования в качестве палитр для программ рисования (пиксельные данные оставлены пустыми) или для объединения в другое изображение. Это делает их гораздо более гибкими, но и более сложными, чем другие форматы, такие как BMP.
Для ILBM блок BMHD и любые другие «важные» блоки должны появляться перед BODY кусок. Любые фрагменты, появляющиеся после BODY, считаются «лишними», и многие программы оставляют их непрочитанными и неизменными.
Тип | Имя | Описание |
---|---|---|
FOURCC | chunkID | "FORM" |
lenChunk | Длина данных блока в байтах. Не включает байт заполнения. Будет таким же, как размер файла за вычетом восьми байтов (это поле и chunkIDне включаются в счетчик) | |
FOURCC | formatID | "ILBM" или "PBM" |
BYTE [lenChunk - 12] | content | Фактические данные блока, состоящие из других субфрагментов ниже |
BYTE | pad | Необязательный байт заполнения, присутствует только в том случае, если lenChunkне кратно 2. |
Блок BMHD определяет способ отображения изображения и обычно является первым фрагментом внутри FORM . Он не только определяет высоту / ширину изображения, но и то, где оно отображается на экране, как отображать его при различных разрешениях экрана и если изображение сжато. Содержимое этого блока выглядит следующим образом:
Тип | Название | Описание |
---|---|---|
width | Ширина изображения в пикселях | |
height | Высота изображения в пикселях | |
xOrigin | Где на экране в пикселях находится верхний левый угол изображения. Значение обычно 0,0, если изображение не является частью большего изображения или не полноэкранным. | |
yOrigin | ||
numPlanes | Количество плоскостей в битовой карте; 1 для монохромного, 4 для 16 цветов, 8 для 256 цветов или 0, если есть только палитра и нет данных изображения. (т.е. этот файл представляет собой всего лишь карту цветов.) | |
mask | 1 = замаскированный, 2 = прозрачный цвет, 3 = лассо (для MacPaint). Данные маски не считаются битовой плоскостью. | |
сжатие | Если 0, то без сжатия. Если 1, то данные изображения сжаты RLE. Если 2 "Вертикальное РЛЭ" от Deluxe Paint для Atari ST. Теоретически возможны другие значения, представляющие другие методы сжатия. | |
pad1 | Игнорировать при чтении, установить 0 при записи для будущей совместимости | |
transClr | Прозрачный цвет, полезен только когда маска>= 2 | |
xAspect | Пиксельный формат, соотношение ширина: высота; используется для отображения изображения на различных разрешениях экрана для 320x200 5: 6 или 10:11 | |
yAspect | ||
pageWidth | Размер экрана, на котором будет отображаться изображение, в пикселях, обычно 320 × 200 | |
pageHeight |
Блок BODY обычно является последним и самым большим блоком в файле.
В файлах ILBM блок BODY хранит фактические данные изображения в виде чередующихся битовых плоскостей (и необязательной маски) по строкам. Битовые плоскости появляются сначала от 1 до n, за ними следует плоскость маски. Если изображение несжатое, то каждая строка будет состоять из (ширина + 15) / 16
16-битных значений (то есть один бит на пиксель, округленный до ближайшего кратного 16-битного). он сжимается, тогда каждая строка сжимается индивидуально и всегда кратна 16-битной длине при сжатии.
В файлах PBM фрагмент BODY проще, поскольку несжатый, это просто непрерывный поток байтов, содержащий данные изображения.
Если изображение сжимается, каждая строка данных (но не каждая битовая плоскость) сжимается отдельно, включая данные маски, если они есть. Сжатие - это разновидность RLE Compression с использованием флагов. Его можно декодировать следующим образом:
Для подпрограммы сжатия лучше всего закодировать двухбайтовый повторный прогон как репликационный прогон, за исключением тех случаев, когда ему предшествует и за которым следует буквальный прогон, в котором В этом случае лучше всего объединить три в один буквальный прогон. Всегда кодируйте>3 байта повторов при выполнении репликации.
A CAMG блок предназначен специально для компьютера Commodore Amiga. Он хранит ДЛИННЫЙ "режим просмотра". Это позволяет вам указать такие режимы отображения Amiga, как «двойное игровое поле» и «удерживать и изменять». Неудивительно, что это редкость за пределами игр Amiga.
Тип | Имя | Описание |
---|---|---|
viewportMode | битовые флаги; напрямую интерпретируется оборудованием Amiga |
Если вам нужно преобразовать или отобразить файлы, которые могут содержать значимые фрагменты CAMG, см. «Примечания по работе с файлами ILBM» ниже.
Блок CMAP содержит палитру изображения и состоит из 3-байтовых значений RGB для каждого используемого цвета. Каждый байт находится в диапазоне от 0 до 255 включительно. Чанк имеет длину 3 × numColours
байтов. Количество цветов в палитре будет 2 ^ numBitplanes
. Этот фрагмент является необязательным, и если его нет, будет использоваться палитра по умолчанию. Возможно иметь меньше записей, чем ожидалось (например, 7 цветов для 4-плоскостного растрового изображения «16 цветов»). Помните, что если у него нечетное количество цветов, согласно спецификации IFF, фрагмент будет дополнен одним byte, чтобы сделать его длиной четное число байтов, но байт заполнения не включается в поле длины блока.
Блок цветового диапазона является «нестандартным». Он используется программой Deluxe Paint от Electronic Arts для определения непрерывного диапазона регистров цвета или «диапазона оттенков» и смены цветов. В файле ILBM может быть ноль или более блоков CRNG, но все они должны располагаться перед блоком BODY . Deluxe Paint обычно записывает 4 блока CRNG в ILBM, когда пользователь просит его «Сохранить изображение».
Тип | Имя | Описание |
---|---|---|
padding | 0x0000 | |
rate | Скорость цветового цикла. Единицы измерения таковы, что скорость 60 шагов в секунду представляется как 2 = 16384. Более низкие скорости могут быть получены путем линейного масштабирования: для 30 шагов в секунду скорость = 8192. | |
flags | Флаги, которые контролировать чередование цветов по палитре. Если бит 0 равен 1, цвета должны циклически меняться, в противном случае этот диапазон регистров цвета неактивен и не должен иметь никакого эффекта. Если бит 1 равен 0, цвета циклически меняются вверх, то есть каждый цвет перемещается в следующую позицию индекса на карте цветов, а самый верхний цвет в диапазоне перемещается вниз в самую низкую позицию. Если бит 1 равен 1, цвета меняются в противоположном направлении. Только те цвета между записями low и high в карте цветов должны циклически меняться. | |
low | Индекс первой записи в цветовой карте, которая является частью этого диапазона. | |
high | Индекс последней записи в цветовой карте, которая является частью этого диапазона. |
Программа Commodore Graphicraft использует CCRT для диапазона и времени переключения цветов. Этот блок содержит структуру CycleInfo. Как и CRNG, это нестандартный блок.
Тип | Имя | Описание |
---|---|---|
direction | Направление цикла: 0 = без цикла, 1 = вперед, -1 = назад | |
low | выбран самый низкий регистр цвета | |
high | выбран самый высокий регистр цвета | |
delaySec | Секунды между сменой цветов | |
delayuS | микросекунды между сменой цветов (добавлено к delaySec для получения общего времени задержки) | |
padding | 0x0000 |
Данные аналогичны CRNG чанк. Программа, вероятно, будет использовать только один из этих двух методов выражения данных цветового цикла. Вы можете записать оба, если хотите передать эту информацию как DeluxePaint, так и Graphicraft.
Необязательное свойство DEST - это способ контролировать, как для рассеивания нуля или более исходных битовых плоскостей в более глубокое целевое изображение. Некоторые считыватели могут игнорировать DEST.
Тип | Имя | Описание |
---|---|---|
numPlanes | Количество битовых плоскостей в исходном изображении | |
pad1 | неиспользованный; используйте 0 для согласованности | |
planePick | Как выбрать самолеты, чтобы разбросать их по целевому изображению | |
planeOnOff | Данные по умолчанию для Plane Pick | |
planeMask | Выбирает, какие битовые плоскости сохранять в |
. Число битов младшей глубины в planePick, planeOnOff и planeMask однозначно соответствует битовым плоскостям назначения. Бит 0 с битовой плоскостью 0 и т. Д. Любые биты более высокого порядка следует игнорировать.
Биты «1» в planePick означают «поместить следующую исходную битовую плоскость в эту битовую плоскость», поэтому количество битов «1» должно равняться numPlanes. «0» бит означает «поместить соответствующий бит из planeOnOff в эту битовую плоскость».
Биты в planeMask запись шлюза в битовую плоскость назначения: бит «1» означает «запись в эту битовую плоскость», а биты «0» означают "оставь этот битплан в покое". Обычный случай (без блока DEST ) эквивалентен planePick = planeMask = (2 ^ numPlanes) - 1
.
Помните, что номера цветов формируются пикселями в целевом растровом изображении (плоскости глубины deep) не в исходном растровом изображении (numPlanes planes deep).
Необязательный блок GRAB определяет местонахождение «дескриптора» или «горячей точки» изображения относительно его верхнего левого угла, например, при использовании в качестве курсора мыши или «кисти». Это необязательно.
Тип | Имя | Описание |
---|---|---|
x | Координата X активной точки в пикселях относительно верхнего левого угла изображения | |
y | Координата Y активной точки в пикселей относительно левого верхнего угла изображения |
Блок SPRT указывает, что изображение предназначено для спрайта. Таким образом, он должен иметь плоскость маски или прозрачный цвет и не должен быть полноэкранным. Как это делается, зависит от программы, использующей изображение. Единственные данные, хранящиеся здесь, - это порядок спрайтов, используемый многими программами для размещения спрайта на переднем плане (спрайт порядка 1 появляется за спрайтом порядка 0 и т. Д.). Это необязательно.
Тип | Имя | Описание |
---|---|---|
order | Z-порядок изображения (0 - ближе всего к переднему плану, большие числа - дальше / позади) |
Блок TINY содержит небольшое изображение для предварительного просмотра для различных графических программ, включая Deluxe Paint. Он сжат и аналогичен по формату блоку BODY.
Тип | Имя | Описание |
---|---|---|
width | Ширина эскиза, в пикселях | |
height | Высота эскиза в пикселях | |
BYTE | данные | Данные пикселей, хранящиеся точно так же, как BODY кусок. Используйте точно такой же алгоритм, заменяя ширину и высоту из блока TINY вместо значений, взятых из блока BMHD . |
Иногда файл ILBM содержит только цветовую карту и не содержит данных изображения. Часто используется для хранения палитры цветов, которую можно применить к изображению отдельно. В этом случае блок BODY должен быть пустым, а поле numPlanes в блоке BMHD будет иметь значение 0.
Некоторые файлы ILBM содержат информацию «истинного цвета», а не индексированные цвета. Эти файлы так называемых «глубоких изображений» не имеют блока CMAP и обычно имеют 24 или 32 битовых плоскости. Стандартный порядок битовых плоскостей помещает младший бит красного компонента первым:
R0 R1 R2 R3 R4 R5 R6 R7 G0 G1 G2 G3 G4 G5 G6 G7 B0 B1 B2 B3 B4 B5 B6 B7
Если есть 32-битные плоскости, последние 8 битовых плоскостей будут альфа-каналом:
R0 R1... R7 G0... G7 B0... B6 B7 A0 A1 A2 A3 A4 A5 A6 A7
Изображение без цветовой карты и только 8 битовых плоскостей может быть изображением в градациях серого:
I0 I1 I2 I3 I4 I5 I6 I7
Если файл ILBM содержит блок CAMG, в котором установлен бит 7 (т. Е. 0x80 в шестнадцатеричном формате). Предполагается, что в файле будет использоваться режим EHB (Extra Half-Brite) чипсета Amiga. Цветовая карта будет содержать не более 32 записей, но изображение будет иметь 6 битовых плоскостей. Старшую битовую плоскость следует рассматривать как флаг, если она не установлена, используйте младшие 5 бит в качестве индекса в карте цвета, как обычно. Когда установлен флаг; Используйте младшие 5 бит в качестве индекса в карте цветов, но фактический цвет, который будет использоваться, должен быть наполовину слабее, что может быть достигнуто путем смещения компонентов RGB цвета на один бит вправо. В качестве альтернативы можно создать цветовую карту с 64 записями и скопировать нижние 32 записи в верхнюю половину, преобразовав их в половинную яркость; затем используйте все 6 битовых плоскостей в качестве индекса цвета.
Изображения PBM не могут существовать в дополнительном полубрайтовом режиме.
Если файл ILBM содержит фрагмент CAMG в котором установлен бит 11 (то есть 0x800 в шестнадцатеричном формате), файл предполагает использовать режим HAM (Hold-And-Modify) чипсета Amiga. В формате HAM6 цветовая карта будет иметь до 16 записей, но изображение будет иметь 6 (или, возможно, 5 битовых плоскостей). В формате HAM8 цветовая карта будет иметь до 64 записей, но изображение будет иметь 8 (или, возможно, 7 битовых плоскостей).
Последние две битовые плоскости (если нечетное количество битовых плоскостей предполагает дополнительную битовую плоскость, которая всегда равна 0) являются управляющими флагами, которые указывают, как использовать первые 4 (или 6) битовых плоскостей.
Управляющие флаги | Описание |
---|---|
00 | Используйте битовые плоскости 0-3 (или 0-5) в качестве индекса цветовой карты как normal |
10 | Использовать цвет предыдущего пикселя, но заменить синий компонент битами из битовых плоскостей 0-3 (или 0-5) |
01 | Использовать цвет предыдущего пикселя, но заменить красный компонент битами из битовых плоскостей 0- 3 (или 0-5) |
11 | Использовать цвет предыдущего пикселя, но заменить зеленый компонент битами из битовых плоскостей 0-3 (или 0-5) |
Если первый пиксель строки развертки является пикселем модификации, затем измените и используйте цвет границы изображения.
Обратите внимание, что при использовании 4 бита для изменения компонента цвета вы должны использовать 4 бита в верхних 4 битах компонента И в нижних 4 битах (чтобы избежать уменьшения общей цветовой гаммы). При использовании 6 битов это менее важно, но вы все равно можете поместить 2 старших бита битов модификации в два младших бита компонента цвета.
Изображения PBM не могут существовать в режиме удержания и модификации.
Большинство утилит, работающих с файлами ILBM и BBM, скорее устаревшими, например MacPaint или Deluxe Paint. IrfanView позволяет просматривать файлы, бесплатен для некоммерческого использования и может работать под Linux. Netpbm может конвертировать изображения из ILBM в собственный формат PPM и обратно. Графический редактор пиксельной графики GrafX2, вдохновленный Deluxe Paint, может загружать и сохранять файлы ILBM. ImageMagick и GraphicsMagick также могут отображать и преобразовывать изображения ILBM.
В серии игр сжатые автономные изображения ILBM используются для титульных экранов, но игра не считывает большинство фрагментов ILBM. Это связано с тем, что изображения были отредактированы в DeluxePaint, а затем импортированы непосредственно в файлы игры.