【发布时间】: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