*.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. |
Далее я опишу несколько популярных форматов. Описание
дано в краткой форме так, чтобы лишь иметь общее представление о структуре
файлов.
К примеру может встретиться файл со следующей структурой:
[Цветов.Табл.][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г.
Секция заголовков содержит следующие данные:
-идентификатор формата - 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 | Начало области данных. |
Индексированные цвета и геометрические координаты точек. |
Для этого формата мной также была разработана смотрелка.
*Назначение некоторых полей данных мне до сих пор остается
неизвестным. К тому же некоторые поля имеют не постоянную длину, что в
некоторых случаях затрудняет чтение этих файлов.
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