Hallo Fragewurm,
Ganz einfach:
Das Format in welchem die Datei vorliegt, kann man nicht einfach in den Bildspeicher der Graphikkarte (GraKa) kopieren. Hinzu kommt noch, dass z.B. Windows ein nochmals anderes Format bei den APIs verwendet (das muss ja unabhängig vom Bildspeicher sein, damit dein Programm mit jeder GraKa funktioniert).
Somit ist man also programmtechnisch gezwungen das Dateiformat in das interne Format umzusetzen.
Die primitivste, aber schnellste Methode, ist ein Array mit der Bildgrösse im Speicher zu erstellen und dann die Datei dahin auszupacken. Damit erreich man die höchste Performance, benötigt aber enormen Speicherplatz.
Speicher kann man sparen indem man das interne Bild-Array dem Ausschnitt auf dem Bildschirm anpasst. Wenn man jetzt allerdings zoomt oder den Bildausschnitt verschiebt, muss man jedesmal die ganze Datei von der Platte einlesen, was natürlich jedesmal viel Zeit benötigt. Wegen der Komprimierung muss man jedesmal die Datei von Anfang an lesen.
Wenn du jetzt noch die Funktion „Rückgängig machen“ haben möchtest, brauchst du noch mindestens ein zweites Array. Gerade bei der Bildbearbeitung sind viele Funktionen nicht mathematisch umkehrbar. Wenn du z.B. die Farbtiefe reduzierst, kann man das nachher nicht wieder zum Original zurückrechnen.
MfG Peter(TOO)
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]