![]() |
Bilder speichern
Hallo zusammen
Hab da mal eine allgemeine Fragen, wo ich irgend wie nirgents eine klare Antwort finde. Bin auch noch ziemlich neu hier in der Delphi welt... Bezieht sich für eine App mit Firemonkey für Android und iOS (vielleicht später mal für Mac und Windows). Ich möchte Smartphone-Kamera-Bilder Speichern und in einem späteren Schritt in einer Bilder-Liste anschauen können. Mach ich das besser mit einer Datenbank oder mit einem lokalen Ordner auf dem Smartphone? Die Bilder sollten wenn möglich verschlüsselt abgelegt werden können (nicht so wichtig). Gruss zibu |
AW: Bilder speichern
Du kannst die einfach nur in einem Ordner speichern und wenn du noch zusätzliche Daten benötigst, dann speicherst du diese Daten in einer Datenbank mit einer Referenz zu dem Bild (z.B. Dateiname).
|
AW: Bilder speichern
OK Danke.
Und wenn ich einen Ordner auf dem Smartphone erzeuge, wird dieser schon verschlüsselt gespeicher oder wie kann man das machen, das die Bilder nicht anders gebraucht werden können? |
AW: Bilder speichern
Wenn du das im OS eingestellt hast, dann wird auch direkt verschlüsselt abgelegt (geht auf jeden Fall bei Android)
|
AW: Bilder speichern
Ok Danke, und mit OS meinst du was genau? :-)
Habe da mal etwas probiert mit forcedirectories, dies funktioniert aber nicht wirklich wenn ich als ZielOrdner einfach nur 'Bilder' angebe. Muss ich ,da dies auf dem Smartphone läuft, irgent wie mit forcedirecories (TPath.Combine(TPath.GetDocumentsPath, 'Bilder')) machen? oder wie geht das genau? Danke schon mal |
AW: Bilder speichern
Zitat:
|
AW: Bilder speichern
OK Danke, das weiss ich nun.
Aber wie sieht das mit einem Ordner erzeugen auf einem Android Smartphone aus. Wie funktioniert das, dass ich dort meine Handykamerabilder ablegen kann, sehe da überhaupt nicht durch... grüsse |
AW: Bilder speichern
Basierend auf
![]()
Delphi-Quellcode:
ImageContainer.Bitmap.SaveToFile(System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile.jpg');
(Bin gerade selber mit der Android Kamera beschäftigt - allerdings in Java, hoffe dass der Tipp weiterhilft) |
AW: Bilder speichern
Es gibt übrigens auch TPath.Combine, um Pfade und Dateinamen zu kombinieren.
Müsste in etwa so aussehn.
Delphi-Quellcode:
Man könnte TPath.GetDocumentsPath auch mit IncludePathDelimiter aufrufen, welches den Delimiter anhängt, wenn noch keiner vorhanden ist.
ImageContainer.Bitmap.SaveToFile(TPath.Combine(TPath.GetDocumentsPath, 'myfile.jpg'));
Aber anhand des Namens (GetDocumentsPath und nicht Dir) müsste da bereits der Delimiter enthalten sein. :stupid: |
AW: Bilder speichern
OK Danke für die Antworten, funktioniert so weit.
Und wie genau stelle ich die gespeicherten Bilder in einer Liste dar? Und wie zeige ich dann ein ausgewähltes Bild in einem Timage? |
AW: Bilder speichern
Indem du die Dateinamen einliest, sie in einer Listenkomponente darstellst?
Und beim Wechsel der Selektierung liest du den aktuell gewählten Dateinamen aus der Liste und lädst das Bild in eine Imagekomponente. PS:
Delphi-Quellcode:
speichert zwar das Bild in einer Datei, aber auch wenn die Datei *.jpg heißt, ist darin natürlich ein Bitmap (*.bmp), da Bitmap halt ein Bitmap ist und auch nur Bitmaps speichern kann.
Bitmap.SaveToFile(... + 'myfile.jpg');
|
AW: Bilder speichern
OK danke,probier das mal.
Habe aber schon ein problem beim Anzeigen eines Bildes. Speichere das Bild so:
Delphi-Quellcode:
Und so möchte ich es wieder Anzeigen:
procedure TForm6.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
begin Image1.Bitmap.Assign(Image) ; Image1.Bitmap.SaveToFile(TPath.Combine(TPath.GetDocumentsPath, 'myfile.jpg')); end;
Delphi-Quellcode:
Da kommt aber auf dem Smartphone die Fehlermeldung: Zugriffsverletzung bei Adresse 788526E8 beim Zugriff auf Adresse 0000000.
procedure TForm11.Button123Click(Sender: TObject);
begin Image1.bitmap.LoadFromFile('myfile.jpg'); end; Was mach ich falsch? :oops: |
AW: Bilder speichern
Beim Laden sollte man genausowenig relative Pfade verwenden. Bau Dir den absoluten, entsprechend der Speicherroutine zusammen.
Btw. Bitte verwende Delphi-Tags. |
AW: Bilder speichern
Da es wohl überlesen wurde:
Du speicherst Bitmaps, also sollte der Dateiname myfile.bmp heißen. Zitat:
(denn die Fehlermeldung klingt nach einem Zugriff auf einen NIL-Pointer/Objektzeiger) Insgesamt sehen deine paar gezeigten Codezeilen erstmal nicht direkt falsch aus. |
AW: Bilder speichern
@himitsu
Du weisst, dass es sich um FMX handelt? Da kann
Delphi-Quellcode:
erheblich mehr.
TBitmap
|
AW: Bilder speichern
Zitat:
Delphi-Quellcode:
Ich war auch (vor einiger Zeit) erstaunt, dass das so einfach geht.
procedure TBitmap.SaveToFile(const AFileName: string; const SaveParams: PBitmapCodecSaveParams = nil);
begin TBitmapCodecManager.SaveToFile(AFileName, Self, SaveParams); end; class function TBitmapCodecManager.SaveToFile(const AFileName: string; const Bitmap: TBitmap; const SaveParams: PBitmapCodecSaveParams = nil): Boolean; var Codec: TCustomBitmapCodec; Descriptor: TBitmapCodecClassDescriptor; begin Result := False; if Assigned(FBitmapCodecClassDescriptors) then for Descriptor in FBitmapCodecClassDescriptors do if SameText(ExtractFileExt(AFileName), Descriptor.Extension, loUserLocale) and Descriptor.CanSave then begin Codec := Descriptor.BitmapCodecClass.Create; try Result := Codec.SaveToFile(AFileName, Bitmap, SaveParams); finally Codec.Free; end; end; end; Gruß, Olli Edit: Ich war zu lahm... |
AW: Bilder speichern
@Olli73
Evtl. war ich nur schneller :mrgreen: |
AW: Bilder speichern
Zitat:
Aber warum heißt es dann TBitmap und nicht TBildirgendwas? :shock: |
AW: Bilder speichern
Zitat:
![]() |
AW: Bilder speichern
Na toll, in der VCL wird also doch nichts mehr weiterentwickelt.
|
AW: Bilder speichern
Also ich seh da immer noch überhaupt nicht durch...
Wenn ich mit der Smartphone-kamera immer ein Bild aufnehme und dann das Bild abspeichere (als zum Beispiel 'mypic') , wird dann nicht das alte Bild, mit dem selben Name, nicht einfach überschrieben? Kann man da vielleicht das Datum/Uhrzeit als Dateiname verwenden? Und wie gross ist die Auflösung eines .bmp? wird die Datei der Smartphone Kamera komprimiert oder wird diese als Orginalgrösse gespeichert? Zudem weiss ich immer noch nicht wie ich die Bilder einfach in einen Ordner abspeichern kann, so dass diese auch bei einem App neustart immer noch auf dem Smartphone sind. Wenn ich
Delphi-Quellcode:
verwende, wie heisst dann der erzeugt Ordner bzw. Datei genau?
Image1.Bitmap.SaveToFile(System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile1.jpg')
Und wie zeige ich alle die gespeicherten Bilder in einer Liste da? Vielen Dank für die Geduld für einen Anfängers...:spin2: Grüsse |
AW: Bilder speichern
Zitat:
Zitat:
Zitat:
Es gibt allerdings auch entsprechende Bilder-Ordner, wie man der Doku entnehmen kann => ![]() Zitat:
![]() Eine Liste ( ![]() ![]() ![]() ![]() |
AW: Bilder speichern
Danke für die Hilfe, hat alles geklappt bis auf:
Zitat:
Habe mir Listview und Listbox mal angeschaut und scheint schon etwas so das zu sein was ich brauche. Möchte 2 Spalten, mit Dateiname und Vorschaubild (oder so ähnlich), ich sehe bei der Listbox bzw. Listview überhaupt nicht durch, wie muss ich den Codeschreiben das mir das so angezeigt wird und alle Bilder inkl. Dateiname reinlädt? Danke Grüsse |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 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