Das Problem schrumpf:Verhindern von Firemonkey Foto
Ich habe eine mobile App in Firemonkey (XE 10.1 Berlin), die Bilder zu machen braucht. Das Problem ist, dass FireMonkey scheint meine Größe zu verkleinern, zumindest auf Android. Ich sehe das nicht nur in meiner eigenen App, sondern auch in der PhotoEditor Demo-App, die mit FireMonkey geliefert wird.
Wenn ich ein Foto mit meiner Kamera außerhalb FireMonkey mache, ist das Bild etwa 6-7 MB groß und 5184 x 2916 Pixel groß.
Wenn ich ein Bild mit meiner App oder mit der PhotoEditor-Demo-App mache, ist das Bild zwischen 140 und 180 kB und 365 x 648 Pixel groß.
Dies geschieht auf Android; Ich habe keinen Mac zur Hand, daher kann ich das momentan nicht auf einem iPad oder iPhone testen.
Was ich bisher gefunden habe:
Ich habe im Code Haltepunkte zu setzen, um herauszufinden, wo dies geschieht. Wenn der Ereignishandler OnDidFinishTaking
aufgerufen wird, ist das empfangene Bild bereits geschrumpft. Das Ereignis wird von procedure TImageManagerAndroid.DidReceiveBitmap(const Sender: TObject; const M: TMessage);
in FMX.MediaLibrary.Android.pas
aufgerufen. In diesem Fall sehe ich die Zeile:
Photo := TBitmap.CreateFromFile(ImagePath);
ImagePath
bezieht sich auf eine JPG-Datei auf dem Gerät ist, dass bereits geschrumpft.
Suchen Sie weiter unten in dem Call-Stack, sehe ich einen Aufruf an
procedure TFMXNativeActivityListener.onReceiveImagePath(ARequestCode: Integer; AFileName: JString);
Dieses Verfahren in FMX.Platform.Android.pas
lebt. Wenn ich auf die Erklärung für dieses Verfahren schaue, sehe ich, dass das Stichwort cdecl
folgt, was bedeuten könnte, dass diese Methode aus nativem Android-Code aufgerufen wird.
Ich habe auch auf this tutorial geschaut. Hier wird die Prozedur IFMXCameraService.TakePhoto
verwendet. Bemerkenswert ist diese nicht in der PhotoEditor Demo verwendet!
Es könnte eine Option sein, dies zu verwenden, da es einen Datensatz mit Parametern benötigt, die ein Feld RequiredResolution
enthalten. Allerdings würde ich einen ähnlichen Ansatz wie bei der PhotoEditor-Demo bevorzugen.
Die Frage:
Wie kann ich Firemonkey schrumpft mein Foto zu verhindern?
Hallo, gibt es eine Methode, um maxwidth und maxheight zu setzen, wenn Sie IFMXCameraService.TakePhoto zusammen mit TParamsPhotoQuery verwenden? – sandman