有什麼辦法可以獲得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