You need to enable JavaScript to run this app. DELPHI FIREMONKEY如何给拍摄的照片添加日期并保存
优惠活动
大模型
产品
解决方案
定价
更多

DELPHI FIREMONKEY如何给拍摄的照片添加日期并保存

Delphi FireMonkey 照片加拍摄日期并保存实现方案

所需核心组件

  • TCameraComponent:跨平台调用设备摄像头获取拍摄的照片,适配iOS/安卓/Windows/macOS
  • TImage:可选,用于预览原图和处理后的图片
  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 15:15:03