So wie ich den Code verstehe enthält der Parameter MemSize der Funktion nach dem Speichern die passende Größe.
Das RealMemSize im Code kannst du löschen das ist überflüssig.
Ruf einfach nach dem SaveImageToMemory einmal ReAllocateMemory auf oder bau es die gleich in die Funktion mit ein.
Code: Alles auswählen
*ImageMemory = SaveImageToMemory(Image, @MemSize)
*ImageMemory = ReAllocateMemory(*ImageMemory, MemSize)
Edit: Wenn es dir auf den Speicherplatz ankommt eigentlich sollte ImageDepth(Image) doch die Bittiefe zurückliefern da AllocateMemory aber Bytes als Parameter nimmst sollte da dann vor allem bei großen Bildern noch Optimierung möglich sein da immer das 8 Fache an Speicherplatz zu reservieren überflüssig ist wenn maximal noch ein kleiner Header dazukommt der nicht im gleichen Verhältnis wie die Bildgröße anwächst.