0

我有一个UIViewController像这样的子层次结构
在此处输入图像描述

然后,我使用此代码显示相机预览

stillCamera = [[GPUImageStillCamera alloc] init];
stillCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

filter = [[GPUImageStretchDistortionFilter alloc] init];
[filter prepareForImageCapture];
[stillCamera addTarget:filter];
GPUImageView *filterview = [[GPUImageView alloc] init];
_preview = filterview;
[filter addTarget:filterview];

[stillCamera startCameraCapture];

变量_preview是一个UIView其类设置为"GPUImageView"。在上面的层次结构图中,它是选定的。

当我显示视图时,它没有显示任何内容_preview。只是一片空白UIView。我做错了什么?

当我将线路更改_preview = filterview为 时self.view = filterview,它按预期工作。它必须是self.view吗?

4

2 回答 2

3

我认为您上述代码的问题在于:

GPUImageView *filterview = [[GPUImageView alloc] init];
_preview = filterview;

如果您在 Interface Builder 中定义了 GPUImageView,则将_preview指向您在 IB 中与该视图关联的属性。上面的代码将该指针替换为一个不在 IB 中定义的视图。因此,您的可见视图将永远无法获取您的相机内容。

您需要改为删除这两行并使用

[filter addTarget:_preview];

确保您的上述设置是在您的视图控制器有机会将您的插座与您的 NIB 正确关联并且 IB 中的视图确实是 GPUImageView 之后进行的。

于 2014-04-30T16:20:53.200 回答
1

你几乎拥有它,首先以编程方式尝试这个,因为我有一个非常相似的情况发生,它正在工作:

  1. 制作你的相机:

    stillCamera = [[GPUImageStillCamera alloc] init];
    

    stillCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

  2. 制作预览视图:

    GPUImageView *previewView = [[GPUImageView alloc] initWithFrame:CGRectMake(x, y, w, h)];

  3. 制作你的过滤器:

    filter = [[GPUImageStretchDistortionFilter alloc] init];

  4. 现在将您的过滤器添加到您的相机:

    [stillCamera addTarget:filter];

  5. 最后,将您的摄像机添加到您的 previewView:

    [stillCamera addTarget:previewView];

编辑:

完全糊涂了!您现在需要将 previewView 添加到实际视图中!尝试这个:

[self.view addSubview:previewView];

试一试,GPUImage 一开始可能会有点混乱,但只要稍加修改,它就会起作用!

于 2014-04-30T15:25:28.437 回答