我正在设计一款应用,我正在使用PaintCode创建一些图片。
使用该程序,我获得了我创建的每个图像的实际代码,从而允许我选择插入代码或使用实际图像。我想知道什么会消耗更少的内存,图像代码或实际的PNG?
我知道图像内存消耗是width x height x 4 = bytes in memory
但是我不知道代码生成的图像是更高效,更低内存效率还是中断?
鉴于屏幕分辨率不同,此决定尤为重要。在代码中创建图像并将其扩展到我想要的任何大小,而不是每次都去Photoshop时更容易。
答案 0 :(得分:4)
这个答案与其他答案不同,因为我的印象是图形上下文是最常见的目的地 - 您并不总是渲染到离散位图。所以出于典型绘图的目的:
我想知道什么会消耗更少的内存,图像代码或实际的PNG?
代码最有可能导致内存消耗减少。
我不知道代码生成的图像是更高效的内存,更低的内存效率还是收支平衡?
有很多变量,没有简单的公式可以告诉你哪个更适合任何给定的输入。如果它足够简单,可以用WYSIWYG创建,它可能会比代码小得多。
如果需要为基于矢量的渲染器创建中间光栅化或图层,则在添加第一个图层后,内存将大致相等。通常,一个/不应该将每个视图或图层(不是CALayer,btw)渲染到这些中间体,而是直接渲染到图形上下文。当所有视图直接呈现到图形上下文中时,它们会写入同一目标。
使用代码,您还可以使用其他一些可能会增加大量内存的变量。字体加载和缓存的影响可能非常高,如果您发现需要最小化内存消耗,您使用的代码生成器将不会检查如何实现最佳缓存和共享这些资源。
答案 1 :(得分:1)
如果你的目标是绘制图像,你应该尝试使用UIImageView
。它通常是将图像输入屏幕的最快和最便宜的方式,而且它相当灵活。
答案 2 :(得分:0)
除了照片之外,矢量图像的存储空间几乎总是小于光栅对应物。但是在内存中,如果你需要显示它们,它们都必须进行光栅化,因此它们将使用相同或更少的相同内存量。
但是,我对PaintCode的实用性持高度怀疑态度;一般来说,最好使用标准图像格式,如.svg或.eps,而不是非标准格式,如目标C中的域特定语言(DSL)。
答案 3 :(得分:-2)
如果最终图像尺寸(点尺寸)与显示尺寸(点尺寸)相同,则完全没有区别。最终在您的应用中显示的是100x100位图。无论从一开始就获得它们,它们的位数都是相同的。
内存被浪费的地方是从保持到比在界面中实际显示的图像大得多(点维度)。
如果我从我的应用套装中加载3MB PNG,将其缩小到100x100,并在界面中绘制,并放开原来的3MB PNG,结果完全相同的数量后备存储中的内存,好像我自己使用Core Graphics(这是PaintCode帮助你做的)从头开始绘制100X100图形上下文的内容。