CameraOverlay 拓展:层叠相机,参考照片半透明叠加对比拍摄

« 返回首页

logo CameraOverlay 拓展

层叠相机:在相机实时预览上叠加一张可调透明度的参考照片,对齐机位翻拍对比。 适合装修进度、设备安装前后、绿植生长这类「同一个位置拍两次」的记录需求: 先拍一张基准照设为参考底图,之后把手机摆到大致相同的位置,透过半透明的旧照片 对齐角度,再拍一张——两张照片视角一致,直接并排对比。

功能一览:

  • 相机画面显示在指定的布局组件里(前后摄像头可切换)
  • 参考底图透明度 0~100 实时调节(滑动条拖着看效果)
  • 手电筒常亮,方便拍暗处设备
  • 拍照可把半透明参考层一起合成进照片,所见即所得
  • 需要 Android 5.0(API 21)以上系统

快速上手

  1. 设计器里放一个垂直布局(如 垂直布局1,宽 300、高 400)当预览窗口,再放两个按钮、一个滑动条(MinValue 0、MaxValue 100)、一个标签
  2. 从拓展导入 CameraOverlay,把 PreviewHost 属性设为 垂直布局1
  3. 拖动滑动条实时调参考图透明度;点「拍照对比」保存
  4. 拍完的路径在 GotPicture 事件里拿到,设回 ReferenceImage 就成了下一张的参考底图
when 按钮1.Click() {
  CameraOverlay1.PreviewHost = 垂直布局1
  CameraOverlay1.StartPreview()
}
when 滑动条1.PositionChanged(thumbPosition) {
  CameraOverlay1.Opacity = thumbPosition
}
when 按钮2.Click() {
  CameraOverlay1.TakePicture()
}
when CameraOverlay1.GotPicture(path) {
  CameraOverlay1.ReferenceImage = path
  标签1.Text = "已保存,并设为参考底图"
}
when CameraOverlay1.CameraError(message) {
  标签1.Text = message
}

典型工作流(前后对比记录)

  1. 第一次拍摄:SaveWithOverlay 保持默认真,拍下现场照片 A
  2. GotPicture 里把照片 A 的路径设为 ReferenceImage——预览画面上立刻浮出半透明的 A
  3. 调 Opacity(一般 40~60):既能看清 A 的轮廓,又不挡住实时画面
  4. 移动手机,让实时画面与半透明的 A 轮廓重合(FitMode 用默认 crop 时两者同视角,最容易对齐)
  5. 再拍一张得到照片 B:A、B 机位一致,直接对比前后变化
  6. 换位置重新开始时用 ClearReference() 清掉参考层

属性

PreviewHost
预览宿主:放一个布局组件(建议垂直布局),相机画面会显示在其中。设计器和代码块里都可以设置。
ReferenceImage
参考底图:设计器里选素材,块里也可以填素材名或照片绝对路径(GotPicture 返回的路径可直接用)。
Opacity
参考底图透明度:0 完全透明,100 完全不透明,中间可自由调节。默认 50。
CameraFront
是否使用前置摄像头。切换会自动重启预览。默认假。
TorchEnabled
手电筒常亮(需设备闪光灯支持),方便拍暗处设备。
SaveWithOverlay
拍照时是否把半透明参考层一起合成进照片(所见即所得)。默认真。关闭则保存不含参考层的全分辨率原片。注意:合成照片的分辨率等于预览分辨率。
FitMode
参考底图铺放方式:stretch 拉伸铺满,fit 完整显示居中,crop 铺满裁切(推荐,与相机画面同视角对齐)。默认 crop。

事件

CameraReady()
相机预览就绪时触发,此时可以开始调节透明度、拍照。
GotPicture(path)
拍照保存完成时触发,参数为照片的绝对路径。可把它设为 ReferenceImage 作为下一张的参考底图。
CameraError(message)
出错时触发,参数为中文错误说明。

方法

StartPreview()
开始相机预览(自动申请相机权限)。需要先设置 PreviewHost 属性,且需要 Android 5.0 以上系统。
StopPreview()
停止相机预览并释放相机(别的应用就能用相机了)。
TakePicture()
拍照保存到应用图片目录,完成后触发 GotPicture 事件。SaveWithOverlay 为真时照片里带半透明参考层(与屏幕所见一致)。
ClearReference()
清除参考底图叠加层(不影响参考图属性,重设透明度不会恢复)。

注意事项

  • 照片保存在应用图片目录(Android/data/<包名>/files/Pictures/CameraOverlay/),文件名带时间戳
  • 合成照片(SaveWithOverlay 为真)分辨率等于预览分辨率;需要原图请临时关掉再拍
  • 应用切后台会自动停止预览、回到前台自动恢复;StopPreview 后再 StartPreview 即可重开

拓展下载

cn.fun123.CameraOverlay.aix

案例下载

上面的快速上手就是一份可直接运行的完整工程(含拓展、布局与全部代码块):

TestCameraOverlay.aia

文档反馈