问题:
我有一个移动应用在FireMonkey (XE10.1柏林),需要拍照。问题是FireMonkey似乎把我的照片调整得更小了,至少在Android上是这样的。我不仅在我自己的应用程序中看到了这一点,而且在FireMonkey附带的FireMonkey演示应用程序中也出现了这种情况。
当我用相机在FireMonkey外拍照时,图像大小约为6-7MB,大小为5184x2916像素。
当我使用我的应用程序或PhotoEditor演示应用程序拍照时,图像大小在140到180 kB到365x648像素之间。
这种情况发生在Android上;我手头没有Mac,所以目前无法在iPad或iPhone上进行测试。
到目前为止我所发现的:
我在代码中设置了断点,以找出这种情况发生的地点。当调用OnDidFinishTaking事件处理程序时,它接收到的图像已经缩小。
该事件由procedure TImageManagerAndroid.DidReceiveBitmap(const Sender: TObject; const M: TMessage);在FMX.MediaLibrary.Android.pas中调用。在这种情况下,我看到的是:
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缩小我的照片?
发布于 2016-07-26 11:11:46
我已经发现,对于使用FireMonkey拍摄的照片,TTakeCustomPhotoAction具有默认的最大宽度和高度。如果图像不符合最大大小,则图像将缩小。收缩因子总是2的幂,因此FireMonkey似乎一直将图像减半,直到它合适为止。
TTakeCustomPhotoAction (是TTakePhotoFromCameraAction的直接基类)定义了两个属性,MaxWidth和MaxHeight。出于某种原因,它们都默认为1024。
通过将默认值设置为更高的值(例如,8192 ),可以防止收缩:
actTakePhotoFromCameraAction1.MaxWidth := Max(8192, actTakePhotoFromCameraAction1.MaxWidth);
actTakePhotoFromCameraAction1.MaxHeight := Max(8192, actTakePhotoFromCameraAction1.MaxHeight);这些默认属性的类型为Cardinal,这意味着它们的最大值为4.294.967.295 (0xFFFFFFF)--它们是8个字节的无符号值。
https://stackoverflow.com/questions/38588298
复制相似问题