在 Firemonkey 中拍摄和保存照片

Posted

技术标签:

【中文标题】在 Firemonkey 中拍摄和保存照片【英文标题】:Taking and saving pictures in Firemonkey 【发布时间】:2013-10-20 21:03:52 【问题描述】:

我使用 Firemonkey XE5 拍照并保存到设备。我使用标准操作TakePhotoFromCameraActionon DidFinishTaking get TBitmap。没关系,但是当我尝试使用

存储这张图片时
ImageContainer.Bitmap.SaveToFile(System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile.bmp');

什么都没有发生。图片未存储,但应用程序似乎正在运行 - 我可以再拍一张。

如何解决?

【问题讨论】:

【参考方案1】:

我之前也遇到过同样的问题。 在 FMX.Graphix.TBitmap.SaveToFile 中跟踪 SaveToFile 函数,然后到 FMX.Graphix.TBitmapCodecManager.SaveToFile函数,我发现这个函数返回 False 因为:

if SameText(ExtractFileExt(AFileName), Descriptor.Extension, loUserLocale) and Descriptor.CanSave then

if 条件返回 False,因为 Descriptor.Extension 是 '.jpg' 而不是 '.bmp'

所以解决方案是使用'.jpg'文件扩展名或在SaveToFile函数中使用SaveParams (Default = nil)参数来匹配bmp类型。

【讨论】:

嗨 Oussama...感谢您的回答,但我不确定我是否理解/您的解决方案是否有效...我将扩展名更改为 jpg,但没有帮助。现在我有 ImageContainer.Bitmap.SaveToFile(System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile.jpg');还是不行。你的代码是什么?可以分享给我吗? 我的代码是:ImageFile := System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetSharedDownloadsPath, 'MyImage.jpg'); ImageControl.Bitmap.SaveToFile(ImageFile);这对我来说可以。如果它不适合您,我建议您将其追溯到 SaveToFile 函数并找出问题所在。 我遇到了同样的问题。追踪到TBitmapCodecManager.FindWritableCodecClass,这个函数只支持保存png;jpg;jpeg。不是 bmp,所以当我将文件扩展名更改为 .jpg 时,它保存了。你能相信吗?【参考方案2】:

我有类似的问题,但是,这不是保存问题。我的问题实际上是该设备通过 USB 连接到我的计算机。我在文件资源管理器中打开了设备,但看不到刚刚保存的图片。然后我断开设备并再次连接,打开一个新文件资源管理器,然后他们在哪里......

【讨论】:

以上是关于在 Firemonkey 中拍摄和保存照片的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Anywall 在 Parse 上拍摄和保存照片? [关闭]

如何保存拍摄的照片

保存拍摄时间很长的照片

如何在拍摄后立即在照片上绘图,然后保存到存储中

Android:保存用户使用相机拍摄的照片

在应用内拍摄时照片没有日期和位置