首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止FireMonkey缩小照片

防止FireMonkey缩小照片
EN

Stack Overflow用户
提问于 2016-07-26 11:11:46
回答 1查看 792关注 0票数 3

问题:

我有一个移动应用在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中调用。在这种情况下,我看到的是:

代码语言:javascript
复制
Photo := TBitmap.CreateFromFile(ImagePath);

ImagePath指的是设备上的一个.jpg文件,该文件已经缩小。

往下看调用堆栈,我看到一个呼叫

代码语言:javascript
复制
procedure TFMXNativeActivityListener.onReceiveImagePath(ARequestCode: Integer; AFileName: JString);

这个程序生活在FMX.Platform.Android.pas中。当查看这个过程的声明时,我看到它后面跟着关键字cdecl,这可能意味着这个方法是从本地Android代码中调用的。

我还看过本教程。这里,使用了IFMXCameraService.TakePhoto过程。值得注意的是,这是而不是在PhotoEditor演示中使用的!

使用它可能是一个选项,因为它接受包含RequiredResolution字段的参数的记录。但是,我更喜欢使用类似于PhotoEditor演示的方法。

问题:

如何防止FireMonkey缩小我的照片?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-26 11:11:46

我已经发现,对于使用FireMonkey拍摄的照片,TTakeCustomPhotoAction具有默认的最大宽度和高度。如果图像不符合最大大小,则图像将缩小。收缩因子总是2的幂,因此FireMonkey似乎一直将图像减半,直到它合适为止。

TTakeCustomPhotoAction (是TTakePhotoFromCameraAction的直接基类)定义了两个属性,MaxWidthMaxHeight。出于某种原因,它们都默认为1024。

通过将默认值设置为更高的值(例如,8192 ),可以防止收缩:

代码语言:javascript
复制
actTakePhotoFromCameraAction1.MaxWidth := Max(8192, actTakePhotoFromCameraAction1.MaxWidth);
actTakePhotoFromCameraAction1.MaxHeight := Max(8192, actTakePhotoFromCameraAction1.MaxHeight);

这些默认属性的类型为Cardinal,这意味着它们的最大值为4.294.967.295 (0xFFFFFFF)--它们是8个字节的无符号值。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38588298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档