【问题标题】:Real Time Performance With Core Image Blend Modes核心图像混合模式的实时性能
【发布时间】:2014-09-17 01:29:46
【问题描述】:

我正在尝试做一个非常基本的演示应用程序,它允许用户选择图像和混合模式,然后在背景图像上方拖动和操作混合图像。当用户将图像拖到背景上方时,我想要实时性能(iPhone 4 上为 20+ fps)。图像与屏幕分辨率相同。

这可能与核心图像有关吗?我尝试了几种不同的方法,但似乎无法获得我想要的性能。

现在我正在做这样的事情:

CIFilter * overlayBlendMode = [CIFilter filterWithName:@"CIOverlayBlendMode"];
[overlayBlendMode setValue:self.foregroundImage forKey:@"inputImage"];
[overlayBlendMode setValue:self.backgroundImage forKey:@"inputBackgroundImage"];

CIImage * test = [overlayBlendMode outputImage];

// render background image
[self.ciContext drawImage:test inRect:test.extent fromRect:test.extent];

每次从我的 GLKViewController 调用显示时都会执行此代码。

我的设置代码是:

self.glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
self.ciContext = [CIContext contextWithEAGLContext:self.glContext];

...

UIImage * foregroundImage = [ViewController imageScaledFromImage:[UIImage imageNamed:@"Smiley"] inRect:CGRectMake(0, 0, 100, 100)];
GLKTextureInfo * foregroundTexture = [GLKTextureLoader textureWithCGImage:foregroundImage.CGImage options:@{GLKTextureLoaderOriginBottomLeft: @(YES)} error:nil];
self.foregroundImage = [CIImage imageWithTexture:foregroundTexture.name size:foregroundImage.size flipped:NO colorSpace:nil];

UIImage *backgroundImage = [ViewController imageCenterScaledFromImage:[UIImage imageNamed:@"Kate.jpg"] inRect:(CGRect){0,0,self.renderBufferSize}];
GLKTextureInfo * backgroundTexture = [GLKTextureLoader textureWithCGImage:backgroundImage.CGImage options:@{GLKTextureLoaderOriginBottomLeft: @(YES)} error:nil];
self.backgroundImage = [CIImage imageWithTexture:backgroundTexture.name size:backgroundImage.size flipped:NO colorSpace:nil];

我得到的性能不是我所期望的,我期待 60fps,因为这是一个如此简单的场景,但在我的 iPad 4 上我得到了大约 35 帧左右,我相信在 iPhone 上会更糟4 这是我的最小公分母。

【问题讨论】:

    标签: ios core-image


    【解决方案1】:

    您是否将 GLKViewController -> preferredFramesPerSecond 设置为默认值 30 以外的值?

    【讨论】:

    • 与 GLKViewController 关联的 GLKView 是否也设置了您在设置代码中初始化的 EAGLContext? (通常您可以从 GLKView -> 上下文参数中创建 CIContext。)
    • 是的,我刚刚做了一些测试,在 iPhone 4 上我得到了
    • 哇,低于 5 fps 意味着发生了其他事情。甚至 CoreImage 也不会那么糟糕。测试是在纵向模式还是横向模式下运行?在旋转视图中使用 OpenGL 绝对是一个严重减慢的因素(也在文档中提到)。
    • 我的视图层次结构如下所示: UIScrollView -> UIImageVIew -> UIView -> GLView 这是纵向的。我的视图层次结构相当复杂。我可能会尝试制作一个演示应用程序,看看是否是问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多