有什么办法可以获得iPhone相机的分辨率吗?显然,3G有1200x1600,而3GS有1500x2000,但是如何从我的代码中获取这些值(不需要拍照)。我需要他们对相机预览进行仿射变换。获取iPhone的相机分辨率?
我可以检测是3G或3GS硬编码这些值,但它只是最后的手段。
有什么办法可以获得iPhone相机的分辨率吗?显然,3G有1200x1600,而3GS有1500x2000,但是如何从我的代码中获取这些值(不需要拍照)。我需要他们对相机预览进行仿射变换。获取iPhone的相机分辨率?
我可以检测是3G或3GS硬编码这些值,但它只是最后的手段。
我认为你的“最后的手段”是一个很好的解决方案。
检测模型有什么问题?这些型号的硬件不会改变。唯一可能的问题是如果3GSX-R或其他产品带有16mpx摄像头。无论如何,您可能必须更新您的应用程序,并且可以将其他值添加到列表中。
我投了模型检测。
由于Apple不允许您直接与硬件通话,因此合法的App Store产品没有多少选择。
虽然我认为snicker的答案绝对是正确的。我想我会发布这个有趣的。
你可以通过看在iPhone上用户存储的相册(我想提出一个大胆的假设,这可以通过编程对iPhone进行没有任何限制!)使该手机上的照片大多拍摄的假设电话是自己的,然后你可以计算出平均照片分辨率是多少,然后滚动。
为什么你不想拍照?使用UIImagePickerController的takePicture方法,指示用户这是一个必要的校准步骤。之后,查看图片的分辨率,持续保存该值,然后删除您拍摄的图片。之后,您将获得您的解决方案,并能够对其进行应用。
因为我不想对拍摄的照片进行转换,而是对预览相机进行转换。我无法调用takePicture来做到这一点。 – iamj4de 2010-01-20 19:36:28
你真的需要知道图像的分辨率来设置仿射变换吗?由于视图是预先设置的以覆盖屏幕的宽度,因此您可以根据要采用的屏幕分数来更改变换,例如,如果需要预览为160像素,则缩小50%来自默认值。我现在在一个应用程序中执行此操作,它适用于新旧iPhone ...
这可能是正确的做法。我假设你指的是UIImagePickerController上的cameraViewTransform属性? – 2009-11-19 17:59:44
是的,我使用的代码如 \t self.camera.cameraViewTransform = CGAffineTransformTranslate(CGAffineTransformMakeScale(0.5f,0.5f),-160,-211); \t 让事情排队...... – 2009-11-21 23:29:51
因为有些情况下我需要进行复杂的转换,由翻译+旋转+缩放组成。没有相机分辨率,这是不可能的。 – iamj4de 2010-01-20 19:39:36
该帖子旧,但它几乎是谷歌的第一个,它没有有效的答案,所以这里有一个选项:
适用于iOS的解决方案,从4.x到7。X
这一切都在AV Foundation
框架方面AVCaptureSession
,配置并启动你可以发现里面的视频尺寸
后[[[session.inputs.lastObject] ports].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上
苹果也再次改变一切:现在你必须认购AVCaptureInputPortFormatDescriptionDidChangeNotification
下面是示例:
-(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不同的相机分辨率,我会被迫更新我的应用程序。噢,好吧,我想我会继续坚持下去。感谢您的回应。 – iamj4de 2009-10-29 08:03:09
我之所以这样说是因为如果苹果生产另一款iPhone,很可能还有其他原因需要更新您的应用程序。 – snicker 2009-10-29 14:20:12