aso sieht's aus.
Gibt es irgendwelche Regelmäßigkeiten? Sind die Grafiken alle gleich groß (kann man also davon ausgehen, daß alle 100KB ein neues Bild anfängt)? Ist die Lücke aus "Schrott" zwischen den Zeilen immer gleich groß (also kann man immer 10KB überspringen)?
Dann könnte man vielleicht die Grafiken so in den speicher laden, daß der dazwischenliegende Datenmüll nicht eingelesen wird, also Speicher gespart wird. Sind die Zeilen alle in der Richtigen Reihenfolge und musst du "nur" den Müll dazwischen entfernen, oder ist durch ein Interlacing-Verfahren alles so schön geschreddert worden wie auf Premiere?
Hier mein Vorschlag, wenn alle fragen mit ja beantwortet wurden:
Lies aus der Index-Datei aus, wieviele Grafiken du hast. Erzeuge für jede einen MemoryStream (sind bestimmt nicht 65000...). Dann hol dir den Offset (vom Dateianfang) der ersten Grafik, die Zeilenlänge (dürfte ja immer gleich sein, da rechteckiges Bild) und den Datenmüll (der lässt sich berechnen, indem du guckst, wieviel Platz zwischen Ende der einen Zeile und Anfang der nächsten liegt). Dann lies' die erste Zeile ein, überspring' den Müll und lies' die nächste Zeile usw. Irgendwann kommst du an's Ende der ersten Grafik und du gehst in den nächsten MemoryStream. Wieder das Offset, Zeilenlänge und Müllanteil der zweiten Grafik besorgen und Zeilenweise einlesen. Für jedes Bild in der Datei wiederholen. Jetzt hast du in den einzelnen MemoryStreams die Bilder zeilenweise ohne Müll dazwischen.
Falls die Zeilen tatsächlich alle durcheinander liegen, kannst du immer noch on the fly dekodieren:
Da du den Algorithmus zum entschlüsseln hast, kannst du die Zeilen sicherlich gleich in der richtigen Reihenfolge einlesen und ohne Müll in den Stream speichern.
Alternativ kannst du natürlich alles hintereinander machen und deine eigene Tabelle verwenden:
Für jedes Bild einen MemoryStream erzeugen. Erstes Bild einlesen, und zwar die Zeilen noch durcheinander aber den Datenmüll übersprungen. Dann hältst du in einem Array, einer Liste oder sonstwas fest, wo im MemoryStream welche Zeile liegt. Nachher die Zeilen sortieren (mit einem zweiten MemoryStream) und fertig. Du brauchst also nur einen Memorystream mehr, als du Bilder hast, oder du sortierst die Zeilen dann vom MemoryStream in den Buffer.
Wenn es absolut keine sich wiederholenden Merkmale gibt, die man regelmäßig überspringen kann, weiß ich auch nciht weiter.
_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk.
- Dilbert