问题:
我在FireMonkey(XE 10.1 Berlin)中有一个移动应用程序,需要拍照。问题是,在Android上,FireMonkey似乎会将我的图片调整为更小的尺寸。我不仅在自己的应用程序中看到这种情况,还在FireMonkey附带的PhotoEditor Demo应用程序中看到。
当我在FireMonkey之外使用相机拍照时,图像大约为6-7 Mb,大小为5184 x 2916像素。 当我使用我的应用程序或使用PhotoEditor演示应用程序拍摄照片时,图像的大小在140到180 kB之间,大小为365 x 648像素。
这种情况发生在Android上;我目前没有Mac可用,因此无法在iPad或iPhone上测试它。
到目前为止,我找到的内容:
我设置了断点来查找此情况发生的位置。当调用OnDidFinishTaking事件处理程序时,它接收到的图像已经缩小。
该事件由FMX.MediaLibrary.Android.pas中的procedure TImageManagerAndroid.DidReceiveBitmap(const Sender: TObject; const M: TMessage);调用。 在此事件中,我看到以下行:
这个过程位于
我还查看了这个教程。 在这里,使用了
如何防止FireMonkey缩小我的照片?
我在FireMonkey(XE 10.1 Berlin)中有一个移动应用程序,需要拍照。问题是,在Android上,FireMonkey似乎会将我的图片调整为更小的尺寸。我不仅在自己的应用程序中看到这种情况,还在FireMonkey附带的PhotoEditor Demo应用程序中看到。
当我在FireMonkey之外使用相机拍照时,图像大约为6-7 Mb,大小为5184 x 2916像素。 当我使用我的应用程序或使用PhotoEditor演示应用程序拍摄照片时,图像的大小在140到180 kB之间,大小为365 x 648像素。
这种情况发生在Android上;我目前没有Mac可用,因此无法在iPad或iPhone上测试它。
到目前为止,我找到的内容:
我设置了断点来查找此情况发生的位置。当调用OnDidFinishTaking事件处理程序时,它接收到的图像已经缩小。
该事件由FMX.MediaLibrary.Android.pas中的procedure TImageManagerAndroid.DidReceiveBitmap(const Sender: TObject; const M: TMessage);调用。 在此事件中,我看到以下行:
Photo := TBitmap.CreateFromFile(ImagePath);
ImagePath
指的是设备上已经缩小的 .jpg 文件。
继续查看调用堆栈,我看到对一个函数的调用
procedure TFMXNativeActivityListener.onReceiveImagePath(ARequestCode: Integer; AFileName: JString);
这个过程位于
FMX.Platform.Android.pas
中。
当查看此过程的声明时,我看到它后面跟着关键字 cdecl
,这可能意味着该方法是从本机Android代码中调用的。我还查看了这个教程。 在这里,使用了
IFMXCameraService.TakePhoto
过程。 引人注目的是,在 PhotoEditor 演示中没有使用它!
它可能是一个选项,因为它使用一个包含参数的记录,其中包括一个 RequiredResolution
字段。 但是,我更喜欢使用类似于 PhotoEditor 演示的方法。
问题:如何防止FireMonkey缩小我的照片?