如何在使用GPUImage时保持宽高比?

时间:2013-07-22 08:54:39

标签: aspect-ratio gpuimage

我发现Instagram有300 * 300的相机窗口?它是一个正方形,然后我试图使用GPUImage制作相同的相机尺寸。所以我这样写:

primaryView = [GPUImageView alloc] initWithFrame:
                                   CGRectMake(0,0,300,300)];//define a square view

//define a still camera
stillCamera = [[GPUImageStillCamera alloc]
              initWithSessionPreset:AVCaptureSessionPreset640x480
              cameraPosition:AVCaptureDevicePositionFront];

//make it portrait
stillCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

//define a filter
filter = [[GPUImageFilter alloc] init];

//force the output to 300*300
[filter forceProcessingAtSize:((GPUImageView*)self.primaryView).sizeInPixels];

//set things up
[stillCamera addTarget: filter];
[filter addTarget: primaryView];
[stillCamera startCameraCapture];

现在我真的得到一个方形视图..但是视图看起来很平坦,它完全失真,我认为宽高比可能有问题。然后我像这样设置主视图的填充模式:

[primaryView setFillMode:kGPUImageFillModePreserveAspectRatioAndFill];

然后这个:

[primaryView setFillMode:kGPUImageFillModePreserveAspectRatio];

然后这个:

[primaryView kGPUImageFillModeStretch];

最后!没有这些工作......所以我缺少什么,任何一个,帮助。

1 个答案:

答案 0 :(得分:9)

-forceProcessingAtSize:会导致该过滤器输出与您提供的尺寸完全相同的图像,忽略纵横比。这将你的图像调整为300x300平方。

如果您想保留图片的宽高比,则需要使用-forceProcessingAtSizeRespectingAspectRatio:

然而,这将是您的图像的信箱。要复制Instagram所做的事情,您可能希望改为从图像中心切出一个方形区域。为此,请使用方形宽高比的裁剪滤镜。