【问题标题】:Is it more efficient to add shadows to an image programmatically or have them already on the image in Swift?以编程方式向图像添加阴影还是在 Swift 中已经在图像上添加阴影更有效?
【发布时间】:2020-09-16 00:35:04
【问题描述】:

我正在加载一个带有大约 6 个按钮的视图控制器,这些按钮已经定义了一个预设图像 - 我很好奇拥有一个将阴影添加到每个项目上的功能还是拥有一个更好(更快/更高效)的功能阴影已经在图像上,因此当图像分配给按钮时它已经存在。按钮现在在情节提要中设置了图像。

【问题讨论】:

    标签: ios swift uikit


    【解决方案1】:

    不可能事先给图像添加阴影。阴影必须使用乘法混合模式(目标与阴影相乘),但图像的其余部分需要使用 alpha 混合(目标乘以图像蒙版的倒数,并添加到图像中,相乘)通过它的面具)。

    您可以通过具有部分透明的阴影来模拟这一点,但这是一种不同的颜色:

    shadow * α + destination * (1 - α)

    而不是

    shadow * destination

    如果这看起来足够好,那么是的,它更有效。但这在今天(或昨天!)的硬件上无关紧要。

    【讨论】:

    • 设计师设计了带有阴影的图标(抱歉应该更清楚) - 例如相机图标上有阴影。但他们建议我使用非阴影图标并将阴影编程到它上面。只是不确定哪种方式更有效
    • 你应该告诉设计师你不能使用预乘 alpha 混合,因为它不允许烘焙阴影。
    【解决方案2】:

    简短:
    在能源方面,在图像上放置阴影会更有效,因为无论如何您都需要加载它,从而节省了额外的阴影绘制。

    之前看似无法理解的较长答案:
    不需要额外 CPU 周期的一切都更好。特别是在位图最终将占用相同数量的内存的情况下。如果要为图像加载的数据要大得多,情况会有所不同。
    这就是为什么 watchOS 应用使用预先计算好的动画图像,而不是在运行时绘制动画的原因。

    【讨论】:

    • 那么你是说在视图加载时对阴影进行编程更好?
    • 这更像是一种“GPU 周期”情况。
    • 没有。 ViewDidLoad 很好,因为它只运行一次,您不需要手动响应动态视图更改。能源方面,在图像上放置阴影会更有效,因为无论如何您都需要加载它,从而节省了额外的阴影绘图。那是你的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多