Skip to content

Repository files navigation

WideFormat+

给相机添加 65:24 XPAN宽画幅(非官方实现方式)

选择宽幅后:

  • 取景框按 65:24 两边加黑边,取景时看到的就是最终成片的构图;
  • 拍出来的照片自动居中裁成 65:24比例
  • 照片不带水印

其余画幅(4:3、1:1、16:9 全屏 等)不受任何影响


宽幅是怎么实现的

相机本身没有 65:24 这个比例,底层也不支持直接输出 65:24。所以模块采用「把成片加工裁成宽幅,曲线救国」的路线

一、让画幅选项出现「宽幅」 相机内置了一份「哪些模式支持宽幅」的配置,默认把这一项藏起来。模块在相机读取这份配置、以及决定选项是否可见时把它放开,画幅选项即出现宽幅。

二、取景框按 65:24 取景 预览画面本身仍是相机输出的 4:3,相机把它放大居中裁切填满了全屏。模块不缩放预览,选择在两侧盖上黑条,把可见范围收成一条 24:65 的竖带——横过来看就是 65:24 的宽幅。此举使得取景框与成片一致,所见即所得

三、成片居中裁成 65:24 相机拍完写盘时,模块在写文件的环节把照片居中裁成 65:24。裁剪会保留相机写入的 EXIF、Ultra HDR 增益图和 XMP / MPF 声明,画质和动态范围不受影响

四、兜底 万一某张照片绕过了上面的写盘环节,后台还有一个线程扫相册目录,将漏裁的宽幅照片补裁

此线程平时不扫盘,只在检测到宽幅拍摄信号后 60 秒窗口内才开始 list 目录。窗口一过就回到“每 3 秒一次纯内存判断”的休眠态;线程随相机进程生死,没有独立服务、没有 wakelock。代价是一个常驻 daemon 和每 3 秒一次微秒级唤醒,可得到漏裁照片自动补裁的好处


#Q&A

Q:为什么宽幅照片没有水印

A:相机的机型水印是在成片之后、由相册那条链加上去的,它会读照片里的水印开关;宽幅模式下,模块在相机读这个开关时回答「关」,所以宽幅照片不会带水印。

解释:若是带水印,带有水印的图片被裁剪,使水印变得不和谐且无法编辑(例如去除水印),故模块将宽幅拍摄时相机水印设置为“关”。后续仍可在相册自行添加水印

此改动仅对宽幅生效,在其他画幅时,相机水印设置界面开关状态将遵循用户设置


Q:为什么高效图片存储对宽幅无效

A:相机设置里的「高效图片存储」会让照片以 HEIC 格式保存,打开它之后,普通画幅的照片是 HEIC,但宽幅照片仍然是 JPEG。

原因是两条落盘路径不一样:

  • 普通画幅的照片,相机是在 Java 层把像素交给编码器写盘的,模块可以在这一层把它裁成 65:24;
  • HEIC 是由相机自己的底层编码器直接写盘的,模块拿不到那一步的像素,也就没法在编码前裁剪

所以模块换了个位置下手:等 HEIC 文件落盘之后,把它读出来、居中裁成 65:24,再以同名 JPEG 重新写回。同时把方向、拍摄时间、光圈、快门、ISO、焦距、镜头这些参数一并搬过去,原 HEIC 删除

结果是宽幅照片变成了 JPEG。这是为了保住裁剪而做的取舍——如果不换格式,宽幅在开启高效图片存储时就只能保持全画幅、不裁剪(不如自己全屏拍照后去相册裁成XPAN比例)


Q:为何没有宽幅实况?

A:非官方实现方式,成片是后裁的,实况自然被裁掉了


About

【自用模块】用AI给 Realme GT8Pro 相机(6.070.172)增加 65:24 宽幅 · 适配 RMX5200 / RealmeUI 16.0.9.402 / Android 16

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages