【发布时间】:2016-04-28 20:40:34
【问题描述】:
我编写了以下代码来将棕褐色滤镜应用于图像:
- (void)applySepiaFilter {
// Set previous image
NSData *buffer = [NSKeyedArchiver archivedDataWithRootObject: self.mainImage.image];
[_images push:[NSKeyedUnarchiver unarchiveObjectWithData: buffer]];
UIImage* u = self.mainImage.image;
CIImage *image = [[CIImage alloc] initWithCGImage:u.CGImage];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, image,
@"inputIntensity", @0.8, nil];
CIImage *outputImage = [filter outputImage];
self.mainImage.image = [self imageFromCIImage:outputImage];
}
- (UIImage *)imageFromCIImage:(CIImage *)ciImage {
CIContext *ciContext = [CIContext contextWithOptions:nil];
CGImageRef cgImage = [ciContext createCGImage:ciImage fromRect:[ciImage extent]];
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
return image;
}
当我运行这段代码时,它似乎滞后了 1-2 秒。我听说核心图像比核心图形快,但我对渲染时间不以为然。我想知道这是否会在 CoreGraphics 甚至 OpenCV(项目的其他地方正在使用)中进行更快的处理?如果没有,有什么办法可以优化此代码以更快地运行?
【问题讨论】:
-
你有没有使用 Instruments 来找出这里真正慢的地方?
-
@zneak 那是什么乐器?
-
别想了,像“时间探查器”之类的东西。
标签: objective-c performance opencv core-graphics core-image