我正在开发一个视频 session 应用程序,下面的代码成功地在屏幕上绘制了一个框架:
-(int)drawFrameOnMainThread{
if(mBitmapContext){
if(mDisplay){
CGImageRef imageRef = CGBitmapContextCreateImage(mBitmapContext);
#if TARGET_OS_IPHONE
UIImage *image = [UIImage imageWithCGImage:imageRef];
[self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
#elif TARGET_OS_MAC
[mDisplay setCurrentImage:imageRef];
#endif
CGImageRelease(imageRef);
}
}
return 0;
}
我想将 CIFilter 应用于正在绘制的框架,因此我修改了代码的 iOS 部分,如下所示:
UIImage *image = [UIImage imageWithCGImage:imageRef];
CIImage *beginImage = image.CIImage;
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, beginImage,
@"inputIntensity", [NSNumber numberWithFloat:0.8], nil];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg =
[context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImg = [UIImage imageWithCGImage:cgimg];
[self performSelectorOnMainThread:@selector(setImage:) withObject:newImg waitUntilDone:YES];
结果是我的视频屏幕保持黑色。有人可以在这里看到错误吗?我已经在这里待了几个小时了,无法弄清楚。
最佳答案
我已经解决了这个问题,问题在于在线初始化 CIImage:
//Wrong
CIImage *beginImage = image.CIImage;
//Right
CIImage *beginImage = [CIImage imageWithCGImage:imageRef];
不过正如 Brad 所说,性能是 Not Acceptable 。在 iPad2 上,视频滞后于音频大约 5 秒。所以我会为此研究其他解决方案,但我仍然很高兴看到它比其他任何东西更能作为概念证明来工作:)
关于ios - 在 iOS 中将 CIFilter 应用于视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10307220/