Форматы файлов лазерной графики
 
     К настоящему времени создано большое количество различных  не совместимых между собой форматов файлов для хранения лазерной графики. Многие из них не документированы и найти описание структуры данных практически невозможно. Более того порой трудно найти даже само название формата. Здесь я попытался систематизировать имеющуюся у меня в наличии информацию в отношении таких файлов.
 
*.APC  Acorn PC600 files
*.DXF  Autocad DXF files
*.FDX;*.SDF;*.SDX;*.SHX  NML X29 files
*.FRM;*.FLM  Medialas files
*.FA1  NML Full-Auto files
*.ILD  ILDA files ( Color tables supported! ). Этот формат является общепризнанным стандартом и поддерживается большинством программ лазерной графики
*.LDA  Pangolin files
*.LDB Pangolin files
*.LDS Pangolin files
*.LOG  LaserLite files
*.LSD  Laser Drawer files
*.SCN;*.BFX;*.B3D  Lasermax files
*.TXT  Plain text files ( as scrolling text )
*.LF BILDA files
*.SLF BILDA files
*.CAT LDS/Phoenix files
*.PIC LDS/Phoenix files
*.ULF JoJo files
*.MOT Popelscan frame files
*.LLF Lascan Frame files
*.GTC GTC LaserShow files
*.WAV MS WAV Format. Данные о движении лазерного луча сохранены в звуковом формате с использованием технологии Dolby. Затем эти данные могут быть воспроизведены на переделанной звуковой плате с процессором объемного звука Dolby Surround.
 
Обновление от 2 апреля 2008г.

Далее я опишу несколько популярных форматов. Описание дано в краткой форме так, чтобы лишь иметь общее представление о структуре файлов.



Формат ILD
    Был разработан техническим комитетом ILDA для стандартизации способов хранения векторных лазерных файлов. Файлы ILD имеют довольно сложную структуру, включающую в себя различные типы данных. Файл может состоять из нескольких секций. На 2004-2005г стандартом было предусмотрено 4 секции:
1) 2D последовательность кадров;
2) 3D последовательность кадров(анимации);
3) Цветовые таблицы;
4) True Color анимации.

К примеру может встретиться файл со следующей структурой:
[Цветов.Табл.][3D кадры][TrueColor кадры][2D кадры][Цветов.Табл.][2D кадры]

Каждая такая секция имеет следующую структуру:
[заголовок][область данных]
Заголовок секции имеет идентификатор в виде ASCII строки "ILDA" и описывает информацию, находящуюся в области данных, следующих за заголовком.
Для 2D анимаций(Format Code=1) и 3D анимаций(Format Code=0) заголовки похожи и содерхжат поля, необходимые для правильного считывания данных:
-идентификатор заголовка формата;
-формат-код 2D(3D) анимации;
-имя кадра и компании;
-количество точек в текущем кадре;
-номер кадра;
-число кадров в анимации;
-номер сканирующей головки.
Сразу за заголовком следуют данные о координатах точек в следующем формате:
[X координата][Y координата][Z координата][Status Code]
Координате на каждой оси выделено по 2 байта, статус-код несет информацию о цвете рисуемого вектора и о конце текущего кадра.
Для каждого кадра назначается свой заголовок со своей областью данных.
Цветовые таблицы(Format Code=2) имеют похожую структуру, но вместо координат точек содержат информацию об используемых цветах в формате RGB. Для TrueColor секций(Format Code=3) векторам назначаются абсолютные цветовые значения в формате RGB.

Для понимания структуры формата мною был написан вьювер ILD файлов.

*Недавно мне стало известно о существовании форматов #4 и #5, но примеров таких файлов я еще не встречал.

Более детальную информацию о формате ILD можно найти в документе "ILDA Image Data Transfer Format"

 Обновление от 14 апреля 2008г.



Формат LDB
    Разработан фирмой PANGOLIN. Этот формат нигде не документирован и найти какую-либо информацию о его структуре мне не удалось. Поэтому мне самому пришлось дать свои названия полям данных.
    Итак, файл можно условно поделить на 2 секции:
[секция заголовков][секция данных]

Секция заголовков содержит следующие данные:
-идентификатор формата - ASCII строка "PANGOLINOBJECT"
-количество кадров(2 байта)
-комментарий к файлу - название программы(компании) создавшей файл
-цветовая палитра. Содержит информацию о количестве используемых цветов(до 256 цветов, 1 байт) и абсолютное значение каждого цвета в виде BGR. Идентификатором цветовой палитры является байт(формат-код) 2.
-заголовки кадров по порядку. Заголовок каждого кадра содержит следующую информацию:
    -идентификатор заголовка
    -формат кадра 2D или 3D. Формат-код 1 или 0 соответственно.
    -число точек(векторов) в текущем кадре(2 байта)
    -название кадра(комментарий).
За  заголовком последнего кадра заканчивается секция заголовков и начинается секция данных. В этой секции содержатся данные о координатах точек(векторов) по порядку. Каждая точка представлена в следующем формате:
[номер цвета, 1 байт][коорд. X][коорд. Y][коорд. Z][разделитель, 1 байт, всегда 0]

Все координаты имеют разрядность 16 бит, порядок следования байтов: MSB, LSB.
Координата Z представлена только в 3D офрмате.

Более детально структура файла отображена в следующей таблице:
 
Смещение Назначение поля
+0 "PANGOLINOBJECT", ASCII, 14 байт
+17 Количество кадров, 2 байта, MSB,LSB
+19 Комментарий, 40 байт
+59-60 Неизвестно
+61-XX Предположительно цветовая палитра(Palette) или информация о формате данных -2D/3D.
Длина поля Palette=(байт 61)*4-1
+61+Palette Заголовок кадра1 - FrameHeader1
+61+Palette+0 Предположительно информация о синхронизации и о используемых цветах в кадре.
Длина 5 байт
+61+Palette+6 Число векторов в кадре, 2 байта, MSB,LSB
FrameHeader+8 Неизвестно, 6 байт
FrameHeader1+14 Комментарий кадра, 23 байт. Frame1Comment
Frame1Comment+24 Неизвестно, 36 байт
FrameHeader1+72 Начало FrameHeader2
FrameHeaderN+72 Начало области данных.
Индексированные цвета и геометрические координаты точек.

Для этого формата мной также была разработана смотрелка.

*Назначение некоторых полей данных мне до сих пор остается неизвестным. К тому же некоторые поля имеют не постоянную длину, что в некоторых случаях затрудняет чтение этих файлов.



Формат PIC
    С этим форматом работает программа LDS. Описывать его структуру не буду, а лишь ограничусь кодом процедуры для чтения True Color файлов программы LDS2008.

Sub OpenPIC()
Dim ByteOffset As Long
Dim MSB As Byte, LSB As Byte
Dim i As Long
Dim PrevX As Integer, PrevY As Integer
Dim X As Byte, Y As Byte, Z As Byte
Picture1.Cls
Picture1.ForeColor = vbBlack
Open CommonDialog1.FileName For Binary As #1
ByteOffset = 7
Get #1, ByteOffset, MSB 'Getting Points Number
Get #1, ByteOffset + 1, LSB
TotalPoints = MSB * 256 + LSB
Label2.Caption = TotalPoints
ByteOffset = 15
For i = 1 To TotalPoints
    Get #1, ByteOffset, MSB
    Get #1, ByteOffset + 1, LSB
    XCoord(i) = LSB
    X = ConvertValue(LSB)
    Get #1, ByteOffset + 2, MSB
    Get #1, ByteOffset + 3, LSB
    YCoord(i) = 255 - LSB
    Y = ConvertValue(LSB)
    Get #1, ByteOffset + 4, MSB
    Get #1, ByteOffset + 5, LSB
    ZCoord(i) = MSB ''*****Didn't present in files, all zero. Z?
    Get #1, ByteOffset + 6, MSB
    Get #1, ByteOffset + 7, LSB
    Blanking(i) = MSB
    Get #1, ByteOffset + 8, Red(i)
    Get #1, ByteOffset + 9, Green(i)
    Get #1, ByteOffset + 10, Blue(i)
    ByteOffset = ByteOffset + 11
    If (Blanking(i) < 192) Then
        Blanking(i) = 0 'Laser ON
        Picture1.ForeColor = RGB(Red(i), Green(i), Blue(i))
        Picture1.Line (X, Y)-(PrevX, PrevY)
    Else
        Blanking(i) = 64 'Laser OFF
    End If
    If (i = TotalPoints) Then Blanking(i) = 192 'Laser OFF, End Data of this frame
    PrevX = X
    PrevY = Y
Next i
Close #1
End Sub


 

На главную

Hosted by uCoz