2012-08-06 40 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

回答

相关问题