Schau doch mal bei
Delphi Treff Tutorial - Streams da erfährst du einiges über den Umgang mit Streams.
Grundsätzlich ist es bei Streams so, dass du KEIN Datenformat mit abspeicherst, d.h. es wird einfach ein Byte nach dem anderen abgelegt. Was du dann draus machst ist dir überlassen.
Ein Beispiel:
Du willst einen String in einen Stream schreiben, dann schreibst du zunächst die Größe des Strings in den Stream und anschließend den String selbst.
Beim Lesen liest du zuerst die am Anfang des Streams stehende Länge ein und anschließend weißt du wieviele Byte an Daten noch für den String folgen und gelesen werden müssen.
In deinem Fall (wenn ich das richtig verstanden habe) schreibst du als erstes die Anzahl Icons in den Stream und danach ein Icon nach dem anderen. Das geht so nur, wenn die Größe der Icons fest steht und konstant ist.
Zum Lesen, als erstes die Anzahl der Icons aus dem Stream lesen und dann blockweise (Blockgröße = Icongröße) ein Icon nach dem anderen.