1) заголовок - запись, но считывать каждое поле надо отдельно, таблицы для сжатых изображений - в 2 массива, само изображение - в TBitmap
2)
Код:
//Заголовок SGI-файла
TSGIHeader = packed record
Magic : Word; //474 - Сигнатура
Storage : byte; //1=сжатие
BPC : byte; //1/2 байт на цвет
Dimension:word; //1=один канал, 1 строка; 2=1 канал много строк;
// 3=ZSize-число каналов
XSize:word; //Ширина
YSize:word; //Высота
ZSize:word; //1=монохромный; 3=RGB; 4=RGBA
PixMin:cardinal; //$00 - минимальное значение пикселя
PixMax:cardinal; //$FF - максимальное значение пикселя
Dummy1:cardinal; //заглушка
Name:array[1..80] of AnsiChar; //Имя изображения; Name[80]=#0
ColorMap:cardinal; //Режим хранения пикселей
//0=Нормальный; 1=Смешанный; 2=Палитровый; 3=Это палитра
Dummy2:array[1..404] of byte; //Заглушка
end;
...
var SGIHeader : TSGIHeader;
...
procedure ReadHeader(S:TFileStream);
...
S.Read(SGIHeader.Name[1], 80);
...
S.Read(SGIHeader.Dummy2[1], 404);
...