Формат файла Silicon Graphics Image ( SGI ) или RGB — это собственный формат файла растровой графики для рабочих станций Silicon Graphics . [4] Формат был изобретен Полом Хеберли . [4] Он может быть закодирован по длине серии (RLE). FFmpeg и ImageMagick , среди прочих, поддерживают этот формат.
Распространенные расширения файлов:
.sgi
или.rgb
.rgba
.bw
или.int
.inta
Этот формат был изначально разработан для IRIX . Основные файлы набора тестов SVT High Definition Multi Format — это SGI. [6] [7] [8] Кадр 200 последовательности ParkJoy в этом наборе (15722.sgi, 3840×2160, 47,4 МБ) использовался в сравнениях WebP .
Формат изображения SGI использует порядок big endian . Данные изображения сканируются слева направо снизу вверх.
Подпись файла/Магическое число
Должно быть равно 0x01
0xda
для файла SGI.
Сжатие
0
если файл несжатый; 1
для сжатия RLE.
Байт на пиксель канала
Значение указано 1
для 8 бит на канал; 2
для 16 бит на канал.
Измерение
Значение указано 1
для 1 канала, 1 изображения в одну строку развертки; 2
для 1 канала, изображения в несколько строк развертки; 3
для нескольких каналов, изображения в несколько строк развертки (наиболее распространено).
Размер X
Ширина строки развертки в пикселях.
Размер Y
Количество строк развертки в изображении.
Количество каналов
Количество каналов в изображении. Значение указано 1
для изображений в оттенках серого; 3
для RGB; 4
для RGBA. SGI поддерживает более 4 каналов.
Минимальное значение пикселя
Наименьшее значение пикселя во всех каналах. Поскольку SGI использует типы unsigned char или short для каналов, наименьшее возможное значение обычно равно 0
.
Максимальное значение пикселя
Наибольшее значение пикселя во всех каналах. Поскольку SGI использует типы unsigned char или short для каналов, наибольшее возможное значение обычно 0xff
составляет 8 бит/канал и 0xffff
16 бит/канал.
Дурачок
4 байта, неиспользуемые.
Имя изображения
Имя изображения, 80-байтовая (максимум 79 символов ≠ 0x00
) строка C. Если имя короче 79 символов, все последующие байты должны быть 0x00
в порядке заполнения 80-байтового пространства.
Идентификатор цветовой карты
SGI поддерживает 4 типа цветового отображения:
0x00
нормальный: изображение имеет 1 канал (оттенки серого), 3 канала (RGB) или 4 канала (RGBA).0x01
сглажено: изображение имеет упакованный RGB. Первые 3 бита для канала R, следующие 3 бита для канала G, а последние 2 бита для канала B.0x02
экран: изображение использует цветовую карту. Пиксельные данные индексируются в цветовой карте, а изображение имеет только 1 канал.0x03
colormap: файл содержит данные только для одной цветовой карты (можно использовать для другого файла изображения). Этот файл не содержит данных изображения.Дурачок
404 байта. Обычно не используется, масштабирует заголовок до 512 байт.
Без сжатия
Данные изображения начинаются с байта 512 в файле. Длина данных может быть рассчитана следующим образом:
(Размер X) × (Размер Y) × (Количество каналов) × (Байт на канал)
Данные разделены для каждого канала. Например, если изображение использует RGBA, первый набор строк развертки представляет канал R, следующий набор строк развертки — канал G, затем канал B и, наконец, канал A. Таким образом, к каждому набору строк развертки можно получить прямой доступ с помощью следующей формулы (где C = индекс канала):
(Размер X) × (Размер Y) × ( C ÷ Количество каналов) × (Байтов на канал)
Сжатие RLE
Таблицы смещений начинаются с байта 512. Их длину можно рассчитать следующим образом:
(Размер Y) × (Количество каналов) × Длина 4 байта
Каждое беззнаковое целое число в таблице представляет смещение (от начала файла) до начала сжатых данных каждой строки сканирования в каждом канале. Данные разделены для строки сканирования каждого канала. Если изображение имеет каналы RGBA, порядок остается R, G, B и A.
Далее следует таблица длины данных, которую также можно рассчитать по формуле:
(Размер Y) × (Количество каналов) × Длина 4 байта
Эта таблица содержит размер сжатых данных (unsigned int) каждой строки сканирования. Этот размер должен быть равен разнице чисел в таблице смещений.
Последний блок данных содержит сжатые RLE данные изображения. Если количество байт на канал равно 1
, сжатые данные имеют тип unsigned char. В противном случае, если количество байт на канал равно 2
, сжатые данные имеют тип unsigned short. Последний байт сжатых данных scanline имеет значение 0
.
Для обоих случаев есть данные unsigned char или unsigned short, младшие 7 бит сообщают count. Если бит 8 равен нулю, count — это число раз, умноженное на копируемое значение после count. Если бит 8 равен единице, count — это число раз, умноженное на копируемую серию значений после count byte. Для изображения размером 2 байта/канал count и value — unsigned short, а верхний байт count всегда равен нулю.