![]() |
Bild in galerie ablegen (iOS, Android)
Hallo zusammen,
ich suche seit einigen Wochen nach einer Lösung für dieses Problem und habe für iOS noch nichts funktionierendes gefunden. Ich möchte ein Bild (Format recht frei wählbar, png, jpg, …, notfalls auch bmp) aus meiner App heraus in der Galerie oder in einer Art Benutzerdaten-Ordner speichern. Unter Android habe ich zumindest schon eine funktionierende Lösung. Für iOS hab ich noch nichts zum Laufen gebracht.
Delphi-Quellcode:
Hat jemand eine Lösung für iOS? Ich will nur irgendwo speichern können, so dass der Benutzer anschließend ohne die App auf das Bild zugreifen kann. Wo genau ist mir im Grunde fast egal, nur auf dem Gerät selber sollte es schon sein (also nicht in der Cloud).
procedure TFormX.BildInGalerieSpeichern;
var photolib:IFMXPhotoLibrary; mybmp:TBitmap; bmpname:string; begin {$IFDEF ANDROID} if TPlatformServices.Current.SupportsPlatformService(IFMXPhotoLibrary) then begin //Zugriff auf Galerie ergattern: photolib:=TPlatformServices.Current.GetPlatformService(IFMXPhotoLibrary) as IFMXPhotoLibrary; //Bitmap erzeugen mybmp := Chart1.TeeCreateBitmap(clWhite,Rect(0,0,ceil(Chart1.Width),ceil(Chart1.Height))); //Bitmap in Galerie pflanzen photolib.AddImageToSavedPhotosAlbum(mybmp); //Bitmap freigeben mybmp.Free; end; {$ENDIF} end; Danke schon vorab! |
AW: Bild in galerie ablegen (iOS, Android)
Ist eigentlich ziemlich einfach Code ungefähr so aus der Delphi Hilfe):
Delphi-Quellcode:
Der Knackpunkt ist allerdings die Berechtigung zum Schreiben ins Album. Das wird gesetzt durch die info.plist Einträge
var
service: IFMXPhotoLibrary; . . . try if TPlatformServices.Current.SupportsPlatformService(IFMXPhotoLibrary, service) then service.AddImageToSavedPhotosAlbum(fMyPicture) else ShowMessage('The IFMXPhotoLibrary interface is not supported.'); except ShowMessage('IFMXPhotoLibrary.AddImageToPhotoAlbum failed'); end; NSPhotoLibraryUsageDescription und NSPhotoLibraryAddUsageDescription (Man beachte den feinen Unterschied, nötig ab iOS 11). vgl. dazu ![]() Der erste eintrag ist von Emba freundlicherweise schon abgelegt, den zweiten mußt du manuell in den Versionsinfos Deines Projekts hinzufügen, und mit einem mehr oder minder sinnigen Text hinterlegen (je nachdem, was Du Deinen Anwendern zumuten möchtest). Sherlock |
AW: Bild in galerie ablegen (iOS, Android)
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:
für Android mit API Level 26 braucht es allerdings inzwischen eine Permission-Abfrage zur Laufzeit.
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; Ich nutze dafür die KastriFree Library ![]() |
AW: Bild in galerie ablegen (iOS, Android)
Zitat:
|
AW: Bild in galerie ablegen (iOS, Android)
na weil ichs damals (bei threaderstellung) nicht bemerkt habe. aus irgendeinem grund hats damals nicht geklappt, lag aber wohl nicht an den entscheidenden Zeilen sondern an irgendwas anderem.
|
AW: Bild in galerie ablegen (iOS, Android)
Gratuliere! :thumb:
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz