10

我正在设计一个应用程序,并且正在使用PaintCode创建一些图像。

使用该程序,我获得了我创建的每个图像的实际代码,从而允许我选择插入代码或使用实际图像。我想知道什么会消耗更少的内存、图像代码或实际的 PNG?

我知道图像内存消耗是width x height x 4 = bytes in memory,但我不知道由代码生成的图像是内存效率更高、内存效率更低还是盈亏平衡?

考虑到不同的屏幕分辨率,这个决定尤其重要。在代码中创建图像并将其扩展为我想要的任何大小,而不是每次都去 Photoshop 更容易。

4

4 回答 4

4

这个答案与其他答案不同,因为我的印象是图形上下文是您最常见的目的地——您并不总是渲染到离散位图。因此,出于典型绘图的目的:

我想知道什么会消耗更少的内存、图像代码或实际的 PNG?

代码很可能会导致更少的内存消耗。

我不知道由代码生成的图像是内存效率更高、内存效率更低还是盈亏平衡?

有很多变量,没有简单的方程式可以告诉您对于任何给定的输入哪个更好。如果使用 WYSIWYG 创建足够简单,那么它可能会比代码小得多。

如果您需要为基于矢量的渲染器创建中间光栅化或图层,则添加第一层后内存将大致相等。通常,一个人确实/不应该将每个视图或层(不是 CALayer,顺便说一句)渲染到这些中间体,而是直接渲染到图形上下文中。当所有视图直接渲染到图形上下文中时,它们会写入同一个目的地。

使用代码,您还可以向其他一些变量敞开心扉,这些变量可能会增加大量内存。字体加载和缓存的效果可能非常高,如果您发现需要最小化内存消耗,您使用的代码生成器不会检查如何实现这些资源的最佳缓存和共享。

于 2013-05-13T22:34:46.563 回答
1

如果您的目标是绘制图像,则应尽可能尝试使用UIImageView。它通常是将图像显示到屏幕上的最快和最便宜的方式,并且相当灵活。

有人在这里解释得更好。 来源

于 2013-05-13T12:27:50.073 回答
0

矢量图像的存储空间几乎总是小于其对应的光栅图像,但照片除外。但是在内存中,如果您需要显示它们,它们都必须被光栅化,因此它们将使用或多或少相同数量的内存。

但是,我对 PaintCode 的实用性持高度怀疑态度。一般来说,最好使用标准图像格式,如 .svg 或 .eps,而不是非标准格式,如 Objective C 中的领域特定语言 (DSL)。

于 2013-05-13T12:29:22.340 回答
-3

只要最终图像尺寸(以点尺寸为单位)与显示尺寸(以点尺寸为单位)相同,则根本没有区别。例如,最终在您的应用程序中显示的是 100x100 位图。无论它们是如何获得的,它们的位数都是相同的。

内存被浪费的地方是保存比界面中实际显示的图像(点尺寸)大得多的图像。

如果我从我的应用程序包中加载一个 3MB PNG,将其缩小到 100x100,然后在界面中绘制它,然后放开原始的 3MB PNG,结果是后备存储中的内存量与我绘制的完全相同我自己使用 Core Graphics 从头开始​​创建 100X100 图形上下文的内容(这是 PaintCode 帮助您做的)。

于 2013-05-13T16:29:59.663 回答