ILBM - ILBM

"ILBM" IFF Interleaved Bitmap
Исторический логотип Electronic Arts 80s.svg
Расширение имени файла
.iff, .lbm
РазработанElectronic Arts
изначальный выпуск14 января 1985 г.
(35 лет назад)
 (1985-01-14)
Тип форматаФорматы файлов изображений
СодержитсяФормат файла обмена
СтандартEA IFF 85: Стандарт для формата обмена[1][2][3]
Открытый формат ?Исходный код общественного достояния

Растровое изображение с чередованием (ILBM) является формат файла изображения в соответствии с Формат файла обмена (IFF) стандарт. Формат возник на Amiga платформе и на IBM-совместимый системы, файлы в этом формате или связанный формат PBM (Planar Bitmap) обычно встречаются в играх конца 1980-х - начала 1990-х годов, которые были либо Amiga порты или их графические ресурсы были разработаны на машинах Amiga.[нужна цитата ]

Характерной особенностью формата является то, что он хранит растровые изображения в виде чередующихся битовые плоскости, который дает формату его имя; это отражает то, как Графическое оборудование Amiga изначально читает графические данные из памяти. Простая форма сжатие поддерживается, чтобы сделать файлы ILBM более компактными.[4]

На Amiga эти файлы не связаны с конкретным расширение файла, хотя, когда они начали использоваться в системах ПК, где систематически используются расширения, они использовали .lbm или иногда .bbm расширение.[нужна цитата ]

Формат файла

ILBM - это реализация МКФ формат файла, состоящий из ряда последовательных фрагментов, порядок которых может до некоторой степени варьироваться. У каждого блока своя функция и один и тот же базовый формат. Это означает, что программе не нужно читать или декодировать каждый фрагмент файла, а только те, с которыми она хочет иметь дело, или те, которые она может понять.[4]

Файлы ILBM обычно содержат достаточно информации, чтобы их можно было отобразить программой редактирования изображений, включая размеры изображения, палитру и данные о пикселях. Некоторые файлы были разработаны для использования в качестве палитр для программ рисования (пиксельные данные оставлены пустыми) или для объединения в другое изображение. Это делает их намного более гибкими, но и более сложными, чем другие форматы, такие как BMP.[нужна цитата ]

Для ILBM BMHD чанк и любые другие «важные» чанки должны появиться перед ТЕЛО кусок. Любые фрагменты, появляющиеся после ТЕЛО считаются «лишними», и многие программы оставляют их непрочитанными и неизменными.[4]

ТипИмяОписание
FOURCCchunkID"ФОРМА"
UINT32BElenChunkДлина данных блока в байтах. Не включает байт заполнения. Будет таким же, как размер файла минус восемь байтов (это поле и chunkID не входят в подсчет)
FOURCCformatID«ILBM» или «PBM»
BYTE [lenChunk - 12]содержаниеФактические данные фрагмента, состоящего из других фрагментов ниже
БАЙТподушечкаНеобязательный байт заполнения, присутствует только если lenChunk не делится на 2.

BMHD: заголовок растрового изображения

В BMHD chunk определяет способ отображения изображения и обычно является первым фрагментом внутри ФОРМА. Он не только определяет высоту / ширину изображения, но и то, где оно отображается на экране, как отображать его при различных разрешениях экрана и если изображение сжато. Содержимое этого чанка следующее:[4]

ТипИмяОписание
UINT16BEширинаШирина изображения в пикселях
UINT16BEвысотаВысота изображения в пикселях
INT16BExOriginГде на экране в пикселях, это верхний левый угол изображения. Значение обычно 0,0, если изображение не является частью большего изображения или не полноэкранным.
INT16BEyOrigin
UINT8numPlanesКоличество плоскостей в растровом изображении; 1 для монохромного, 4 для 16 цветов, 8 для 256 цветов или 0, если есть только палитра и нет данных изображения. (т.е. этот файл - просто цветовая карта.)
UINT8маска1 = замаскированный, 2 = прозрачный цвет, 3 = лассо (для MacPaint). Данные маски не считаются битовой плоскостью.
UINT8сжатиеЕсли 0, то без сжатия. Если 1, то данные изображения сжаты RLE. Если 2 "Вертикальное РЛЭ" от Deluxe Paint для Atari ST. Теоретически возможны другие значения, представляющие другие методы сжатия.
UINT8pad1Игнорировать при чтении, установить 0 при записи для будущей совместимости
UINT16BEtransClrПрозрачный цвет, полезен только когда маска >= 2
UINT8xAspectПиксельный аспект, соотношение ширина: высота; используется для отображения изображения на экранах с разным разрешением 320x200 5: 6 или 10:11
UINT8yAspect
INT16BEpageWidthРазмер экрана, на котором будет отображаться изображение, в пикселях, обычно 320 × 200
INT16BEpageHeight

BODY: данные изображения

В ТЕЛО кусок обычно является последним фрагментом в файле,[4] и самый большой[нужна цитата ].

В файлах ILBM ТЕЛО chunk хранит фактические данные изображения в виде чередующихся битовых плоскостей (и необязательной маски) по строкам. Битовые плоскости появляются сначала от 1 до n, за ними следует плоскость маски. Если изображение несжатое, каждая строка будет состоять из (ширина + 15) / 16 16-битные значения (т.е. один бит на пиксель, округленный до ближайшего кратного 16-битного значения). Если он сжимается, каждая строка сжимается индивидуально и всегда кратна 16-битной длине при сжатии.[4]

В файлах PBM ТЕЛО chunk проще, поскольку несжатый, это просто непрерывный поток байтов, содержащий данные изображения.[нужна цитата ]

Сжатие

Если изображение сжимается, каждая строка данных (но не каждая битовая плоскость) сжимается отдельно, включая данные маски, если они есть. Сжатие - это различные Сжатие RLE используя флаги. Его можно расшифровать следующим образом:[4]

  • Цикл до тех пор, пока мы не получим данных [Final length] в байтах (окончательная длина рассчитывается на основе размера изображения).
  • Пока [Длина распакованных данных] <[Окончательная длина]:
    1. Прочитать байт [значение]
    2. Если [Value]> 128, то:
      • Прочтите следующий байт и выведите его (257 - [Значение]) раз.
      • Переместитесь на 2 байта вперед и вернитесь к шагу 1.
    3. Иначе, если [Значение] <128, то:
      • Прочитать и вывести следующие [значение + 1] байт
      • Переместите вперед [Value + 2] байта и вернитесь к шагу 1.
    4. Else [Value] = 128, выйти из цикла (прекратить распаковку)

Для процедуры сжатия лучше всего закодировать двухбайтовый повторный прогон как дублирующий прогон, за исключением случаев, когда ему предшествует и за ним следует буквальный прогон, и в этом случае лучше всего объединить три в один буквальный прогон. Всегда кодируйте повторы> 3 байтов при выполнении репликации.[4]

CAMG: режим Amiga

А CAMG chunk предназначен специально для компьютера Commodore Amiga. Он хранит ДЛИННЫЙ "режим просмотра". Это позволяет вам указать такие режимы отображения Amiga, как «двойное игровое поле» и «удерживать и изменять». Неудивительно, что это редкость вне игр для Amiga.[нужна цитата ]

ТипИмяОписание
UINT32BEviewportModeбитовые флаги; напрямую интерпретируется оборудованием Amiga

Если вам нужно преобразовать или отобразить файлы, которые могут содержать значимые фрагменты CAMG, см. «Примечания по работе с файлами ILBM» ниже.

CMAP: палитра

В CMAP chunk содержит палитру изображения и состоит из 3-байтовых значений RGB для каждого используемого цвета. Каждый байт находится в диапазоне от 0 до 255 включительно. Чанк 3 × числоЦветов длина в байтах. Количество цветов в палитре будет 2 ^ число. Этот фрагмент является необязательным, и если его нет, будет использоваться палитра по умолчанию. Возможно иметь меньше записей, чем ожидалось (например, 7 цветов для 4-плоскостного растрового изображения «16 цветов»). Помните, что если у него нечетное количество цветов, согласно спецификации IFF, фрагмент будет дополнен одним byte, чтобы сделать его длиной четное число байтов, но байт заполнения не включается в поле длины блока.[4]

CRNG: Цветовой диапазон

Фрагмент цветовой гаммы является «нестандартным». Он используется программой Deluxe Paint от Electronic Arts для определения непрерывного диапазона регистров цвета или «диапазона оттенков» и смены цветов. Может быть ноль или больше CRNG фрагменты в файле ILBM, но все они должны появиться перед ТЕЛО кусок. Deluxe Paint обычно записывает 4 блока CRNG в ILBM, когда пользователь запрашивает «Сохранить изображение».[4]

ТипИмяОписание
INT16BEнабивка0x0000
INT16BEставкаСкорость цветового цикла. Единицы измерения таковы, что скорость 60 шагов в секунду представлена ​​как 214 = 16384. Более низкие скорости могут быть получены путем линейного масштабирования: для 30 шагов в секунду скорость = 8192.
INT16BEфлагиФлаги, управляющие чередованием цветов в палитре. Если бит 0 равен 1, цвета должны циклически меняться, в противном случае этот диапазон регистров цвета неактивен и не должен иметь никакого эффекта. Если бит 1 равен 0, цвета циклически изменяются вверх, то есть каждый цвет перемещается в следующую позицию индекса на карте цветов, а самый верхний цвет в диапазоне перемещается вниз в самую низкую позицию. Если бит 1 равен 1, цвета меняются в противоположном направлении. Только те цвета между низкий и высоко записи в цветовой карте должны циклически меняться.
UINT8низкийИндекс первой записи в цветовой карте, которая является частью этого диапазона.
UINT8высокоИндекс последней записи в цветовой карте, которая является частью этого диапазона.

CCRT: чередование цветов

Программа Commodore Graphicraft использует CCRT за Диапазон и время смены цвета. Этот блок содержит структуру CycleInfo. Нравиться CRNG это нестандартный кусок.[4]

ТипИмяОписание
INT16BEнаправлениеНаправление цикла: 0 = без цикла, 1 = вперед, -1 = назад
UINT8низкийвыбран самый низкий регистр цвета
UINT8высоковыбран самый высокий регистр цвета
INT32BEdelaySecСекунды между сменой цветов
INT32BEзадержкаМикросекунды между сменой цветов (добавлено в delaySec чтобы получить общее время задержки)
INT16BEнабивка0x0000

Данные похожи на CRNG кусок. Программа, вероятно, будет использовать только один из этих двух методов выражения данных цветового цикла. Вы можете записать оба, если хотите передать эту информацию и DeluxePaint, и Graphicraft.[4]

DEST: объединение битовых плоскостей

Необязательное свойство DEST это способ контролировать, как разбросать ноль или более исходных битовых плоскостей в более глубокое целевое изображение. Некоторые читатели могут игнорировать DEST.[4]

ТипИмяОписание
UINT8numPlanesКоличество битовых плоскостей в исходном изображении
UINT8pad1неиспользованный; используйте 0 для согласованности
UINT16BEсамолетКак выбрать самолеты, чтобы разбросать их по изображению назначения
UINT16BEplaneOnOffДанные по умолчанию для Plane Pick
UINT16BEсамолетМаскаВыбирает, в какие битовые плоскости сохранять

Количество битов с глубиной низкого порядка в planePick, planeOnOff и planeMask однозначно соответствует битовым плоскостям назначения. Бит 0 с битовой плоскостью 0 и т. Д. Любые биты более высокого порядка следует игнорировать.[4]

Биты «1» в planePick означают «поместить следующую исходную битовую плоскость в эту битовую плоскость», поэтому количество битов «1» должно равняться numPlanes. «0» бит означает «поместить соответствующий бит из planeOnOff в эту битовую плоскость».[4]

Биты в planeMask запись шлюза в битовую плоскость назначения: биты «1» означают «запись в эту битовую плоскость», а биты «0» означают «оставить эту битовую плоскость в покое». Обычный случай (без DEST кусок) эквивалентен planePick = planeMask = (2 ^ numPlanes) - 1.[4]

Помните, что номера цветов формируются пикселями в целевом растровом изображении (глубина плоскостей глубины), а не в исходном растровом изображении (глубокие плоскости numPlanes).[4]

GRAB: точка доступа

Необязательный СХВАТИТЬ chunk определяет местонахождение «маркера» или «горячей точки» изображения относительно его верхнего левого угла, например, при использовании в качестве курсора мыши или «кисти». Это необязательно.[4]

ТипИмяОписание
INT16BEИксКоордината X горячей точки в пикселях относительно верхнего левого угла изображения.
INT16BEуКоордината Y горячей точки в пикселях относительно левого верхнего угла изображения.

SPRT: Z-порядок

В SPRT chunk указывает, что изображение предназначено для спрайта. Таким образом, он должен иметь плоскость маски или прозрачный цвет и не должен быть полноэкранным. Как это делается, зависит от программы, использующей изображение. Единственные данные, хранящиеся здесь, - это порядок спрайтов, используемый многими программами для размещения спрайта на переднем плане (спрайт порядка 1 появляется после спрайта порядка 0 и т. Д.). Это необязательно.[4]

ТипИмяОписание
UINT16BEпорядокZ-порядок изображения (0 - ближе всего к переднему плану, большие числа - дальше / позади)

TINY: эскиз

В КРОШЕЧНЫЙ chunk содержит небольшое изображение для предварительного просмотра для различных графических программ, включая Deluxe Paint. Он сжат и похож по формату на ТЕЛО кусок.[нужна цитата ]

ТипИмяОписание
UINT16BEширинаШирина эскиза в пикселях
UINT16BEвысотаВысота эскиза в пикселях
БАЙТ[]данныеПиксельные данные хранятся точно так же, как ТЕЛО кусок. Используйте точно такой же алгоритм, подставляя ширину и высоту из КРОШЕЧНЫЙ кусок вместо взятых из BMHD кусок.

Примечания по работе с ILBM

Цветовые карты

Иногда файл ILBM содержит только цветовую карту и не содержит данных изображения. Часто используется для хранения палитры цветов, которую можно применить к изображению отдельно. В этом случае блок BODY должен быть пустым, а поле numPlanes в блоке BMHD будет иметь значение 0.[4]

Глубокие изображения

Некоторые файлы ILBM содержат информацию «истинного цвета», а не индексированные цвета. Эти файлы так называемых «глубоких изображений» не имеют блока CMAP и обычно имеют 24 или 32 битовых плоскости. Стандартный порядок битовых плоскостей ставит младший бит красного компонента первым:[4]

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 битовых плоскостей в качестве цветового индекса.[4]

Образы PBM не могут существовать в дополнительном полубрайт-режиме.[нужна цитата ]

Удерживать и изменять

Если файл ILBM содержит фрагмент CAMG, в котором установлен бит 11 (т.е. 0x800 в шестнадцатеричном формате), файл предполагает использовать режим HAM (Hold-And-Modify) набора микросхем Amiga. В формате HAM6 цветовая карта будет иметь до 16 записей, но изображение будет иметь 6 (или, возможно, 5 битовых плоскостей). В формате HAM8 цветовая карта будет иметь до 64 записей, но изображение будет иметь 8 (или, возможно, 7 битовых плоскостей).[4]

Последние две битовые плоскости (если нечетное количество битовых плоскостей предполагает дополнительную битовую плоскость, которая всегда равна 0) являются управляющими флагами, которые указывают, как использовать первые 4 (или 6) битовых плоскостей.[4]

Контрольные флагиОписание
00Используйте битовые плоскости 0–3 (или 0–5) в качестве индекса карты цветов как обычно
10Используйте цвет предыдущего пикселя, но замените синий компонент битами из битовых плоскостей 0-3 (или 0-5)
01Используйте цвет предыдущего пикселя, но замените красный компонент битами из битовых плоскостей 0-3 (или 0-5)
11Используйте цвет предыдущего пикселя, но замените зеленый компонент битами из битовых плоскостей 0-3 (или 0-5)

Если первый пиксель строки развертки является пикселем модификации, измените и используйте цвет границы изображения.[4]

Обратите внимание, что при использовании 4 битов для изменения цветового компонента вы должны использовать 4 бита в верхних 4 битах компонента И в нижних 4 битах (во избежание уменьшения общей цветовой гаммы). При использовании 6 битов это менее важно, но вы все равно можете поместить 2 старших бита битов модификации в два младших бита компонента цвета.[4]

Образы PBM не могут существовать в режиме удержания и изменения.[нужна цитата ]

Утилиты

Большинство утилит, работающих с файлами ILBM и BBM, довольно датированный, например MacPaint или Deluxe Paint. IrfanView позволяет просматривать файлы, бесплатен для некоммерческого использования и может работать под Linux.[нужна цитата ] Netpbm может конвертировать изображения из ILBM в свои собственные PPM формат[5] и назад.[6] В стиле Deluxe Paint GrafX2 редактор пиксельной графики может загружать и сохранять файлы ILBM. ImageMagick и ГрафикаMagick может также отображать и преобразовывать изображения ILBM.

Примечания

в Командир Keen Dreams В серии игр для титульных экранов используются сжатые автономные изображения ILBM, но игра не считывает большинство фрагментов ILBM. Это связано с тем, что изображения были отредактированы в DeluxePaint, а затем импортированы непосредственно в файлы игры.[нужна цитата ]

Смотрите также

Рекомендации

  1. ^ Джерри Моррисон (14 января 1985). «EA IFF 85: Стандарт для файлов формата обмена». Electronic Arts. Получено 2014-03-06.
  2. ^ Джерри Моррисон (17 января 1986). ""ILBM "IFF Interleaved Bitmap". Electronic Arts. Архивировано из оригинал на 2014-06-13. Получено 2014-03-06.
  3. ^ Джеймс Д. Мюррей, Уильям ванРайпер (апрель 1996 г.). «Энциклопедия форматов графических файлов, второе издание». О'Рейли. ISBN  1-56592-161-5. Получено 2014-02-27.CS1 maint: использует параметр авторов (связь)
  4. ^ а б c d е ж грамм час я j k л м п о п q р s т ты v ш Икс у z Hyperion Entertainment и участники (8 июня 2012 г.). "Растровое изображение с чередованием ILBM IFF". Получено 2018-07-30.CS1 maint: использует параметр авторов (связь)
  5. ^ Джеф Посканзер, Инго Уилкен (12 ноября 2014 г.). "ilbmtoppm". Получено 2019-06-13.CS1 maint: использует параметр авторов (связь)
  6. ^ Джеф Посканзер, Инго Уилкен (28 июня 2015 г.). "ppmtoilbm". Получено 2019-06-13.CS1 maint: использует параметр авторов (связь)

внешняя ссылка

  • PNG2ИЛБМ Преобразует файлы PNG в формат ILBM. Теоретически он может конвертировать любой PNG, включая альфа-канал и / или 16-битную глубину на канал. Он поддерживает повторную выборку, квантование, дизеринг, сохранение или переопределение регистров цвета на любых битовых плоскостях от 1 до 8, включая Extra-HalfBrite.
  • Графика Мастерская 1.1Y с середины 90-х может конвертировать из и во все варианты файлов ILBM; он поддерживает множество других форматов файлов изображений. Он устарел, но все еще работает даже в Windows 10 при работе в режиме совместимости с Windows XP. Существует также более новая коммерческая версия, известная как Graphics Workshop Professional с гораздо более современным пользовательским интерфейсом (похоже, середины 2000-х), который, однако, также устарел по сегодняшним стандартам.
  • Окончательная краска может читать, писать и отображать анимацию цветового цикла палитры.
  • XnView's nconvert это бесплатно и своевременно конвертер командной строки.
  • Конвертер изображений Plus это программа, которая конвертирует файлы ILBM в любое количество форматов. Хотя полная версия не является бесплатной, демонстрационная версия добавляет водяной знак, который можно удалить.
  • Paint Shop Pro 7.04 и другие старые версии PSP могут читать и записывать ILBM, но могут только читать файлы PBM. Особо упоминается PSP7, так как в условно-бесплатной версии есть ошибка, которая позволяет пропустить механизм завершения оценки, просто открыв файл (т. Е. Измените ярлык, чтобы всегда открывать файл, и вас не побеспокоят).