aspect-ratio - 使用GPUImage时如何保持宽高比?

标签 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];

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

[primaryView setFillMode:kGPUImageFillModePreserveAspectRatioAndFill];

然后这个:

[primaryView setFillMode:kGPUImageFillModePreserveAspectRatio];

然后这个:

[primaryView kGPUImageFillModeStretch];

最后!这些都不起作用..所以我缺少的是任何人的帮助。

最佳答案

-forceProcessingAtSize: 使该过滤器输出与您提供的尺寸完全相同的图像,忽略纵横比。这会将您的图片压缩成 300x300 的正方形。

如果您想保留图像的纵横比,您需要使用 -forceProcessingAtSizeRespectingAspectRatio:

但是,这会使您的图像变成信箱。要复制 Instagram 的功能,您可能想要从图像中心切出一个正方形区域。为此,请使用方形纵横比的裁剪滤镜。

关于aspect-ratio - 使用GPUImage时如何保持宽高比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783357/

相关文章:

python - 如果其中一个轴的 set_aspectratio 为 "equal",则轴的大小相同

html - 保持固定高度的纵横比

html - 纵横比 hell 与扭曲的数学难题(仅限 Css)

ios - 使用 GPUImage 将两个视频与色度键混合

ios - 使用 GPUImage 和 GLKIT IOS 的自定义着色器

CSS 缩放多个图像以适应视口(viewport)并保持纵横比

ios - 具有强度控制的 GPUImageLookupFilter?

iOS - 模糊效果 - GPUImage - processImageWithCompletionHandler

google-cloud-platform - GCP VM 未正确安装 nVidia 驱动程序