So, noch eine Stunde später, noch eine Erkenntnis:
Die TBitmap.SaveToFile Methode macht etwas (für mich) unerwartetes. Die Bitmap wird auf einem TSurfaceBitmap assigned, und erst das wird dann gespeichert. Was genau eine TSurfaceBitmap ist, kann ich mangels Doku nicht sagen, aber wenn ich statt der Speichermethode diesen hohlen Dreizeiler ausführe:
Delphi-Quellcode:
surf := TBitmapSurface.Create;
surf.Assign(fBMP);
surf.Free;
Dann wird die Bitmap immer korrekt angezeigt (TBitmapSurface benötigt FMX.Surfaces).
Mag das einer erklären
Sherlock
Das TBitmapSurface ist so eine Art einheitliches Datenformat, das als Transferschnittstelle mit dem Bitmap-Codec-Manager zusammenarbeitet, um das Speicherbitmap in eine Datei oder einen Stream zu speichern oder zu lesen.
Warum die Aktionen, die beim surf.assign (fmbp) stattfinden, zur anschließenden Aktualisierung führen, kann ich mangels Testmöglichkeit nur vermuten, ich würde eine gewisse Möglichkeit bei "TMonitor.Enter", bzw. letztlich bei "TMonitor.Exit" sehen, da hier bestimmte Benachrichtigungen ans System übermittelt werden.
Versuch doch einfach mal nur mit TMonitor.enter (fbmp) und TMonitor.exit (fbmp).