es hat etwas gedauert, bis ich wieder zu diesem Problem vorgedrungen bin.
Albernerweise ist der Code für iOS und Android identisch. Die Lösung, die ich am Anfang für Android gepostet habe, funzt auch mit iOS (11.3).
kleines Edit für iOS:
Die Berechtigungen muss man, genau wie von Sherlock beschrieben, ergänzen:
Unter Projekt->Optionen->Versionsinformationen zunächst schauen, dass oben als "Ziel" die gewünschte iOS-Konfiguration ausgewählt ist.
Wenn das korrekt eingestellt ist, müssen unten die beiden Schlüssel
"NSPhotoLibraryAddUsageDescription" und
"NSPhotoLibraryUsageDescription"
vorhanden sein. Der Wert dahinter ist die Erklärung, die iOS bei der Berechtigungsabfrage anzeigt, ist also gewissermaßen beliebig, nur leer würd ichs nicht lassen (habs aber nicht probiert).
Delphi-Quellcode:
uses FMX.Platform,FMX.MediaLibrary;
procedure TFormChart.BildInGalerieSpeichern;
var photolib:IFMXPhotoLibrary;
mybmp:TBitmap;
begin
{$IF Defined(ANDROID) OR Defined(IOS)}
if TPlatformServices.Current.SupportsPlatformService(IFMXPhotoLibrary) then
begin
//Zugriff auf Galerie ergattern:
photolib:=TPlatformServices.Current.GetPlatformService(IFMXPhotoLibrary) as IFMXPhotoLibrary;
//Bitmap erzeugen (hier aus einem TeeChart)
mybmp := Chart1.TeeCreateBitmap(clWhite,Rect(0,0,ceil(Chart1.Width),ceil(Chart1.Height)));
//Bitmap in Galerie pflanzen
photolib.AddImageToSavedPhotosAlbum(mybmp);//Bild vom Typ TBitmap einfügen
//Bitmap freigeben
mybmp.Free;
end;
{$ENDIF}
end;
für Android mit
API Level 26 braucht es allerdings inzwischen eine Permission-Abfrage zur Laufzeit.
Ich nutze dafür die KastriFree Library
https://github.com/DelphiWorlds/KastriFree (Demos inklusive)