Looking at the actual code, the iconic KS1.x Workbench disk-hand image is technically drawn as vector art — except for the texts, which are bitmaps.
The machine-language code uses a simple “program” — stored in an array — to draw the different parts of the diskette, hand, and the fingers, run-time. This “DSL” implements three commands:
- Draw a polyline. Parameters: color index for the drawing pen and an arbitrarily long list of
x,y
coordinates.
- Flood-fill an area. Parameters: color index of the desired fill color and a single
x,y
coordinate for indicating where to begin filling.
- End the program, return.
There’s another kind of “program in an array” for drawing the bitmaps.
The code uses the SetAPen
, Move
, Draw
, Flood
, and BltTemplate
calls (and some others) from graphics.library
to do all this. The screen resolution is set to 320x200 (2 bitplanes; 4 colors) and the code centers the vector image by drawing it at an offset.
I assume this code and the data it uses takes less space than, say, RLE-compressing the resulting bitmap image but it is a bit hard to assess exactly.
If not, maybe the vector art approach was taken simply because it was the least tedious way to create such art it in the absence of a proper bitmap graphics editor.
I’m not sure how the A1000 drew its Kickstart disk prompt, though, if it did not have the graphics.library
available during the early stages of boot. Or maybe they included a stripped-down version of the library which only had the specific calls needed for recreating this image...
The vector art data — without any code or bitmap images — takes 412 bytes:
FF 01 23 0B 3A 0B 3A 21 71 21 71 0B 7D 0B 88 16 88 5E 7F 5E 7F 38 40 38
3E 36 35 36 34 38 2D 38 2D 41 23 48 23 0B FE 02 25 45 FF 01 21 48 21 0A
7E 0A 8A 16 8A 5F 56 5F 56 64 52 6C 4E 71 4A 74 44 7D 3C 81 3C 8C 0A 8C
0A 6D 09 6D 09 51 0D 4B 14 45 15 41 19 3A 1E 37 21 36 21 36 1E 38 1A 3A
16 41 15 45 0E 4B 0A 51 0A 6C 0B 6D 0B 8B 28 8B 28 76 30 76 34 72 34 5F
32 5C 32 52 41 45 41 39 3E 37 3B 37 3E 3A 3E 41 3D 42 36 42 33 3F 2A 46
1E 4C 12 55 12 54 1E 4B 1A 4A 17 47 1A 49 1E 4A 21 48 FF 01 32 3D 34 36
3C 37 3D 3A 3D 41 36 41 32 3D FF 01 33 5C 33 52 42 45 42 39 7D 39 7D 5E
34 5E 33 5A FF 01 3C 0B 6F 0B 6F 20 3C 20 3C 0B FF 01 60 0E 6B 0E 6B 1C
60 1C 60 0E FE 03 3E 1F FF 01 62 0F 69 0F 69 1B 62 1B 62 0F FE 02 63 1A
FF 01 2F 39 32 39 32 3B 2F 3F 2F 39 FF 01 29 8B 29 77 30 77 35 72 35 69
39 6B 41 6B 41 6D 45 72 49 72 49 74 43 7D 3B 80 3B 8B 29 8B FF 01 35 5F
35 64 3A 61 35 5F FF 01 39 62 35 64 35 5F 4A 5F 40 69 3F 69 41 67 3C 62
39 62 FF 01 4E 5F 55 5F 55 64 51 6C 4E 70 49 71 46 71 43 6D 43 6A 4E 5F
FF 01 44 6A 44 6D 46 70 48 70 4C 6F 4D 6C 49 69 44 6A FF 01 36 68 3E 6A
40 67 3C 63 39 63 36 65 36 68 FF 01 7E 0B 89 16 89 5E FE 01 22 0B FE 01
3B 0B FE 01 61 0F FE 01 6A 1B FE 01 70 0F FE 01 7E 5E FE 01 4B 60 FE 01
2E 39 FF FF
Rendering algorithm:
- Read two bytes at a time.
- If both bytes are
FF
, end the program.
- If the first byte is
FF
and the second byte is not, start drawing a polyline with the color index given in the second byte. Treat any subsequent two bytes as x,y
coordinates belonging to that polyline except if the first byte is FF
(see rules 2 and 3) or FE
(see rule 4), which is where you stop drawing the line.
- If the first byte is
FE
, flood fill an area using the color index given in the second byte, starting from the point whose coordinates are given in the next two bytes.
The palette is:
0: #fff
1: #000
2: #77c
3: #bbb
The offsets used for drawing the image centered are X=70
, Y=40
.
Edit:
@v-joe adds some interesting points:
The research in his comments to this answer indicates the vector art approach saves about 3 kilobytes compared to run-length encoding the resulting bitmap. This is significant win if you’re tight on space.
Also, his answer quotes the original artist, Sheryl Knowles, as saying she only had the most primitive means of producing graphics at her disposal at the time of designing this image. Sheryl also mentions storage space-related limitations: “[t]he drawing was limited in size and in the number of pixels that could be used”.
Given this image is mostly composed of vector polylines, instead of an array of pixels, maybe Knowles did not mean pixels, per se, but the x,y
coordinate points in those polylines? That she had been specifically told not to use too many of those could explain the “angular” aspects of the image. It also tells us storage space really was a concern during the design process.
That all said — and getting back to the original question — it is likely the resulting image still could be edited to look a bit more polished by fine-tuning and tweaking the placement of the polyline vertices while keeping the total number of them the same. But this is easy for us to say now that we have modern vector art tools like Inkscape and Adobe Illustrator at our disposal. Knowles’s recollection of the design process seems to indicate she did not have a tool at hand that would have allowed her to do any advanced editing once the coordinate points had already been laid down.