3

在 iPad Retina Display(设备,不是模拟器)上,我首先使用 Apple 的 AVFoundation 拍摄静态照片,但我切换到 GPUImage 因为我想要 ChromaKeyBlend 功能。得到了运行。但是,问题是当我点击我的相机按钮时,使用 AVFoundation,相机立即出现,而使用 GPUImage 需要五秒钟!

这是预期的加载时间吗?我知道它必须是同步的,不能在后台。

那么,其他人正在做什么来加快速度,或者他们只是在屏幕上放置一个活动指示器并让用户等待这五秒钟?

任何提示将不胜感激。谢谢!

4

2 回答 2

4

听起来您没有使用 GPUImageStillCamera 作为 GPUImage 管道的输入。使用 UIImage,特别是通过将平滑缩放设置为 YES 的新 GPUImagePicture 实例,将比直接从相机捕获和处理照片要慢得多。通过 AV Foundation 从相机捕获,将其转换为 UIImage,然后通过 GPUImagePicture 将该 UIImage 重新上传到 GPU 会引入大量不必要的开销。请改用 GPUImageStillCamera 以获得最佳性能。

查看 SimplePhotoFilter 示例了解如何完成此操作。当我在我的 Retina iPad(第 3 代,而不是第 4 代)上测试该应用程序时,拍摄、过滤和返回一张完整照片总共需要 0.9 秒,而将照片保存到相机胶卷则需要额外 0.6 秒。

于 2013-04-10T21:50:45.863 回答
0

好吧,我正在将图像加载到 GPUImagePicture 中,但我认为我的管道是正确的,我真的很喜欢灵敏度的实时调整(使用滑块)。正如我所说,我尝试在背景中预处理图像并缩短了几秒钟(即使我使用相同大小的完全透明图像,这仍然需要 5 秒)。希望有一些秘方;)

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

UIImage *inputImage = [UIImage imageNamed:@"RedCurtain-60-8x10.jpg"];  // 346kb
self.sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[self.sourcePicture processImage];

self.chromaKeyBlendFilter = [[GPUImageChromaKeyBlendFilter alloc] init];
[self.chromaKeyBlendFilter setColorToReplaceRed:0.0 green:1.0 blue:0.0];
[self.chromaKeyBlendFilter setThresholdSensitivity:0.35f];

[stillCamera addTarget:self.chromaKeyBlendFilter];
[self.sourcePicture addTarget:self.chromaKeyBlendFilter];
[self.chromaKeyBlendFilter addTarget:(GPUImageView *)self.videoPreviewView];
于 2013-04-11T04:18:29.733 回答