2012-08-06 36 views
5

在我的應用程序中,我有一個'Capture from Camera'功能,當捕獲靜止圖像時,我使用Brad Larson(ty)的GPUImageFramework,GPUImageStillCamera。如何計算不同分辨率的UIImage的裁剪大小(rect)

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

正如你所看到的。 Session預設爲AVCaptureSessionPresetPhoto,iPhone 4給我1529x2048輸出,4s(8mp)設備給我2448x3264。

下面的圖片是我如何使用GPUStillCamera。這裏是矩形,在這種情況下是拍攝圖像的裁剪矩。

Still camera output

代碼片段時,我捕捉圖像。

- (IBAction)takePhoto:(id)sender 
{ 
     [stillCamera capturePhotoAsJPEGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedJPEG, NSError *error){ 

     //1529x2048 when iPhone 4 and 2448x3265 when on 4s 
     UIImage *rawImage = [[UIImage alloc]initWithCGImage:[[UIImage imageWithData:processedJPEG]CGImage]scale:1.0 orientation:UIImageOrientationUp]; 

     **CGRect rect = CGRect{?,?,?,?};** 
     UIImage *imageFromRect = [rawImage imageAtRect:rect ]; 
} 

我的問題在這裏。我如何知道我可以傳遞給imageAtRect方法的點(x,y,w,h),該方法將從rawImage中繪製子圖像?並且只會獲得矩形內的圖像部分(,而不管所捕獲圖像的分辨率爲)如上面的屏幕所示?我應該手動做還是有什麼數學技巧可以建議?

謝謝!

+1

如果您仍在使用GPUImage,請查看GPUImageCropFilter。它將使用圖像座標空間進行裁剪,值範圍爲0.0到1.0,即:不考慮圖像尺寸 – 2012-08-06 07:14:49

+0

保羅是一個很好的觀點。 GPUImageCropFilter使用標準化的座標系統,因此裁剪出一個獨立於輸入圖片分辨率的矩形,併爲您處理輸出的分辨率計算。 – 2012-08-06 16:21:12

+1

我已經看過它,是的,它的工作原理就像你們在這裏所說的:)謝謝。 – janusbalatbat 2012-08-07 01:51:28

回答

相關問題