firemonkey - 使用 IFMXCameraService.TakePhoto,有没有办法获取图像路径?

标签 firemonkey delphi-10.1-berlin

这是我正在使用的代码。

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;

显然来自:

http://docwiki.embarcadero.com/RADStudio/en/List_of_FireMonkey_Message_Types

在fmx.platform中找到TMessageReceivedImagePath。 但是我在任何地方都找不到它。我正在使用 10.1 Berlin update 2。我在 Embarcadero 论坛上发布了此内容(感谢 Remy 的回答),但我希望有人能在这里得到答案。

PS/我还想存储捕获的图片的日期时间。

与此同时,我有一个解决方法,但它很丑陋,而且由于拍照的秒精度计时,我确信它并不总是有效。

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;

最佳答案

正如我在 Embarcadero forum 上所述,您所要做的就是订阅 TMessageReceivedImagePath 消息,例如:

TMessageManager.DefaultManager.SubscribeToMessage(TMessageReceivedImagePath, DoMessageListener);

...

procedure TForm1.DoMessageListener(const Sender: TObject; const M: TMessage);
var
  ImagePath: string;
begin
  if M is TMessageReceivedImagePath then
  begin
    ImagePath := TMessageReceivedImagePath(M).Value;
    ...
  end;
end;

Embarcadero 记录消息位于 FMX.Platform 单元中。如果您在那里找不到它,请检查它是否位于 FMX.Platform.Android 单元(因为它是 Android 特定消息)或 FMX.MediaLibrary单位(定义其他照片/视频捕获消息)。

关于firemonkey - 使用 IFMXCameraService.TakePhoto,有没有办法获取图像路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42219544/

相关文章:

delphi - 如何使用firemonkey在选定区域裁剪位图?

android - 我的 TVertScrollBox 不想在 Android 上滚动

delphi - FMX 网格标题线颜色

delphi - 释放以 MainForm 作为所有者的表单是否是一个错误?

delphi - 如何将线程的起始地址与模块名称匹配?

ios - 在 iOS 上加载程序期间无法显示消息

windows - 应用效果时,MakeScreenshot 未正确渲染

delphi - 使用RTTI设置组件焦点

multithreading - Delphi Singleton 双重检查锁定

delphi - 自定义样式 TEdit