Hier ist der Code, den ich verwende.Mit IFMXCameraService.TakePhoto gibt es eine Möglichkeit, den Image-Pfad zu erhalten?
procedure TForm1.getpic;
var
Service: IFMXCameraService;
Params: TParamsPhotoQuery;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXCameraService,
Service) then
begin
Params.Editable := false;
Params.NeedSaveToAlbum := True;
Params.RequiredResolution := TSize.Create(640,640);
Params.OnDidFinishTaking := DoDidFinishTakePic;
Service.TakePhoto(nil, Params);
end
else
xShowMessage('This device does not support the camera service');
end;
procedure TForm1.DoDidFinishTakePic(Image: TBitmap);
var
Imagepath:string;
begin
Image1.Bitmap.Assign(Image);
Imagepath := fmx.platform.TMessageReceivedImagePath;
end;
Offenbar aus:
http://docwiki.embarcadero.com/RADStudio/en/List_of_FireMonkey_Message_Types
gibt es TMessageReceivedImagePath in fmx.platform gefunden. Aber ich kann es nirgendwo finden. Ich benutze 10.1 Berlin Update 2. Ich postete dies im Embarcadero Forum (danke Remy für die Antwort), aber ich hoffe, dass jemand hier eine Antwort hat.
PS/ich möchte auch die DateTime des aufgenommenen Bildes speichern.
In der Zwischenzeit habe ich einen Workaround, aber es ist hässlich und ich bin mir sicher, wird nicht immer funktionieren wegen der zweiten Genauigkeit Timing des Take Photo.
procedure TForm1.DoDidFinishTakePic(Image: TBitmap);
var
Imagepath:string;
begin
Image1.Bitmap.Assign(Image);
st := datetimetostr(System.SysUtils.Now,xfs);
Imagepath := 'IMG_'+copy(st,1,4)+copy(st,6,2)+copy(st,9,2)+'_'+copy(st,12,2)+copy(st,15,2)+copy(st,18,2)+'.jpg';
end;
Was ist los mit der Antwort, die ich Ihnen schon früher gab? Abonnieren der "TMessageReceivedImagePath" Nachricht ist die Lösung, also was ist das eigentliche Problem, das Sie damit haben? –
Das Problem ist, dass TMessageReceivedImagePath in keiner Einheit gefunden werden kann. Ja, der gesamte Code und die von Ihnen bereitgestellten Lösungen funktionieren, vorausgesetzt, dass TMessageReceivedImagePath gefunden werden kann. – sandman
Sie können 'FormatDateTime()' verwenden, anstatt das Ergebnis von 'DateTimeToStr()' zu zerhacken: 'ImagePath: = FormatDateTime ('" IMG_ "yyyymmdd" _ "hhnnss" .jpg "' Now);' –