ios - 带有 GPUImageBuffer 目标的 GPUImagePicture?

标签 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 中正常渲染的图片.

这是怎么回事?

编辑:

按照 Brad 的建议,我尝试了:

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

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

最佳答案

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

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

关于ios - 带有 GPUImageBuffer 目标的 GPUImagePicture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22325726/

相关文章:

ios - iOS 上的交互式 Flash 内容

iphone - 如何防止同时出现 UIGestureRecognizers

c++ - 尝试链接 libFlurryAds 时链接器错误 Duplicate Symbol

ios - 禁用 GPUImageMovieWriter 上的所有音频

ios - 有没有办法找到GPUImageFilter对应的CIFilter?

ios - 确保 UITableView 以原子方式重新加载的最佳方法是什么?

ios - 我如何制作具有三个相对点的渐变?

iphone - 增加推送通知徽章 iPhone

ios - 在 swift 中使用 GPUImage 链接过滤器

iphone - Target Membership 变灰(禁用)