You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective C读取CMVideoDimensions异常,获取最大照片尺寸数值错误

修正AVCaptureDevice获取最大照片尺寸的Objective-C代码错误

你的问题出在对NSValue的处理上:supportedMaxPhotoDimensions返回的是封装了CMVideoDimensions结构体的NSValue数组,你直接把NSValue桥接成CMVideoDimensions指针,会读取到错误的内存地址,导致输出异常数值。

正确的代码写法:

for (NSValue *obj in device.activeFormat.supportedMaxPhotoDimensions) {
    CMVideoDimensions vd = [obj CMVideoDimensionsValue];
    NSString *s = [NSString stringWithFormat:@"res=%d:%d", vd.width, vd.height];
    NSLog(@"%@", s);
}

关键说明:

  • NSValue是结构体的容器,需要用专门的提取方法CMVideoDimensionsValue来获取内部封装的CMVideoDimensions值,而不是直接强转指针。
  • 调整后就能得到符合设备规格的正确分辨率数值(比如接近4000:3000的结果)。

官方文档内容翻译:

supportedMaxPhotoDimensions是AVCaptureDeviceFormat的属性,返回当前格式支持的最大照片尺寸数组。这些尺寸代表使用该格式拍摄照片时可捕获的最大像素分辨率,不同设备和格式对应的支持尺寸会有所不同。

内容的提问来源于stack exchange,提问作者andynewman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:43:25