在 Firemonkey 中拍摄和保存照片
Posted
技术标签:
【中文标题】在 Firemonkey 中拍摄和保存照片【英文标题】:Taking and saving pictures in Firemonkey 【发布时间】:2013-10-20 21:03:52 【问题描述】:我使用 Firemonkey XE5 拍照并保存到设备。我使用标准操作TakePhotoFromCameraAction
和on 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 中拍摄和保存照片的主要内容,如果未能解决你的问题,请参考以下文章