2013-05-05 39 views
3

在iPad 3的Retina與iOS 6.1,我初始化我的相機有:GPUImageStillCamera輸出分辨率有限公司

stillCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPresetPhoto cameraPosition:AVCaptureDevicePositionBack]; 
stillCamera.outputImageOrientation = UIInterfaceOrientationLandscapeLeft; 

我設置了攝像頭,這些過濾器:

UIImage *inputImage = [UIImage imageNamed:@"blank-1x1.png"]; 
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; 
[sourcePicture processImage]; 

chromaKeyBlendFilter = [[GPUImageChromaKeyBlendFilter alloc] init]; 
[chromaKeyBlendFilter setColorToReplaceRed:0.0 green:1.0 blue:0.0]; 
[chromaKeyBlendFilter setThresholdSensitivity:0.37f]; 
filter = chromaKeyBlendFilter; 

[stillCamera addTarget:filter]; 
[sourcePicture addTarget:filter]; 

[filter addTarget:videoPreviewView]; // 1024x768 view 
[stillCamera startCameraCapture]; 

當我捕捉我使用的圖像:

[stillCamera capturePhotoAsPNGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedPNG, NSError *error){ 
    self.currentImage = [UIImage imageWithData:processedPNG]; 
}); 

但我得到的圖像是屏幕大小(視網膜風格)2048x1536,而不是什麼我期待後置攝像頭爲2420x1936。我也注意到#imageFromCurrentlyProcessedOutputWithOrientation#只返回屏幕大小,並且在GPUImageStillCamera.m中查看捕獲代碼,它看起來好像是輸出源自的地方。

我不知道爲什麼,因爲我也有一個選項/按鈕來使用非GPUImage設置,我找回了2420x1936的PNG圖像。

我在這裏做錯了什麼?感謝您的任何提示(因爲我真的想要2420x1936)。

回答

0

首先,我的意思是2592x1936的iPad後置相機全分辨率(我裁剪的圖像爲8x10尺寸)。事實證明,我試圖變得太「聰明」。

當我點擊一個按鈕來捕捉圖像時,我在後臺線程中使用以下內容獲取保存到屬性中的圖像(這種情況下PNG文件最多可達8mb)

[stillCamera capturePhotoAsPNGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedPNG, NSError *error) 
self.currentImage = [UIImage imageWithData:processedPNG]; 

BUT,調度該隊列後,我立即segued到我抓起使用

[filter imageFromCurrentlyProcessedOutputWithOrientation:UIImageOrientationUp] 

這是2048x1516,足以在iPad視網膜顯示的預覽圖像的預覽圖。然後,當該預覽被解散時,self.currentImage被裁剪並保存到文件(和核心數據元數據)。

當我注意到預覽顯示的時候,我得到了太多的「智能」,但我仍然從攝像機獲取了KVO控制檯信息。因此,在看來我會放入一個「暫停攝像機」並重新出現「恢復攝像機」。顯然,當發出暫停攝像頭命令時,它立即停止處理,並將其對我的currentImage屬性進行轉儲,並且如果預覽可能已經等待了幾秒鐘,那麼它始終是2048x1516圖像,而不是全像素圖像。

恕我直言,當相機暫停時,任何後臺捕捉線程應該繼續,直到完成,然後暫停相機。但我可以用這個工作,我很高興我發現了這個問題。