【发布时间】:2017-02-27 15:59:13
【问题描述】:
在我的项目中,我试图获得一系列UIImage 对象的平均颜色。所以我实现了一个类别UIImage(AverageColor)来计算平均颜色。
这是我使用 GPUImage 库的方法:
- (void)averageColor:(void (^)(UIColor *))handler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
GPUImagePicture *picture = [[GPUImagePicture alloc] initWithImage:self];
GPUImageAverageColor *averageColorFilter = [GPUImageAverageColor new];
[averageColorFilter setColorAverageProcessingFinishedBlock:^(CGFloat r, CGFloat g, CGFloat b, CGFloat a, CMTime frameTime) {
UIColor *color = [UIColor colorWithRed:r green:g blue:b alpha:a];
dispatch_async(dispatch_get_main_queue(), ^{
handler(color);
});
}];
[picture addTarget:averageColorFilter];
[picture useNextFrameForImageCapture];
[picture processImage];
});
}
我也尝试过this answer 中的方法(我认为是纯 CPU 吗?)。然后我用相同的UIImage 测试这两种方法,并注销每种方法使用的时间。结果如下:
cpu时间:0.102402
显卡时间:0.414044
我很惊讶 CPU 运行得更快。那么这里有什么问题呢?我是否以错误的方式使用GPUImage?
编辑:
以上结果来自iOS模拟器。在真机(iPhone6s)上进行测试时,差异更大:
cpu时间:0.019034
显卡时间:0.137635
【问题讨论】:
标签: ios cocoa-touch uiimage core-graphics gpuimage