AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Bild in galerie ablegen (iOS, Android)

Bild in galerie ablegen (iOS, Android)

Ein Thema von knaeuel · begonnen am 2. Jul 2018 · letzter Beitrag vom 10. Sep 2018
Antwort Antwort
knaeuel

Registriert seit: 2. Jul 2007
110 Beiträge
 
Delphi 10.3 Rio
 
#1

Bild in galerie ablegen (iOS, Android)

  Alt 2. Jul 2018, 14:36
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:
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;
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).


Danke schon vorab!
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Bild in galerie ablegen (iOS, Android)

  Alt 2. Jul 2018, 14:57
Ist eigentlich ziemlich einfach Code ungefähr so aus der Delphi Hilfe):
Delphi-Quellcode:
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;
Der Knackpunkt ist allerdings die Berechtigung zum Schreiben ins Album. Das wird gesetzt durch die info.plist Einträge
NSPhotoLibraryUsageDescription und NSPhotoLibraryAddUsageDescription (Man beachte den feinen Unterschied, nötig ab iOS 11). vgl. dazu https://stackoverflow.com/questions/...photolibraryus

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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
knaeuel

Registriert seit: 2. Jul 2007
110 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Bild in galerie ablegen (iOS, Android)

  Alt 10. Sep 2018, 13:02
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)
Wolfgang

Geändert von knaeuel (10. Sep 2018 um 13:08 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Bild in galerie ablegen (iOS, Android)

  Alt 10. Sep 2018, 13:12
Zitat:
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).
Warum albern? Der Code abstrahiert die Plattformen.
Markus Kinzler
  Mit Zitat antworten Zitat
knaeuel

Registriert seit: 2. Jul 2007
110 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Bild in galerie ablegen (iOS, Android)

  Alt 10. Sep 2018, 13:17
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.
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bild in galerie ablegen (iOS, Android)

  Alt 10. Sep 2018, 14:20
Gratuliere!

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz