什么消耗更less的内存实际图像或绘制图像?

我正在devise一个应用程序,我正在使用PaintCode创build一些图像。

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

我知道一个图像内存消耗是width x height x 4 = bytes in memory但我不知道是否由代码生成的图像是更高的内存效率,更less的内存效率或rest?

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

这个答案不同于其他的答案,因为我有一个印象,graphics上下文是你最常见的目的地 – 你并不总是渲染到一个离散的位图。 所以对于典型绘图的目的:

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

代码最有可能导致内存消耗更less。

我不知道由代码生成的图像是更有效的内存,更less的内存效率或rest?

有很多变数,没有简单的方程来告诉你哪一个input更好。 如果用WYSIWYG创build简单的话,它可能会比代码小得多。

如果您需要为基于vector的渲染器创build中间栅格化或图层,则添加第一个图层后,内存将大致相等。 通常,应该/不应该渲染每个视图或图层(而不是CALayer,btw)到这些中间体,而是直接渲染到graphics上下文中 。 当所有视图直接渲染到graphics上下文中时,它们将写入相同的目标。

有了代码,你也可以打开其他一些可能会增加大量内存的variables。 字体加载和caching的效果可能相当高,如果您发现需要最大限度地减less内存消耗,您使用的代码生成器将不会检查如何实现最佳caching和共享这些资源。

如果你的目标是绘制图像,你应该尽可能使用UIImageView 。 这通常是最快和最便宜的方式来获得图像到屏幕上,而且是相当灵活的。

有人在这里更好地解释它。 资源

除了照片之外,vector图像在存储上几乎总是比光栅图像小。 在内存中,如果你需要显示它们,它们都必须被光栅化,所以它们会使用或多或less相同的内存量。

但是,我非常怀疑PaintCode的有用性。 通常最好使用标准的图像格式,例如.svg或.eps,而不是像目标C中的域标准语言(DSL)这样的非标准格式。

如果最终的图像尺寸(点尺寸)与显示尺寸(点尺寸)相同,则完全没有区别。 最终在您的应用程序中显示的是100×100位图。 无论怎样获得,这些位数都是相同的。

内存被浪费的地方是从一个更大的图像(点尺寸)比它实际显示在界面上。

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