获得的UIImage从CIImage不能正常工作(Getting UIImage from CIIm

2019-09-24 04:23发布

我有正从一个UIImage和CIImage麻烦。 下面的代码行工作正常上iOS6的:(输出图像是CIImage)

self.imageView = [UIImage imageWithCIImage:outputImage];

要么

[self.imageView setImage:[UIImage imageWithCIImage:outputImage]];

当我是运行的iOS 5的设备上运行此相同的代码行中的ImageView是空白的。 如果我登录了的UIImage的大小属性是正确的,但像永远不会显示在屏幕上。

当我使用一个CGImageRef(如下图所示),它工作在两个设备上不错,但它造成了巨大的内存增长,当我做了一堆镜头分析。

context = [CIContext contextWithOptions:nil];
CGImageRef ref = [context createCGImage:outputImage fromRect:outputImage.extent];
self.imageView.image = [UIImage imageWithCGImage:ref scale:1.0 orientation:UIImageOrientationUp];
CGImageRelease(ref);

有谁知道为什么的UIImage imageWithCIImage不起作用? 根据该的UIImage类的引用它应该工作在iOS5中及以上。 此外为什么使用CGImageRef引起如此大规模的堆增长?

谢谢

Answer 1:

在iOS 5.0, -imageWithCIImage:似乎从来没有正常工作,我们被告知要使用-createCGImage:fromRect:接近你,以使核心图像过滤器链光栅输出上面描述。

正如你看到的,这样做的缺点是, -createCGImage:fromRect:你的目标图像的大小,创建一个新的CGImageRef,并在其心脏的位图上,以新的UIImage通过。 这可能意味着你有代表在一个点在内存中的最后过滤的帧至少两个完整的位图,这可能会造成相当大穗,如果这些是高画质图像。

似乎-imageWithCIImage:已被固定在IOS 6.0(核心图片已经有很多的5.0至6.0所做的改进)。 虽然我只能猜测,为什么它不会导致此内存秒杀,我敢打赌,这是由于使用了纹理缓存的从滤波处理后的输出OpenGL ES的质地和一个储存在最后的位图之间共享内存的UIImage的。 我这样做,我GPUImage框架过滤大图像时以减少内存消耗,它将使意义的核心形象做同样的。 同样,这只是猜测。

不幸的是,它看起来像你需要在这里做一个小测试版本,并恢复到正从CIImages输出,如果你想支持的iOS 5.0应用程序的老路上。



文章来源: Getting UIImage from CIImage does not work properly