核心图像混合模式的实时性能

时间:2014-09-16 15:09:27

标签: ios core-image

我试图做一个非常基本的演示应用程序,允许用户选择图像和混合模式,然后拖动和操作背景图像上方的混合图像。当用户将图像拖到背景的顶部时,我想要实时性能(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是我最低的共同点。

1 个答案:

答案 0 :(得分:0)

你设置了GLKViewController - > preferredFramesPerSecond到默认值30以外的其他东西?