将 OPPO / OnePlus / realme 设备拍摄的 ProXDR HEIC 照片转换为标准 ISO 21496-1 HDR HEIC。
Rust 重写核心转换逻辑(原版 XDRemux 为 Swift + Python),搭配 Flutter 构建跨平台桌面/移动端 UI。转换后的照片可在 macOS、iOS、Android、Windows 等支持 HDR 显示的系统上查看。

- ✅ LHDR(X6 系列)→ ISO 21496-1 HDR HEIC(gray gain map)
- ✅ UHDR(X7 系列)→ ISO 21496-1 HDR HEIC(RGB gain map)
- ✅ OPPO 相册兼容模式(RGB gain map + 142B tmap + BT.2020 PQ colr)
- ✅ ISO HDR 元数据:XMP hdrgm:*、tmap box、auxC URN、tone map LUTs
- ✅ EXIF UserComment patch(
tail 标记 OPPO 路由)
- ✅
xdremux_verify_output — 验证输出文件是否包含有效 ISO gain map
- ✅ Bit-exact SDR base image(源文件直达,不重新编码)
- ✅ Windows 桌面应用(含 Gyan.dev ffmpeg 捆绑分发)
- ✅ Android 移动端应用(x265 静态链接 + 纯 Rust JPEG 解码,无需 ffmpeg)
- ✅ 拖拽 HEIC 文件到窗口(Windows 原生
WM_DROPFILES)
- ✅ 文件选择器(
file_picker)兼容所有平台
- ✅ 多文件队列,并行转换(可配置 1–4 线程)
- ✅ 实时进度条(HEVC tile 级进度:编码第 N/总数 个瓦片)
- ✅ 深色/浅色主题(跟随系统)
- ✅ 中文界面
- ✅ OPPO 兼容模式开关
- ✅ 跳过已有有效输出文件
- ✅ 可配置输出目录或文件名后缀
- ✅ 缩略图预览(桌面 ffmpeg / Android Rust FFI 提取 EXIF 缩略图)
- ✅ Android 保存到图库(MediaStore DCIM/XDRemux)
- ✅ Android 分享(ACTION_SEND)
- ✅ Android 系统图库打开(ACTION_VIEW)
- ✅ 断点续传(批量转换中断后可恢复)
- ✅ 响应式 UI(手机 2 列 / 平板桌面 3 列)
- ✅ 99 个 Rust 单元测试全部通过
- ✅ Tier 1–4 跨实现一致性(vs 原版 Python)通过
- ✅ Apple ImageIO 验证通过
| 平台 |
状态 |
备注 |
| Windows |
✅ 可运行 |
ffmpeg 捆绑、原生拖拽、DLL 完整工作 |
| macOS |
✅ 可运行 |
FFI dylib 加载 + macOS Runner 已验证 |
| Android |
✅ 可运行 |
x265 静态链接、纯 Rust JPEG 解码、缩略图 FFI、MediaStore 保存 |
| Linux |
❌ 未创建 |
flutter create 待执行 |
| iOS |
❌ 未创建 |
flutter create 待执行 |
下载 Release,解压即用(ffmpeg 已内置,无需额外安装)。
# Rust 核心
cargo build -p xdremux-core --release
# Windows
cd apps/flutter
flutter build windows --debug
# Android(需 cargo-ndk + NDK)
cd xdremux/rust
cargo ndk -t arm64-v8a -o "../../apps/flutter/android/app/src/main/jniLibs" build --release
cd ../../apps/flutter
flutter build apk --debug
cargo build --workspace --release
./target/release/xdremux-conformance convert input.heic output.heic
| 函数 |
用途 |
xdremux_version() |
返回版本号 |
xdremux_inspect(path) |
解析 HEIC,返回 mode / family / edr_scale / gainMapMax |
xdremux_convert(in, out, config) |
转换 ProXDR → ISO HDR |
xdremux_read_progress(buf) |
读取转换进度(阶段 + 当前/总数) |
xdremux_verify_output(path) |
验证输出是否包含 ISO gain map |
xdremux_extract_thumbnail(path) |
提取 HEIC 内嵌 EXIF JPEG 缩略图 |
xdremux_free_result(r) |
释放 inspect/convert 返回的结果 |
xdremux_free_thumbnail(r) |
释放缩略图结果 |
| 模式 |
oppo_compat |
Gain map |
colr |
URN |
目标 |
| 标准 ISO |
0 |
1ch gray HEVC |
sRGB |
Apple URN |
iOS / macOS 相册 |
| OPPO 相册兼容 |
1 |
3ch RGB HEVC |
BT.2020 PQ |
ImageIO native URN |
OPPO 相册 |
| 路径 |
用途 |
xdremux/rust/ |
Rust 核心库 |
xdremux/swift-cli/ |
Swift CLI(Apple ImageIO 参考实现) |
xdremux/python/ |
Python CLI(跨平台参考实现) |
apps/flutter/ |
Flutter 跨平台 App |
apps/macos/XDRemuxApp/ |
macOS SwiftUI App |
tests/conformance/ |
跨实现一致性验证 |
fixtures/ |
测试样本说明 |
screenshots/ |
应用截图 |
- 转换前请备份原始文件。
- 转换后回到 OPPO 相册编辑再保存,HDR Gain Map 可能丢失。
- Windows 端 ffmpeg 捆绑包体积较大(~200MB),计划调研缩小方案。
- 仅接受
.heic 文件(不区分大小写)。
- Android 缩略图依赖 EXIF 内嵌 JPEG,部分文件可能无缩略图。
python3 tests/conformance/driver.py \
--sample-dir <sample-dir> \
--out-report conformance_report.md