Home   English     LTF Forum
Beschreibung des Laserimage Transfer Formates (LTF)

C/C++, Pascal Code zum Lesen/Schreiben folgen

(c) Rolf Peter Kolpack & Rainer Moor

Beispiellisting zum Einlesen einer LTF Datei in Pascal:

{---------------------------------------------------------}
Procedure Lese_Dateikopf;
Begin
  Lese_16_Byte_aus_File_oder_Array;
end;
{---------------------------------------------------------}
Procedure Lese_Datei;
Begin
  Repeat
    TagId = Lese_Byte_aus_File_oder_Array;
    TagLen = Lese_Byte_aus_File_oder_Array;
    if=255 Taglen:=Lese_Longint_aus_File_oder_Array;         (DWord  in Delphi)
    Case Tagid of
       TagColorTable  :Lese_und_Setze_Farbpalette;           {1}
       TagHersteller  :Lese_Herstellerdaten;                 {2}
       TagImageName:  :Lese_Frame_Name;                      {3}
       TagSetPPS      :Lese_und_Setze_PPS;                   {4}
       TagImage1      :Lese_und_Schicke_Framedaten_an_Laser; {10}
     Else Tag_unbekannt_einlesen_und_ignorieren
    end;
  until Tagid=TagEnd;                                        {0=Ende}
{---------------------------------------------------------}
Begin                                                        {Programstart}
  Lese_Dateikopf;
  Lese_Datei;
end.
{------------------------ Ende Pascal---------------------}

Variablendefinition
Beispiellisting zum Einlesen einer LTF Datei in C:
lese_Dateikopf( LTF);
do {
   TagId = fgetU8( LTF);
   TagLen = fgetU8( LTF);
   if( TagLen == 255) {
     TagLen = fgetU32( LTF);
   }
   switch( TagId)
   {
   case TagEnd:
     break;
   case TagColorTable:
     bearbeite_TagColorTable();
     break;
   case TagHersteller:
     bearbeite_TagHersteller();
     break;
   case TagImageName:
     bearbeite_TagImageName();
     break;
   case TagSetPPS:
     bearbeite_TagSetPPS();
     break;
   case TagImage1:
     bearbeite_TagImage1();
     break;
   default:
     /* kennen wir nicht, also überspringen... */
     getbytes( LTF, TagLen);
     break;
   }
} while( TagId != TagEnd);

Beschreibung der Variablentypen
Type Beschreibung - Reihenfolge
U8 8 Bit ohne vorzeichen, 0..255
S8 8 Bit mit vorzeichen, -128..127
U16 16 Bit ohne vorzeichen, 0..65535 (2 Bytes MSB/LSB)
S16 16 Bit mit vorzeichen, -32768..32767 (2 Bytes MSB/LSB)
U32 32 Bit ohne vorzeichen (4 Bytes UpperMSB/UpperLSB/LowerMSB/LowerLSB)
S32 32 Bit mit vorzeichen (4 Bytes UpperMSB/UpperLSB/LowerMSB/LowerLSB)
STRING ASCII-String im C-Format (nullterminiert)

Beschreibung LTF-Dateikopf (16 Bytes)
ByteOffset Länge/Type Beschreibung
0 3 - char "L","T","F" - ASCII-"LTF"
3 U8 Versionsnummer (aktuell 0)
4 U32 Total_Tags: Anzahl Tags in dieser Datei(nur zur Info, nicht bindend)
8 U32 TagImage1count: Anzahl TagImage1 in dieser Datei
12 U32 Reserviert, muss 0 sein !

Jeder Datenblock wird angeführt von einem Identifizierer
und der Datenblocklänge, sodas unbekannte oder nicht unterstützte
Datenblöcke übersprungen werden können

Beschreibung LTF-Tagformat:
ByteOffset Länge/Type Beschreibung
0 U8 TagId: Type des Tag's (z.b. 0=EndTag)
1 U8 TagSLen: Länge in Bytes der Tagdaten(0..254),wenn = 255 dann folgender Eintrag
2 U32 TagLLen: Länge in Bytes der Tagdaten. <-- ACHTUNG: nur wenn TagSLen = 255
2/6 ?? TagDaten

Beschreibung LTF-TagEnd(0)
ByteOffset Länge/Type Wert - Beschreibung
0 U8 TagId = 0
1 U8 TagSLen = 0

Beschreibung LTF-TagColorTable(1)
ByteOffset Länge/Type Wert - Beschreibung
0 U8 TagId = 1
1 U8 TagSLen = 255
2 U32 TagLLen: Länge der folgenden Daten in Bytes (2 + ColTabsize * 3).
6 U16 ColTabsize: anzahl der Farbregister (1..65535)
8.. U8 Rot 0..255
9.. U8 Grün 0..255
10.. U8 Blau 0..255

Beschreibung LTF-TagHersteller(2)
ByteOffset Länge/Type Wert - Beschreibung
0 U8 TagId = 2
1 U8 TagSLen: Länge der folgenden Daten in Bytes(max.254)
2 STRING Hersteller

Beschreibung LTF-TagImageName(3)
ByteOffset Länge/Type Wert - Beschreibung
0 U8 TagId = 3
1 U8 TagSLen: Länge der folgenden Daten in Bytes(max.254)
2 U16 Frame_nr: Name für welches Image.
4 STRING ImageName

Beschreibung LTF-TagSetPPS(4)
ByteOffset Länge/Type Wert - Beschreibung
0 U8 TagId = 4
1 U8 TagSLen = 4
2 U32 PPS: Punkte pro Sekunde - Points per Second

Beschreibung LTF-TagImage1(10)
ByteOffset Länge/Type Wert - Beschreibung
0 U8 TagId = 10
1 U8 TagSLen = 255
2 U32 TagLLen: Länge der folgenden Daten in Bytes.
6 U16 Image_Nr: Nummer des Images in dieser Datei (0...65535)
8 U16 Points_Total: Anzahl Punkte (1...65535) in diesem Image.
10 U8 Frame_Repeat: (0 = einmal, kann ignoriert werden)
11 U8 Punkttype (siehe Unten)
12.. LTF-Punkt LTF-Punkt[Points_Total]

Die Punkttypen gibt es in Paaren einmal mit Z-Koord. und ohne Z-Koord.
Am Bit 0 kann man Testen ob eine Z-Koord. vorhanden ist (Bit 0=0)

PT_XYZ8_PAL
PT_XY8_PAL
PT_XYZ12_PAL
PT_XY12_PAL
PT_XYZ16_PAL
PT_XY16_PAL
PT_XYZ12_RGB5
PT_XY12_RGB5
PT_XYZ16_RGB5
PT_XY16_RGB5
PT_XYZ16_RGB8
PT_XY16_RGB8
PT_XYZ32_RGB8
PT_XY32_RGB8

Beschreibung LTF-Punkt Type 0, Länge 4 Bytes
PT_XYZ8_PAL
ByteOffset Länge Beschreibung
0 S8 X-Koord, Bit7 ist Vorzeichen
1 S8 Y-Koord, Bit7 ist Vorzeichen
2 S8 Z-Koord, Bit7 ist Vorzeichen
3 U8 Attribut: Bit 7=1=Blank(0=Light)
die Bit's 6..0 ergeben die Farbregisternummer 0..127

Beschreibung LTF-Punkt Type 1, Länge 3 Bytes
PT_XY8_PAL
ByteOffset Länge Beschreibung
0 S8 X-Koord, Bit7 ist Vorzeichen
1 S8 Y-Koord, Bit7 ist Vorzeichen
2 U8 Attribut: Bit 7=1=Blank(0=Light)
die Bit's 6..0 ergeben die Farbregisternummer 0..127

Beschreibung LTF-Punkt Type 2, Länge 6 Bytes
PT_XYZ12_PAL
ByteOffset Länge Beschreibung
0 S8 X-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
1 S8 Y-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
2 S8 Z-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
3 U8 Bits 7..4 untere 4 Bit der X-Koord, Bits 3..0 untere 4 Bit der Y-Koord.
4 U8 Bits 7..4 untere 4 Bit der Z-Koord, Bits 3..0 sind reserviert und müssen 0 sein.
5 U8 Attribut: Bit 7=1=Blank(0=Light)
die Bit's 6..0 ergeben die Farbregisternummer 0..127

Beschreibung LTF-Punkt Type 3, Länge 4 Bytes
PT_XY12_PAL
ByteOffset Länge Beschreibung
0 S8 X-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
1 S8 Y-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
2 U8 Bits 7..4 untere 4 Bit der X-Koord, Bits 3..0 untere 4 Bit der Y-Koord.
3 U8 Attribut: Bit 7=1=Blank(0=Light)
die Bit's 6..0 ergeben die Farbregisternummer 0..127

Beschreibung LTF-Punkt Type 4, Länge 8 Bytes
PT_XYZ16_PAL
ByteOffset Länge Beschreibung
0 S16 X-Koord, Bit15 ist Vorzeichen
2 S16 Y-Koord, Bit15 ist Vorzeichen
4 S16 Z-Koord, Bit15 ist Vorzeichen
6 U16 Attribut: Bit 15=1=Blank(0=Light)
die Bit's 14..12 sind reserviert und müssen 0 sein !
Bit's 11..0 Farbregisternummer 0..4095

Beschreibung LTF-Punkt Type 5, Länge 6 Bytes
PT_XY16_PAL
ByteOffset Länge Beschreibung
0 S16 X-Koord, Bit15 ist Vorzeichen
2 S16 Y-Koord, Bit15 ist Vorzeichen
4 U16 Attribut: Bit 15=1=Blank(0=Light)
die Bit's 14..12 sind reserviert und müssen 0 sein !
Bit's 11..0 Farbregisternummer 0..4095

Beschreibung LTF-Punkt Type 6, Länge 6 Bytes
PT_XYZ12_RGB5
ByteOffset Länge Beschreibung
0 S8 X-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
1 S8 Y-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
2 U8 Bits 7..4 untere 4 Bit der X-Koord, Bits 3..0 untere 4 Bit der Y-Koord.
3 U8 Bits 7..4 untere 4 Bit der Z-Koord, Bits 3..0 sind reserviert und müssen 0 sein.
4 U16 Attribut: Bit 15=1=Blank(0=Light)
die Bit's 14..12 sind reserviert und müssen 0 sein !
Bit's 11..0 Farbregisternummer 0..4095

Beschreibung LTF-Punkt Type 7, Länge 5 Bytes
PT_XY12_RGB5
ByteOffset Länge Beschreibung
0 S8 X-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
1 S8 Y-Koord, oberste 8 Bit von 12, Bit11 ist Vorzeichen
2 U8 Bits 7..4 untere 4 Bit der X-Koord, Bits 3..0 untere 4 Bit der Y-Koord.
3 U16 Attribut: Bit 15=1=Blank(0=Light)
die Bit's 14..12 sind reserviert und müssen 0 sein !
Bit's 11..0 Farbregisternummer 0..4095

Beschreibung LTF-Punkt Type 8, Länge 8 Bytes
PT_XYZ16_RGB5
ByteOffset Länge Beschreibung
0 S16 X-Koord, Bit15 ist Vorzeichen
2 S16 Y-Koord, Bit15 ist Vorzeichen
4 S16 Z-Koord, Bit15 ist Vorzeichen
6 U16 Attribut: Bit 15=1=Blank(0=Light)
dann 3 * 5 Bits Rot,Grün,Blau

Beschreibung LTF-Punkt Type 9, Länge 6 Bytes
PT_XY16_RGB5
ByteOffset Länge Beschreibung
0 S16 X-Koord, Bit15 ist Vorzeichen
2 S16 Y-Koord, Bit15 ist Vorzeichen
4 U16 Attribut: Bit 15=1=Blank(0=Light)
dann 3 * 5 Bits Rot,Grün,Blau

Beschreibung LTF-Punkt Type 10, Länge 10 Bytes
PT_XYZ16_RGB8
ByteOffset Länge Beschreibung
0 S16 X-Koord, Bit15 ist Vorzeichen
2 S16 Y-Koord, Bit15 ist Vorzeichen
4 S16 Z-Koord, Bit15 ist Vorzeichen
6 U8 Attribut: Bit 7=1=Blank(0=Light)
die Bit's 6..0 sind reserviert und müssen 0 sein !
7 U8 Rot 0..255
8 U8 Grün 0..255
9 U8 Blau 0..255

Beschreibung LTF-Punkt Type 11, Länge 8 Bytes
PT_XY16_RGB8
ByteOffset Länge Beschreibung
0 S16 X-Koord, Bit15 ist Vorzeichen
2 S16 Y-Koord, Bit15 ist Vorzeichen
4 U8 Attribut: Bit 7=1=Blank(0=Light)
die Bit's 6..0 sind reserviert und müssen 0 sein !
5 U8 Rot 0..255
6 U8 Grün 0..255
7 U8 Blau 0..255

Beschreibung LTF-Punkt Type 12, Länge 16 Bytes
PT_XYZ32_RGB8
ByteOffset Länge Beschreibung
0 S32 X-Koord, Bit31 ist Vorzeichen
4 S32 Y-Koord, Bit31 ist Vorzeichen
8 S32 Z-Koord, Bit31 ist Vorzeichen
12 U8 Attribut: Bit 7=1=Blank(0=Light)
die Bit's 6..0 sind reserviert und müssen 0 sein !
13 U8 Rot 0..255
14 U8 Grün 0..255
15 U8 Blau 0..255

Beschreibung LTF-Punkt Type 13, Länge 12 Bytes
PT_XY32_RGB8
ByteOffset Länge Beschreibung
0 S32 X-Koord, Bit31 ist Vorzeichen
4 S32 Y-Koord, Bit31 ist Vorzeichen
8 U8 Attribut: Bit 7=1=Blank(0=Light)
die Bit's 6..0 sind reserviert und müssen 0 sein !
9 U8 Rot 0..255
10 U8 Grün 0..255
11 U8 Blau 0..255

Die LTF Standard-Farbpalette
Farbnummer Rot Grün Blau
0 255 0 0
1 255 16 0
2 255 32 0
3 255 48 0
4 255 64 0
5 255 80 0
6 255 96 0
7 255 112 0
8 255 128 0
9 255 144 0
10 255 160 0
11 255 176 0
12 255 192 0
13 255 208 0
14 255 224 0
15 255 240 0
16 255 255 0
17 224 255 0
18 192 255 0
19 160 255 0
20 128 255 0
21 96 255 0
22 64 255 0
23 32 255 0
24 0 255 0
25 0 255 32
26 0 255 64
27 0 255 96
28 0 255 128
29 0 255 160
30 0 255 192
31 0 255 224
32 0 130 255
33 0 114 255
34 0 104 255
35 10 96 255
36 0 82 255
37 0 74 255
38 0 64 255
39 0 32 255
40 0 0 255
41 32 0 255
42 64 0 255
43 96 0 255
44 128 0 255
45 160 0 255
46 192 0 255
47 224 0 255
48 255 0 255
49 255 32 255
50 255 64 255
51 255 96 255
52 255 128 255
53 255 160 255
54 255 192 255
55 255 224 255
56 255 255 255
57 255 224 224
58 255 255 255
59 255 160 160
60 255 128 128
61 255 96 96
62 255 64 64
63 255 32 32
63 255 32 32
64..4095 255 32 32
28_9_00