GPUImagePicture与GPUImageBuffer目标?

时间:2014-03-11 12:26:52

标签: ios objective-c gpuimage

我尝试执行以下操作来显示图片,而不是在TARGET_IPHONE_SIMULATOR为真时尝试访问视频。

UIImage *image = [UIImage imageNamed:@"fake_camera"];

GPUImagePicture *fakeInput = [[GPUImagePicture alloc] initWithImage:image];
GPUImageBuffer *videoBuffer = [[GPUImageBuffer alloc] init];
[fakeInput processImage];
[fakeInput addTarget:videoBuffer];
[videoBuffer addTarget:self.backgroundImageView]; //backgroundImageView is a GPUImageView

这使我的backgroundImageView呈现黑色而不显示我的图像。

如果我直接将fakeInput的输出发送到backgroundImageView,我会看到 backgroundImageView中正常呈现的图片。

这里发生了什么?

编辑:

布拉德推荐我试过:

UIImage *image = [UIImage imageNamed:@"fake_camera"];

_fakeInput = [[GPUImagePicture alloc] initWithImage:image];
GPUImagePicture *secondFakeInput = [[GPUImagePicture alloc] initWithImage:image];
[_fakeInput processImage];
[secondFakeInput processImage];
[_fakeInput addTarget:_videoBuffer];
[secondFakeInput addTarget:_videoBuffer];
[_videoBuffer addTarget:_backgroundImageView];

我也尝试过:

UIImage *image = [UIImage imageNamed:@"fake_camera"];

_fakeInput = [[GPUImagePicture alloc] initWithImage:image];
[_fakeInput processImage];
[_fakeInput processImage];
[_fakeInput addTarget:_videoBuffer];
[_videoBuffer addTarget:_backgroundImageView];

这两种方法似乎都不起作用......应该吗?

1 个答案:

答案 0 :(得分:1)

GPUImageBuffer顾名思义,它会缓冲帧。如果您向其发送静态照片,则会缓冲该图像,但尚未发送。您需要向其发送第二张图像(或第二次使用-processImage)以获得一帧深度的默认缓冲区以显示原始帧。

GPUImageBuffer对静止图像实际上没有任何作用。它旨在作为视频的帧延迟操作,以进行帧到帧的比较,如低通滤波器。如果你需要对静止图像进行帧比较,混合是一种更好的方法。