我正在处理图像过滤器应用程序.我使用以下代码创建了过滤器:
context = [CIContext contextWithOptions:nil];
beginImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"biscus_small.png"]];
filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, beginImage,
@"inputIntensity", [NSNumber numberWithFloat:0.8], nil];
Run Code Online (Sandbox Code Playgroud)
然后当用户选择过滤器时,我只需在过滤器应用后获取CIImage并分配给UIImageView.由于某种原因,setImage之后的UIImageView显示为白色(无).
CIImage *outputImage = [filter outputImage];
// CGImageRef cgimg =
// [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *finalImage = [UIImage imageWithCIImage:outputImage];
[self.imageView setImage:finalImage];
Run Code Online (Sandbox Code Playgroud)
如果我使用CIContext的createCGImage方法然后它工作正常并使用过滤器显示图像但使用createCGImage非常慢.
CIImage -createCGImage:fromRect:之所以如此慢的原因在于它实际上触发了栅格位图的处理和输出.将输出CIImage分配给UIImage不会导致处理和输出图像.通过Core Image过滤图像时,您将无法避免此步骤.
正如我在这个答案中所说,Core Image在iOS上的表现有点令人失望.如果我可以提出建议,我已经构建了一个开源框架,它可以进行GPU加速的图像处理,并且在我测试过的几乎所有情况下都能胜过Core Image的性能.对于图像过滤,我比iPhone 4上的Core Image快4倍.
但是,在过滤时仍然会有一些从UIImage到UIImage的开销,所以如果你能够使用原始图像字节,我的原始数据输入和输出比处理UIImage要快得多.我将在此框架中添加一些直接的JPEG和PNG输入和输出,以提供更快的路径,而不必通过UIImage.
| 归档时间: |
|
| 查看次数: |
3152 次 |
| 最近记录: |