获取iPhone';照相机的分辨率是多少?

获取iPhone';照相机的分辨率是多少?,iphone,camera,resolution,detect,iphone-3gs,Iphone,Camera,Resolution,Detect,Iphone 3gs,有没有办法获得iPhone摄像头的分辨率?显然3G有1200x1600,3GS有1500x2000,但我如何从代码中获得这些值(不拍照)。我需要他们对相机预览进行一些仿射变换 我可以检测到是3G还是3GS硬编码这些值,但这只是最后的手段。我认为您的“最后手段”是一个很好的解决方案 检测模型有什么问题?这两种型号的硬件都不会改变。。您可能唯一担心的是3GSX-R或其他产品是否配备16mpx摄像头。在这一点上,你可能无论如何都必须更新你的应用程序,并且可以在列表中添加另一个值 我投票支持型号检测。因

有没有办法获得iPhone摄像头的分辨率?显然3G有1200x1600,3GS有1500x2000,但我如何从代码中获得这些值(不拍照)。我需要他们对相机预览进行一些仿射变换

我可以检测到是3G还是3GS硬编码这些值,但这只是最后的手段。

我认为您的“最后手段”是一个很好的解决方案

检测模型有什么问题?这两种型号的硬件都不会改变。。您可能唯一担心的是3GSX-R或其他产品是否配备16mpx摄像头。在这一点上,你可能无论如何都必须更新你的应用程序,并且可以在列表中添加另一个值


我投票支持型号检测。

因为苹果不允许你直接与硬件对话,所以合法的应用商店产品没有太多选择。

而我认为斯尼克的答案肯定是正确的。我想我会把这篇文章贴出来是为了好玩


你可以查看用户在iPhone上存储的相册(我大胆地假设这可以在iPhone上通过编程实现,没有任何限制!!)假设手机上的照片大部分是用手机自己拍摄的,然后你就可以算出平均照片分辨率是多少,然后用它来计算。

你为什么不想拍张照片呢?使用UIImagePickerController的拍摄方法,指示用户这是必要的校准步骤。之后,查看图片的分辨率,持续保存该值,然后删除您拍摄的图片。之后,您将获得分辨率,并能够在其上应用变换。

设置仿射变换时,您真的需要知道图像的分辨率吗?由于视图已预先设置为覆盖屏幕宽度,因此您可以根据希望占据屏幕的哪一部分来更改变换,即,如果您需要160像素宽的预览,只需将其从默认值缩小50%。我现在在一个应用程序中这样做,它可以在新的和旧的iPhone上运行…

这篇文章很旧,但它几乎是谷歌的第一篇,而且没有得到有效的答案,所以这里还有一个选择:

从4.x到7.x的iOS解决方案

这一切都是基于
AV基础
framework的

配置并启动
AVCaptureSession
后,您可以在
[[session.inputs.lastObject]端口].lastObject formatDescription]
变量中找到视频维度

下面是大概的代码:

AVCaptureSession* session = ...;
AVCaptureDevice *videoCaptureDevice = ...;
AVCaptureDeviceInput *videoInput = ...;

[session beginConfiguration];
if ([session canAddInput:videoInput]) {[session addInput:videoInput];}
[session commitConfiguration];
[session startRunning];

//this is the clue
AVCaptureInputPort *port = videoInput.ports.lastObject;
if ([port mediaType] == AVMediaTypeVideo)
{
    videoDimensions = CMVideoFormatDescriptionGetDimensions([port formatDescription]);
}
iOS8解决方案

苹果再次改变了一切:现在你必须订阅
avcaptureinputportformatdescriptiondidchangennotification

以下是示例:

-(void)initSession
{
    AVCaptureSession* session = ...;
    AVCaptureDevice *videoCaptureDevice = ...;
    AVCaptureDeviceInput *videoInput = ...;

    [session beginConfiguration];
    if ([session canAddInput:videoInput]) {[session addInput:videoInput];}
    [session commitConfiguration];
    [session startRunning];

    [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(avCaptureInputPortFormatDescriptionDidChangeNotification:)
            name:@"AVCaptureInputPortFormatDescriptionDidChangeNotification"
            object:nil];
}

-(void)avCaptureInputPortFormatDescriptionDidChangeNotification:(NSNotification *)notification
{
    AVCaptureInputPort *port = [videoInput.ports objectAtIndex:0];
    CMFormatDescriptionRef formatDescription = port.formatDescription;
    if (formatDescription) {
        videoDimensions = CMVideoFormatDescriptionGetDimensions(formatDescription);
    }

}

人们不喜欢“有趣”的答案。我必须学会在评论中开玩笑=]不幸的是,你大胆的假设是不正确的。没有文档记录的方法可以通过编程方式浏览照片库。啊=]大胆假设的危险!哦,好吧,吸取了教训!此外,人们可以将自己的照片同步到手机中,这保证了你不会有一定的价值。正是因为这个原因,我才被推迟:如果苹果公司生产另一款相机分辨率不同的iPhone,我将被迫更新我的应用程序。哦,那么,我想我需要坚持下去。谢谢你的回复。我之所以这么说,是因为如果苹果再生产一部iPhone,你很可能需要更新你的应用程序。这可能是正确的方法。我假设您指的是UIImagePickerController上的cameraViewTransform属性?是的,我使用的代码类似于self.camera.cameraViewTransform=CGAffineTransformTranslate(CGAffineTransformMakeScale(0.5f,0.5f),-160,-211);为了让东西排列整齐…因为有些情况下我需要进行复杂的变换,由平移+旋转+缩放组成。如果没有相机分辨率,这是不可能的。你只需要计算从原始屏幕预览矩形到屏幕上希望预览显示的任何位置的转换:实际的相机分辨率没有计算在数学中。因为我不想对拍摄的照片进行转换,而是对预览相机进行转换。我无法调用takePicture来执行此操作。最后一个对象将维度返回为0x0。第一个对象是提供视频(或者更确切地说是视频帧)的尺寸。@neeraj按照正常方式,您应该探测所有端口,并检查
[[port mediaType]isEqualToString:AVMediaTypeVideo]