gpt4 book ai didi

iphone - 图像与核心显卡

转载 作者:行者123 更新时间:2023-12-03 18:17:47 24 4
gpt4 key购买 nike

在iOS设备上,什么情况下使用Core Graphics绘制图形比使用图像文件更好?

这样做在资源方面有什么优势?

最佳答案

图像与核心图形是一个直接的区别。渲染屏幕外/屏幕上图形的方法更加复杂,您需要使用仪器来找出真正发生的情况。我试图在这里提供一个概述,但这个答案可能需要知识渊博的人进行一些改进。

GPU 与 CPU 渲染

图形始终由 GPU 渲染在屏幕上。然而,它们可以由 GPU 或 CPU 生成,并发生在用户代码中或称为“渲染服务器”的单独进程中。以下是概述:

CPU,用户代码:

  • 核心图形和核心文本
  • drawRect()。结果通常会被缓存。

GPU、渲染服务器:

  • CALayer 的 shouldRasterize 设置为 YES。这会创建图层和子图层的缓存。

GPU,渲染服务器,非常慢:

  • CALayer 使用 mask (setMasksToBounds) 和动态阴影 (setShadow*)。
  • 组不透明度 (UIViewGroupOpacity)。

GPU,速度快:

  • 从 PNG 文件创建图像。可拉伸(stretch)图像的拉伸(stretch)也只能通过 GPU 进行。

请注意,缓存仅在重用缓存时才有用。如果立即丢弃它会损害性能。例如,内容简单拉伸(stretch)的缓存动画可以缓存并重用,但内容更改的缓存动画性能会很差。

位图与绘图

图像文件通常速度更快。

  • 可以使用 aggressive caching 将图像文件提前下载到磁盘。
  • 后台可以从磁盘读取图片并解压。
  • 如果您使用 imageNamed: 而不是 initWithData:,则图像可以缓存在内存中。

离屏绘图需要更多工作,但可以让您实现更多目标。

  • 您可以在不损失质量的情况下制作复杂图形的动画,因为图形会在每一帧上重写。
  • 您可以使用 i18n 即时创建图形。
  • 如果不需要,您应该禁用隐式 Core Graphics 动画。示例:带有圆角的 UIView(您只需要圆角,而不是动画)。
  • 绘图可能非常复杂,您需要使用 Instruments 来查看时间的去向。
  • 除非您使用 mask 、阴影、边缘抗锯齿或组不透明度,否则使用drawRect进行的绘图可能会被缓存。您可以调用 -[CALayer setShouldRasterize:YES]-[CALayer setRasterizationScale:] 请求缓存。

可拉伸(stretch)图像,无论是从图像文件读取还是通过绘图生成,都使用更少的内存。拉伸(stretch)对于 GPU 来说是一项成本低廉的操作。

<小时/>

只有当性能不够时,性能才会成为问题。除非另有要求,否则请使用编码速度更快的东西。最快的程序就是最先进入市场的程序。

一些有趣的阅读:

关于iphone - 图像与核心显卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com