如何计算具有不同分辨率的UIImage的裁剪大小(矩形)

5

在我的应用程序中,我有一个“从相机捕获”的功能,我正在使用Brad Larson的GPUImageFramework(谢谢他),使用GPUImageStillCamera来捕获静态图像。

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

正如您所看到的,会话预设是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,即与图像大小无关。 - Paul de Lange
Paul 的观点很有道理。GPUImageCropFilter 使用规格化坐标系统,因此它可以裁剪与输入图片分辨率无关的矩形,并为您处理输出的分辨率计算。 - Brad Larson
1
我已经看过了,是的,它像你们在这里说的那样工作 :) 谢谢。 - janusfidel
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接