美文网首页
一口气说明白 CIImage 、CGImageRef、UIIma

一口气说明白 CIImage 、CGImageRef、UIIma

作者: 三三哥 | 来源:发表于2020-02-21 21:23 被阅读0次

    CIImage 

    通过苹果官方文档解释:

    CIImage 可以理解为结合处理 Core Image Classes的一些类:如CIFiter(滤镜处理类)、CIContext(分析评估图像的一个上下文环境)、CIVector(先理解矩阵向量,后面研究) 和 CIColor, 可以通过各种渠道去创建CIImage,如Quartz 2D images 、core video image buffer(CVImageBufferRef,这玩意我在用iOS系统捕捉画面帧的一个代理里面见过,具体也不太记得),URL 对象(直接加载图片路径)以及NSData 对象

    尽管CIImage 关联着着UIImage的数据,但是它不是UIImage,可以把它理解成UIImage 的食谱(这句话我理解成CIImage 有存放UIImage 所需的所有信息,但是就是不用来直接显示图片,类似UIImage 信息记录的容器),想显示CIImage 最终还是要转成UIImage 然后再UIImageView 上显示。

    CIContext 和CIImage 对象是不可变对象,因此是线程安全的,可以在多个线程用GPU或者CPU 的CIContext(分析评估图像的一个上下文环境) 去渲染CIImage 对象,但是不能被CIFilter 用,因为CIFilter 是可变对象,意味着是线程不安全的,如果你的app 在多线程使用CIFilter ,那么最好在每个线程都创建一个CIFilter ,否则会遇到一些难以解释的情况。

    核心图像还提供自动调整方法。这些方法分析图像中常见的缺陷,并返回一组过滤器来纠正这些缺陷。滤镜是预先设置的值,通过改变肤色、饱和度、对比度和阴影的值来提高图像质量,并用于消除红眼或其他由闪光灯引起的伪影。

    CGImageRef:

    typedef struct CF_BRIDGED_TYPE(id)CGImage*CGImageRef; 系统文件定义

    这样可以理解CGImageRef 其实就是 CGImage 的结构体指针,那么CGImage 又是啥:

    直接看它官方文档定义解释:

    Summary

    The CoreGraphics image object this image was created from, if applicable.

    Declaration

    @property(nonatomic, readonly) CGImageRef CGImage;

    Discussion

    If this image was created using the initWithCGImage: or initWithContentsOfURL:initializer, this property’s value is the CGImageRef object that provides the image’s underlying image data. Otherwise, this property’s value is nil—in this case you can obtain a CoreGraphics image by rendering the image with the CIContextcreateCGImage:fromRect: method.

    大概意思就是 是核心绘图的image 对象,为了方便记忆,我直接理解成CoreGraphics层使用的图像对象的类。

    UIImage: 我觉得这货就不用解释了吧。

    总结一下:CIImage 存储了UIImage 的信息,但是它不是用来在上层UI 显示,而是转化成UIImage 来显示,

    CGImageRef 理解成 CGImage ,核心绘图那一层的图像类,

    UIImage 最贴近我们的图像处理类,

    它们三个可以互相转换:

        CIContext *context = [CIContext contextWithOptions:nil];

        qrImage 就是CIImage 的实例

        CGImageRef bitmapImage = [context createCGImage:qrImage fromRect:frame];

        UIImage *image = [UIImage imageWithCGImage:bitmapImage];

    分析完毕 搞定!!

    相关文章

      网友评论

          本文标题:一口气说明白 CIImage 、CGImageRef、UIIma

          本文链接:https://www.haomeiwen.com/subject/qhmhqhtx.html