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
相关产品推荐
相关产品推荐

