DELPHI FIREMONKEY如何给拍摄的照片添加日期并保存
Delphi FireMonkey 照片加拍摄日期并保存实现方案
所需核心组件
TCameraComponent:跨平台调用设备摄像头获取拍摄的照片,适配iOS/安卓/Windows/macOSTImage:可选,用于预览原图和处理后的图片TBitmap:图片处理核心对象,无需拖拽,代码内直接创建调用即可TCanvas:用于在图片上绘制日期文字TSaveDialog:可选,桌面端用于选择文件保存路径,移动端可直接调用系统路径API获取相册/本地存储路径
具体实现逻辑
1. 日期获取规则
- 刚拍摄的照片直接取系统当前时间
Now(),按需格式化成年月日时分格式即可 - 读取本地已有照片的话,可以通过
TBitmapMetadata读取照片EXIF信息中的拍摄时间字段
2. 核心绘制+保存代码
procedure TMainForm.DrawDateAndSave(SourceBmp: TBitmap; const DateStr: string; SavePath: string); var DrawCanvas: TCanvas; TextPos: TRectF; TextStyle: TTextFormat; begin DrawCanvas := SourceBmp.Canvas; DrawCanvas.BeginScene; try // 配置文字样式,可按需调整颜色、大小、字体 DrawCanvas.Font.Color := TAlphaColors.White; DrawCanvas.Font.Size := 24; DrawCanvas.Font.Style := [TFontStyle.fsBold]; // 计算文字绘制位置:右下角预留10像素边距 TextPos := TRectF.Create(0, 0, SourceBmp.Width - 10, SourceBmp.Height - 10); TextStyle := [TTextFormat.tfBottom, TTextFormat.tfRight, TTextFormat.tfSingleLine]; // 可选:添加半透明黑色背景衬底,避免浅色背景下文字看不清 DrawCanvas.Fill.Color := TAlphaColorF.Create(0, 0, 0, 0.5).ToAlphaColor; DrawCanvas.FillRect(RectF(TextPos.Left - 6, TextPos.Top - 3, TextPos.Right + 6, TextPos.Bottom + 3), 0, 0, [], 1); // 绘制日期文字 DrawCanvas.FillText(TextPos, DateStr, False, 1, [], TextStyle); finally DrawCanvas.EndScene; end; // 保存处理后的图片到指定路径 SourceBmp.SaveToFile(SavePath); end;
3. 拍照后调用示例
procedure TMainForm.CameraComponent1SampleBufferReady(Sender: TObject; const ATime: TTime); var PhotoBmp: TBitmap; SavePath: string; DateStr: string; begin PhotoBmp := TBitmap.Create; try // 从相机缓冲区拿到拍摄的照片 CameraComponent1.SampleBufferToBitmap(PhotoBmp, True); // 格式化日期和保存路径 DateStr := FormatDateTime('yyyy年mm月dd日 hh:nn', Now); // 移动端可以用TPath.GetPicturesPath获取系统相册路径,桌面端可自定义路径 SavePath := TPath.Combine(TPath.GetPicturesPath, '拍照_' + FormatDateTime('yyyymmddhhnnss', Now) + '.jpg'); // 执行绘制和保存 DrawDateAndSave(PhotoBmp, DateStr, SavePath); finally PhotoBmp.Free; end; end;
注意事项
- 安卓、iOS端需要提前申请相机权限、存储读写权限,否则会出现调用失败、文件保存失败的问题
- 文字大小可以根据图片分辨率动态调整,避免不同尺寸的照片文字大小不合适,比如可以用
SourceBmp.Width / 50作为字体大小的基准值 - 如需高清导出,可以调整Bitmap的缩放质量参数后再进行绘制操作
内容的提问来源于stack exchange,提问作者user14918445
相关产品推荐
相关产品推荐

