美文网首页
Core Image编程指南翻译七(获得最佳性能)

Core Image编程指南翻译七(获得最佳性能)

作者: 酒茶白开水 | 来源:发表于2019-01-15 11:46 被阅读0次

    Core Image提供了许多用于创建图像,上下文和渲染内容的选项。您如何选择完成任务取决于:

    • 您的应用需要多长时间执行一项任务
    • 您的应用是否适用于静态或视频图像
    • 是否需要支持实时处理或分析
    • 色彩保真度对您的用户有多重要
      您应该阅读性能最佳实践,以确保您的应用程序尽可能高效地运行。

    性能最佳实践

    遵循这些做法以获得最佳性能:

    • CIContext每次渲染时都不要创建对象。

    上下文存储了大量的状态信息; 重用它们更有效。

    • 评估您的应用是否需要色彩管理。除非您需要,否则不要使用它。看看你的应用需要色彩管理吗?
    • 在CIImage使用GPU上下文渲染对象时避免使用Core Animation动画。

    如果您需要同时使用两者,则可以将两者都设置为使用CPU。

    • 确保图像不超过CPU和GPU限制。

    CIContext对象的图像大小限制因Core Image是使用CPU还是GPU而异。使用方法inputImageMaximumSize和检查限制outputImageMaximumSize。

    • 尽可能使用较小的图像。

    性能随输出像素数量而变化。您可以将Core Image渲染为较小的视图,纹理或帧缓冲区。允许Core Animation升级以显示大小。

    • 使用Core Graphics或Image I / O函数进行裁剪或缩减采样,例如函数CGImageCreateWithImageInRect或CGImageSourceCreateThumbnailAtIndex。

    • 在UIImageView类的工作最好的静态图像。
      如果您的应用需要获得最佳性能,请使用较低级别的API。

    • 避免CPU和GPU之间不必要的纹理传输。

    • 在应用内容比例因子之前,渲染到与源图像大小相同的矩形。

    • 考虑使用更简单的过滤器,它可以产生类似于算法过滤器的结果。

    例如,CIColorCube可以产生类似于CISepiaTone的输出,并且可以更有效地完成。

    • 利用iOS 6.0及更高版本中对YUV图像的支持。
      相机像素缓冲区本身就是YUV,但大多数图像处理算法都需要RBGA数据。在两者之间进行转换需要付出代价。Core Image支持从CVPixelBuffer对象读取YUB 并应用适当的颜色转换。
    options = @ {(id)kCVPixelBufferPixelFormatTypeKey:
        @(kCVPixelFormatType_420YpCbCr88iPlanarFullRange)};
    

    您的应用需要色彩管理吗?

    默认情况下,Core Image会将所有滤镜应用于浅色线性色彩空间。这提供了最准确和一致的结果。

    转换为sRGB和从sRGB转换会增加过滤器的复杂性,并要求Core Image应用这些等式:

    rgb = mix(rgb.0.0774,pow(rgb * 0.9479 + 0.05213,2.4),step(0.04045,rgb))
    rgb = mix(rgb12.92,pow(rgb * 0.4167)* 1.055  -  0.055,step(0.00313,rgb))
    

    在以下情况下考虑禁用颜色管理

    • 您的应用需要绝对最高的性能。
    • 夸大的操作后,用户不会注意到质量差异。

    要禁用颜色管理,请将kCIImageColorSpace密钥设置为null。如果您正在使用EAGL上下文,还要在创建EAGL上下文时将上下文颜色空间设置为null。请参阅使用CoreImage上下文构建自己的工作流。

    相关文章

      网友评论

          本文标题:Core Image编程指南翻译七(获得最佳性能)

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