Projects/Liberty/File Formats/Janome Embroidery Format: Difference between revisions

From KDE Community Wiki
(Migrated page from https://bitbucket.org/dboddie/python-showjef/wiki/Home)
 
 
(15 intermediate revisions by 3 users not shown)
Line 1: Line 1:
= Janome Embroidery Format =
== Janome Embroidery Format JEF ==


The Janome Embroidery Format .jef (and .sow) files contain a header and stitch instructions, but does not contain any obvious signature bytes. The only signature is to see if the thread change table is the correct size and the file length is right for the number of thread changes and the number of stitches. For the .jef+ format there is extra data after the thread tables, then the 32bit aligned string "JANO", "ME\0\0", then a 32bit number (1 for a 1 thread pattern), then a 32bit bitmap-start offset -- with ruins the .jef 'signature', but now we have the string "JANOME".
The JEF and JEF+ files consists of a number of sections. Multi-byte numbers appear to be stored little endian. For the JEF (and not JEF+ ) files, there is no simple signature, except to see if the Stitch-offset is after the Thread-type-list. The JEF pattern can easily be extracted from JEF+ files; by using the Stitch-offset to the Stitch-list, to skip over the JEF+ header; and then to ignore the JEF+ details, after the Stitch-list, at the end of the file.


The header contains a date, number of thread changes, number of stitches, stitch extent rectangle, other optional rectangles, and two thread change tables (the first is thread colour).
File =  File-header Thread-colour-list  Thread-type-list  [Plus-header]  Stitch-list  {Plus-detail}
The stitch instructions are pairs of 8 bit offsets (starting from the centre of the design) with an escape sequence for move, thread change, and end of pattern.


Thread-colour-list = {Thread-colour}
Thread-type-list = {Thread-type}
Stitch-list = {Stitch}
Stitch = Escaped-command | Displacement
===File-header===
{| class="wikitable"
{| class="wikitable"
! Offset !! Description
| Offset
| Length
| Type
| Description
|-
| 0
| 4
| Offset
| Stitch-offset location of first stitch
|-
| 4
| 4
| Flags
| unknown = 1, 10 or 20
|-
| 8
| 8
| ASCII
| Date YYYYMMDD
|-
| 16
| 8
| ASCII
| Time HHMMSSxx
|-
| 24
| 4
| Count
| Thread-count number of thread changes
|-
| 28
| 4
| Count
| Stitch-count
|-
| 32
| 4
| Code
| Hoop-code = 0 to 4
|-
| 36
| 4
| Measure
| Extent-1-left stitch extent left of centre in 0.1 mm units
|-
| 40
| 4
| Measure
| Extent-1-top
|-
| 44
| 4
| Measure
| Extent-1-right
|-
| 48
| 4
| Measure
| Extent-1-bottom
|-
| 52
| 4
| Measure
| Extent-2-left; -1 implies not used
|-
| 56
| 4
| Measure
| Extent-2-top
|-
| 60
| 4
| Measure
| Extent-2-right
|-
| 64
| 4
| Measure
| Extent-2-bottom
|-
| 68
| 4
| Measure
| Extent-3-left; -1 implies not used
|-
| 72
| 4
| Measure
| Extent-3-top
|-
| 76
| 4
| Measure
| Extent-3-right
|-
| 80
| 4
| Measure
| Extent-3-bottom
|-
| 84
| 4
| Measure
| Extent-4-left; -1 implies not used
|-
| 88
| 4
| Measure
| Extent-4-top
|-
| 92
| 4
| Measure
| Extent-4-right
|-
| 96
| 4
| Measure
| Extent-4-bottom
|-
| 100
| 4
| Measure
| Extent-5-left; -1 implies not used
|-
| 104
| 4
| Measure
| Extent-5-top
|-
| 108
| 4
| Measure
| Extent-5-right
|-
| 112
| 4
| Measure
| Extent-5-bottom
|}
 
===Hoop-code===
{| class="wikitable"
| Hoop-code
| Hoop-name
| Hoop-size
|-
| 0
| A Standard
| 126 x 110 mm
|-
| 1
| C Free Arm
|  50 x  50 mm
|-
| 2
| B Large
| 140 x 200 mm
|-
| 3
| F Spring Loaded
| 126 x 110 mm
|-
| 4
| D Giga
| 230 x 200 mm
|}
 
===Thread-colour===
{| class="wikitable"
| Offset
| Length
| Type
| Description
|-
| 0
| 4
| Code
| Thread-code = 1 to 78
|}
 
 
{| class="wikitable"
| Thread-code
| Colour-RGB
| Colour-number
| Colour-name
|-
| 1
| "#000000"
| 002
| "Black"
|-
| 2
| "#F0F0F0"
| 001
| "White"
|-
| 3
| "#FFCC00"
| 239
| "Sunflower"
|-
| 4
| "#E6651E"
| 254
| "Hazel"
|-
| 5
| "#C4E39D"
| 264
| "Green Dust"
|-
| 6
| "#237336"
| 226
| "Green"
|-
| 7
| "#071650"
| 232
| "Navy Blue"
|-
| 8
| "#4CB58F"
| 250
| "Emerald Green"
|-
| 9
| "#F669A0"
| 201
| "Pink"
|-
| 10
| "#FF4720"
| 202
| "Vermilion"
|-
| 11
| "#E2A188"
| 236
| "Cinnamon"
|-
| 12
| "#595B61"
| 252
| "Dark Gray"
|-
| 13
| "#E4C35D"
| 003
| "Gold"
|-
| 14
| "#6231BD"
| 261
| "Violet Blue"
|-
| 15
| "#2F5933"
| 219
| "Olive Green"
|-
| 16
| "#FAB381"
| 212
| "Peach"
|-
| 17
| "#F999B7"
| 211
| "Pale Pink"
|-
| 18
| "#F09C96"
| 256
| "Salmon"
|-
| 19
| "#A39166"
| 268
| "Olive Drab"
|-
| 20
| "#970533"
| 215
| "Wine Red"
|-
| 21
| "#AC9CC7"
| 209
| "Pale Violet"
|-
| 22
| "#65C2C8"
| 217
| "Sky"
|-
| 23
| "#E5E5E5"
| 220
| "Silver Gray"
|-
| 24
| "#A0B8CC"
| 216
| "Pale Sky"
|-
| 25
| "#98D6BD"
| 227
| "Pale Aqua"
|-
| 26
| "#0B2F84"
| 207
| "Blue"
|-
| 27
| "#98F3FE"
| 229
| "Powder Blue"
|-
| 28
| "#B2E1E3"
| 228
| "Baby Blue"
|-
| 29
| "#FF0927"
| 244
| "Cardinal Red"
|-
| 30
| "#14329C"
| 262
| "Blue Ink"
|-
| 31
| "#A80043"
| 242
| "Burgundy"
|-
| 32
| "#FF6600"
| 203
| "Orange"
|-
|-
|0x0000
| 33
|Stitch-start offset
| "#FF6048"
| 234
| "Coral"
|-
|-
|0x0004
| 34
|Flags, domain: 0x1, 0xa
| "#B59474"
| 237
| "Umber"
|-
|-
|0x0008
| 35
|Date ASCII YYYY
| "#FDF5B5"
| 210
| "Pale Yellow"
|-
|-
|0x000C
| 36
|Date ASCII MMDD
| "#F5DB8B"
| 238
| "Blond"
|-
|-
|0x0010
| 37
|TIME ASCII HHMM
| "#C79732"
| 272
| "Old Gold"
|-
|-
|0x0014
| 38
|TIME ASCII SS00
| "#889B9B"
| 221
| "Gray"
|-
|-
|0x0018
| 39
|Thread-load-count
| "#AB5A96"
| 208
| "Purple"
|-
|-
|0x001C
| 40
|Stitch-count
| "#FFBDE3"
| 240
| "Orchid Pink"
|-
|-
|0x0020
| 41
|Hoop-code, domain: 0 "A 126mm x 110mm", 1 "C 50mm x 50mm", 2 "B 140mm x 200mm", 3, 4
| "#C3007E"
| 241
| "Peony Purple"
|-
|-
|0x0024
| 42
|Stitch-extent-left 0.1mm units from centre
| "#FF0000"
| 225
| "Red"
|-
|-
|0x0028
| 43
|Stitch-extent-top
| "#EE71AF"
| 266
| "Floral Pink"
|-
|-
|0x002C
| 44
|Stitch-extent-right
| "#608541"
| 246
| "Moss Green"
|-
|-
|0x0030
| 45
|Stitch-extent-bottom
| "#609418"
| 247
| "Meadow Green"
|-
|-
|0x0034
| 46
|box2-left -- minus 1 appears to indicate not used
| "#C6EECB"
| 245
| "Opal Green"
|-
|-
|0x0038
| 47
|box2-top
| "#5BD2B5"
| 249
| "Aquamarine"
|-
|-
|0x003C
| 48
|box2-right
| "#FFFF17"
| 204
| "Yellow"
|-
|-
|0x0040
| 49
|box2-bottom
| "#04917B"
| 251
| "Peacock Green"
|-
|-
|0x0044
| 50
|box3-left
| "#5C2625"
| 260
| "Dark Sepia"
|-
|-
|0x0048
| 51
|box3-top
| "#FFFFDC"
| 253
| "Ivory White"
|-
|-
|0x004C
| 52
|box3-right
| "#FF5A27"
| 235
| "Burnt Orange"
|-
|-
|0x0050
| 53
|box3-bottom
| "#A76C3D"
| 257
| "Cocoa Brown"
|-
|-
|0x0054
| 54
|box4-left
| "#9C6445"
| 214
| "Brown"
|-
|-
|0x0058
| 55
|box4-top
| "#B45A30"
| 258
| "Sienna"
|-
|-
|0x005C
| 56
|box4-right
| "#481A05"
| 205
| "Dark Brown"
|-
|-
|0x0060
| 57
|box4-bottom
| "#0C8918"
| 269
| "Meadow"
|-
|-
|0x0064
| 58
|box5-left
| "#70A9E2"
| 230
| "Bright Blue"
|-
|-
|0x0068
| 59
|box5-top
| "#1D5478"
| 231
| "Slate Blue"
|-
|-
|0x006C
| 60
|box5-right
| "#165FA7"
| 263
| "Solar Blue"
|-
|-
|0x0070
| 61
|box5-bottom
| "#7FC21C"
| 218
| "Yellow Green"
|-
|-
|0x0074
| 62
|thread-colour-table, domain: 0x01 - 0x4e -- there are **79** colours in the Janome catalogue
| "#06480D"
| 248
| "Dark Green"
|-
|-
| +
| 63
|Thread-load-count * 4
| "#843154"
| 267
| "Wine"
|-
|-
| +
| 64
|0x0000 thread-type-table, domain: 0xd
| "#FD33A3"
| 265
| "Crimson"
|-
|-
| +
| 65
|Thread-load-count * 4
| "#FFBBBB"
| 233
| "Salmon Pink"
|-
|-
| +
| 66
|0x0000 jef plus zero
| "#F7F297"
| 270
| "Mustard"
|-
|-
| +
| 67
|0x0004 jef plus zero
| "#00B552"
| 206
| "Bright Green"
|-
|-
| +
| 68
|0x0008 jef plus "JANO"
| "#FCF121"
| 275
| "Canary Yellow"
|-
|-
| +
| 69
|0x000C jef plus "ME"
| "#E6965A"
| 255
| "Toast"
|-
|-
| +
| 70
|0x0010 jef plus bitmap-count (may be)
| "#D7BDA4"
| 213
| "Beige"
|-
|-
| +
| 71
|0x0014 jef plus bitmap-start offset
| "#FF9D00"
| 273
| "Honey Dew"
|-
|-
|...
| 72
|
| "#FFBA5E"
| 274
| "Tangerine"
|-
| 73
| "#0257B5"
| 222
| "Ocean Blue"
|-
| 74
| "#6E3937"
| 259
| "Sepia"
|-
| 75
| "#540571"
| 243
| "Royal Purple"
|-
| 76
| "#CC9900"
| 271
| "Yellow Ocher"
|-
| 77
| "#D0BAB0"
| 223
| "Beige Gray"
|-
| 78
| "#E3BE81"
| 224
| "Bamboo"
|}
 
===Thread-type===
{| class="wikitable"
| Offset
| Length
| Type
| Description
|-
| 0
| 4
| int
| unknown = 13
|}
 
===Plus-header===
Only in JEF+ files.
{| class="wikitable"
| Offset
| Length
| Type
| Description
|-
| 0
| 4
| int
| Signature-1 = 0
|-
| 4
| 4
| int
| Signature-2 = 0
|-
| 8
| 8
| ASCII
| Signature-3 = "JANOME\0\0"
|-
| 16
| 4
| Count
| Plus-detail-count = 1
|-
| 20
| 4
| Offset
| Plus-detail-offset from file-start to JEF+ extra details
|}
 
===Escaped-command===
{| class="wikitable"
| Offset
| Length
| Type
| Description
|-
| 0
| 1
| Byte
| Escape = -128 or 0x80
|-
| 1
| 1
| Byte
| Command-code = 1, 2 or 16
|}
 
 
{| class="wikitable"
| Command-code
| Description
|-
| 1
| Change to next thread in list
|-
| 2
| Move followed by 8 bit displacement-X and 8 bit displacement-Y
|-
| 16
| Last-stitch
|}
 
===Displacement===
{| class="wikitable"
| Offset
| Length
| Type
| Description
|-
| 0
| 1
| Byte
| Displacement-X -127 to 127 in 0.1 mm
|-
| 1
| 1
| Byte
| Displacement-Y -127 to 127 in 0.1 mm
|}
 
 
===Plus-detail===
Unknown, many 32 bit numbers, then many 16 bit numbers.
 
 
== SEW Format ==
This appears to be an earlier format, it is fairly simple (from the examples seen), it includes bitmap previews, but sometimes they do not match the pattern described in stitches. The format seems to use the same thread colour codes and the same stitch-list as JEF.
 
Format appears to be little endian, except for the bitmaps.
 
SEW-file = SEW-header {Bitmap} {stitch}
 
=== SEW-header ===
Only SEW files
{| class="wikitable"
| Offset
| Length
| Type
| Description
|-
| 0
| 2
| Count
| Colour count; maximum of 12 colours
|-
| 2
| 12x2
| Table
| Colour index table padded with 0; JEF colour code
|-
| 0x1A
| 12x2
| Table
| Colour unknown; all entries appear to have the same value: 8 or 0 or 255
|-
| 0x32
| 12x2
| Table
| Stitches per colour (minus a few)
|-
| 0x4A
|
|
|
|}
 
 
=== Bitmap ===
The bitmaps and sets of bitmaps appear to start at several fixed file offsets:<br/>
0x004A 1 x 48 pixel by 32 lines monochrome<br/>
0x010C 1 to 12 x 24 by 16, one for each colour<br/>
0x043C 1 x 64 by 48 monochrome<br/>
0x05BE 1 to 12 x 64 by 48, one for each colour<br/>
0x17D6 1 x w x h, variously sized monochrome outline and centre mark.<br/>
There are about 1440 bytes before the stitch-list.
 
This last bitmap may give an indication of the size in millimetres, the width will be a multiple of 8&nbsp;mm. The available bits (for pixels or mm) 1440 x 8 = 11,520 gives a maximum size around 120&nbsp;mm x 96&nbsp;mm, so may be not.
 
 
{| class="wikitable"
| Offset
| Length
| Type
| Description
|-
| 0
| 1
| Count
| Width of bitmap in (8 bit) bytes
|-
| 1
| 1
| Count
| Height of bitmap in lines/rows
|-
|-
|Stitch-
| 2
|start stitch-table pairs of signed 8bit values, either 0x80 and command or dx and dy
| Width x Height
| Byte
| Bits from top to bottom, left to right, MSB to LSB
|-
|-
|...
|2 + Width x Height
|
|
|
|
|-
|bitmap-
|start jef plus bitmap
|}
|}
The bitmap is similar to PBM P4 format, a PBM file can be created by writing:<br/>
  "P4\n"
  "%d %d\n", Width * 8, Height
then copy Width x Height chars
=== Stitch ===
The SEW stitches appear to start at the fixed file offset 0x1D78, and use the same Escaped-command and (8 bit, 8 bit) Displacement as JEF above.
{{Prevnext2
| prevpage=Projects/Liberty/File_Formats | nextpage=Projects/Liberty/File_Formats/Husqvarna_HUS
| prevtext=File Formats | nexttext=Husqvarna HUS Format
| index= Projects/Liberty | indextext=Home
}}

Latest revision as of 10:00, 17 September 2012

Janome Embroidery Format JEF

The JEF and JEF+ files consists of a number of sections. Multi-byte numbers appear to be stored little endian. For the JEF (and not JEF+ ) files, there is no simple signature, except to see if the Stitch-offset is after the Thread-type-list. The JEF pattern can easily be extracted from JEF+ files; by using the Stitch-offset to the Stitch-list, to skip over the JEF+ header; and then to ignore the JEF+ details, after the Stitch-list, at the end of the file.

File = File-header Thread-colour-list Thread-type-list [Plus-header] Stitch-list {Plus-detail}

Thread-colour-list = {Thread-colour}

Thread-type-list = {Thread-type}

Stitch-list = {Stitch}

Stitch = Escaped-command | Displacement

File-header

Offset Length Type Description
0 4 Offset Stitch-offset location of first stitch
4 4 Flags unknown = 1, 10 or 20
8 8 ASCII Date YYYYMMDD
16 8 ASCII Time HHMMSSxx
24 4 Count Thread-count number of thread changes
28 4 Count Stitch-count
32 4 Code Hoop-code = 0 to 4
36 4 Measure Extent-1-left stitch extent left of centre in 0.1 mm units
40 4 Measure Extent-1-top
44 4 Measure Extent-1-right
48 4 Measure Extent-1-bottom
52 4 Measure Extent-2-left; -1 implies not used
56 4 Measure Extent-2-top
60 4 Measure Extent-2-right
64 4 Measure Extent-2-bottom
68 4 Measure Extent-3-left; -1 implies not used
72 4 Measure Extent-3-top
76 4 Measure Extent-3-right
80 4 Measure Extent-3-bottom
84 4 Measure Extent-4-left; -1 implies not used
88 4 Measure Extent-4-top
92 4 Measure Extent-4-right
96 4 Measure Extent-4-bottom
100 4 Measure Extent-5-left; -1 implies not used
104 4 Measure Extent-5-top
108 4 Measure Extent-5-right
112 4 Measure Extent-5-bottom

Hoop-code

Hoop-code Hoop-name Hoop-size
0 A Standard 126 x 110 mm
1 C Free Arm 50 x 50 mm
2 B Large 140 x 200 mm
3 F Spring Loaded 126 x 110 mm
4 D Giga 230 x 200 mm

Thread-colour

Offset Length Type Description
0 4 Code Thread-code = 1 to 78


Thread-code Colour-RGB Colour-number Colour-name
1 "#000000" 002 "Black"
2 "#F0F0F0" 001 "White"
3 "#FFCC00" 239 "Sunflower"
4 "#E6651E" 254 "Hazel"
5 "#C4E39D" 264 "Green Dust"
6 "#237336" 226 "Green"
7 "#071650" 232 "Navy Blue"
8 "#4CB58F" 250 "Emerald Green"
9 "#F669A0" 201 "Pink"
10 "#FF4720" 202 "Vermilion"
11 "#E2A188" 236 "Cinnamon"
12 "#595B61" 252 "Dark Gray"
13 "#E4C35D" 003 "Gold"
14 "#6231BD" 261 "Violet Blue"
15 "#2F5933" 219 "Olive Green"
16 "#FAB381" 212 "Peach"
17 "#F999B7" 211 "Pale Pink"
18 "#F09C96" 256 "Salmon"
19 "#A39166" 268 "Olive Drab"
20 "#970533" 215 "Wine Red"
21 "#AC9CC7" 209 "Pale Violet"
22 "#65C2C8" 217 "Sky"
23 "#E5E5E5" 220 "Silver Gray"
24 "#A0B8CC" 216 "Pale Sky"
25 "#98D6BD" 227 "Pale Aqua"
26 "#0B2F84" 207 "Blue"
27 "#98F3FE" 229 "Powder Blue"
28 "#B2E1E3" 228 "Baby Blue"
29 "#FF0927" 244 "Cardinal Red"
30 "#14329C" 262 "Blue Ink"
31 "#A80043" 242 "Burgundy"
32 "#FF6600" 203 "Orange"
33 "#FF6048" 234 "Coral"
34 "#B59474" 237 "Umber"
35 "#FDF5B5" 210 "Pale Yellow"
36 "#F5DB8B" 238 "Blond"
37 "#C79732" 272 "Old Gold"
38 "#889B9B" 221 "Gray"
39 "#AB5A96" 208 "Purple"
40 "#FFBDE3" 240 "Orchid Pink"
41 "#C3007E" 241 "Peony Purple"
42 "#FF0000" 225 "Red"
43 "#EE71AF" 266 "Floral Pink"
44 "#608541" 246 "Moss Green"
45 "#609418" 247 "Meadow Green"
46 "#C6EECB" 245 "Opal Green"
47 "#5BD2B5" 249 "Aquamarine"
48 "#FFFF17" 204 "Yellow"
49 "#04917B" 251 "Peacock Green"
50 "#5C2625" 260 "Dark Sepia"
51 "#FFFFDC" 253 "Ivory White"
52 "#FF5A27" 235 "Burnt Orange"
53 "#A76C3D" 257 "Cocoa Brown"
54 "#9C6445" 214 "Brown"
55 "#B45A30" 258 "Sienna"
56 "#481A05" 205 "Dark Brown"
57 "#0C8918" 269 "Meadow"
58 "#70A9E2" 230 "Bright Blue"
59 "#1D5478" 231 "Slate Blue"
60 "#165FA7" 263 "Solar Blue"
61 "#7FC21C" 218 "Yellow Green"
62 "#06480D" 248 "Dark Green"
63 "#843154" 267 "Wine"
64 "#FD33A3" 265 "Crimson"
65 "#FFBBBB" 233 "Salmon Pink"
66 "#F7F297" 270 "Mustard"
67 "#00B552" 206 "Bright Green"
68 "#FCF121" 275 "Canary Yellow"
69 "#E6965A" 255 "Toast"
70 "#D7BDA4" 213 "Beige"
71 "#FF9D00" 273 "Honey Dew"
72 "#FFBA5E" 274 "Tangerine"
73 "#0257B5" 222 "Ocean Blue"
74 "#6E3937" 259 "Sepia"
75 "#540571" 243 "Royal Purple"
76 "#CC9900" 271 "Yellow Ocher"
77 "#D0BAB0" 223 "Beige Gray"
78 "#E3BE81" 224 "Bamboo"

Thread-type

Offset Length Type Description
0 4 int unknown = 13

Plus-header

Only in JEF+ files.

Offset Length Type Description
0 4 int Signature-1 = 0
4 4 int Signature-2 = 0
8 8 ASCII Signature-3 = "JANOME\0\0"
16 4 Count Plus-detail-count = 1
20 4 Offset Plus-detail-offset from file-start to JEF+ extra details

Escaped-command

Offset Length Type Description
0 1 Byte Escape = -128 or 0x80
1 1 Byte Command-code = 1, 2 or 16


Command-code Description
1 Change to next thread in list
2 Move followed by 8 bit displacement-X and 8 bit displacement-Y
16 Last-stitch

Displacement

Offset Length Type Description
0 1 Byte Displacement-X -127 to 127 in 0.1 mm
1 1 Byte Displacement-Y -127 to 127 in 0.1 mm


Plus-detail

Unknown, many 32 bit numbers, then many 16 bit numbers.


SEW Format

This appears to be an earlier format, it is fairly simple (from the examples seen), it includes bitmap previews, but sometimes they do not match the pattern described in stitches. The format seems to use the same thread colour codes and the same stitch-list as JEF.

Format appears to be little endian, except for the bitmaps.

SEW-file = SEW-header {Bitmap} {stitch}

SEW-header

Only SEW files

Offset Length Type Description
0 2 Count Colour count; maximum of 12 colours
2 12x2 Table Colour index table padded with 0; JEF colour code
0x1A 12x2 Table Colour unknown; all entries appear to have the same value: 8 or 0 or 255
0x32 12x2 Table Stitches per colour (minus a few)
0x4A


Bitmap

The bitmaps and sets of bitmaps appear to start at several fixed file offsets:
0x004A 1 x 48 pixel by 32 lines monochrome
0x010C 1 to 12 x 24 by 16, one for each colour
0x043C 1 x 64 by 48 monochrome
0x05BE 1 to 12 x 64 by 48, one for each colour
0x17D6 1 x w x h, variously sized monochrome outline and centre mark.
There are about 1440 bytes before the stitch-list.

This last bitmap may give an indication of the size in millimetres, the width will be a multiple of 8 mm. The available bits (for pixels or mm) 1440 x 8 = 11,520 gives a maximum size around 120 mm x 96 mm, so may be not.


Offset Length Type Description
0 1 Count Width of bitmap in (8 bit) bytes
1 1 Count Height of bitmap in lines/rows
2 Width x Height Byte Bits from top to bottom, left to right, MSB to LSB
2 + Width x Height


The bitmap is similar to PBM P4 format, a PBM file can be created by writing:

 "P4\n"
 "%d %d\n", Width * 8, Height

then copy Width x Height chars

Stitch

The SEW stitches appear to start at the fixed file offset 0x1D78, and use the same Escaped-command and (8 bit, 8 bit) Displacement as JEF above.