在iOS 5核心图像过滤器中显示从CIImage获取的UIImage

aza*_*arp 1 core-image ios

我正在处理图像过滤器应用程序.我使用以下代码创建了过滤器:

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非常慢.

Bra*_*son 6

CIImage -createCGImage:fromRect:之所以如此慢的原因在于它实际上触发了栅格位图的处理和输出.将输出CIImage分配给UIImage不会导致处理和输出图像.通过Core Image过滤图像时,您将无法避免此步骤.

正如我在这个答案中所说,Core Image在iOS上的表现有点令人失望.如果我可以提出建议,我已经构建了一个开源框架,它可以进行GPU加速的图像处理,并且在我测试过的几乎所有情况下都能胜过Core Image的性能.对于图像过滤,我比iPhone 4上的Core Image快4倍.

但是,在过滤时仍然会有一些从UIImage到UIImage的开销,所以如果你能够使用原始图像字节,我的原始数据输入和输出比处理UIImage要快得多.我将在此框架中添加一些直接的JPEG和PNG输入和输出,以提供更快的路径,而不必通过UIImage.