在我的應用程序中,我有一個'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。這裏是矩形,在這種情況下是拍攝圖像的裁剪矩。
代碼片段時,我捕捉圖像。
- (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
中繪製子圖像?並且只會獲得矩形內的圖像部分(,而不管所捕獲圖像的分辨率爲)如上面的屏幕所示?我應該手動做還是有什麼數學技巧可以建議?
謝謝!
如果您仍在使用GPUImage,請查看GPUImageCropFilter。它將使用圖像座標空間進行裁剪,值範圍爲0.0到1.0,即:不考慮圖像尺寸 – 2012-08-06 07:14:49
保羅是一個很好的觀點。 GPUImageCropFilter使用標準化的座標系統,因此裁剪出一個獨立於輸入圖片分辨率的矩形,併爲您處理輸出的分辨率計算。 – 2012-08-06 16:21:12
我已經看過它,是的,它的工作原理就像你們在這裏所說的:)謝謝。 – janusbalatbat 2012-08-07 01:51:28