【问题标题】:Displaying UIImage obtained from CIImage in iOS 5 Core Image Filters在 iOS 5 Core Image Filters 中显示从 CIImage 获得的 UIImage
【发布时间】:2012-06-06 01:54:44
【问题描述】:

我正在开发图像过滤器应用程序。我使用以下代码创建了过滤器:

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];

然后,当用户选择过滤器时,我只需在应用过滤器后获取 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];

如果我使用 CIContext 的 createCGImage 方法,那么它可以正常工作并使用过滤器显示图像,但使用 createCGImage 非常慢。

【问题讨论】:

    标签: ios core-image


    【解决方案1】:

    CIImage的-createCGImage:fromRect:之所以这么慢,是因为这才是真正触发光栅位图处理和输出的原因。将输出 CIImage 分配给 UIImage 不会导致图像被处理和输出渲染。通过 Core Image 过滤图像时,您将无法避免此步骤。

    正如我在this answer 中所说,Core Image 在 iOS 上的性能在 iOS 5.1 上有点令人失望。如果我可以提出建议,我已经构建了an open source framework,它可以进行 GPU 加速的图像处理,并且在我测试过的几乎所有情况下都超过了 Core Image 的性能。对于图像过滤,我比 iPhone 4 上的 Core Image 快了大约 4 倍。

    但是,在过滤时往返 UIImage 仍然存在一些开销,因此如果您能够处理原始图像字节,那么我的原始数据输入和输出比处理 UIImage 快得多。我将在这个框架中添加一些直接的 JPEG 和 PNG 输入和输出,以提供比通过 UIImage 更快的路径。

    【讨论】:

    • 非常感谢布拉德!顺便说一句,爱爱爱你在 iTunesU 上的课程。非常感谢!
    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2012-02-24
    • 2013-01-15
    • 2020-04-06
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多