【发布时间】:2017-02-14 06:43:31
【问题描述】:
这是我正在使用的代码。
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;
【问题讨论】:
-
我之前给你的答案有什么问题?订阅
TMessageReceivedImagePath消息是解决方案,那么您遇到的实际问题是什么? -
问题是在任何单元都找不到TMessageReceivedImagePath。所以是的,只要可以找到 TMessageReceivedImagePath,您提供的所有代码和解决方案都可以使用。
-
您可以使用
FormatDateTime()而不是切分DateTimeToStr()的结果:ImagePath := FormatDateTime('"IMG_"yyyymmdd"_"hhnnss".jpg"', Now);
标签: firemonkey delphi-10.1-berlin