iphone - 为什么游戏开发者要将许多图像放入一张大图像中?

标签 iphone ios performance image ipad

多年来,我经常问自己为什么游戏开发者将许多小图像放入大图像中。但不仅仅是游戏开发商这样做。我还记得旧的 Winamp MP3 播放器有一个用户界面设计文件,它只是一张包含许多小图像的巨大图像。

我还看到一些大型 javascript GUI 库(例如 ext.js)使用了这种技术。在 ext.js 中,有一个大图像包含许多小图像。

我注意到的一件事是:无论我的 PNG 图像有多小,Mac 上的 Finder 总是告诉我它至少消耗 4kb。如果你只有 10 个像素,这就太多了。

这样做是因为将 20 个或更多小图像存储到一个大图像中比使用 20 个单独的文件(每个文件可能都有自己的 header 和元数据)更节省内存吗?

是否是因为在文件系统上定位文件既昂贵又缓慢,因此只需定位一个大图像,然后将其加载到内存中,然后将其分割成较小的图像,速度会更快?

或者是懒惰,因为考虑这么多文件名很乏味?

这种技术有名称吗?这些小图像在运行时如何与大图像分离?

最佳答案

这称为spriting - 在不同的情况下这样做有不同的理由。

对于 Web 开发来说,这意味着只需要一个 Web 请求来获取图像,这比多个单独的请求要高效得多。由于单个请求而产生的开销更少,因此效率更高,并且最终的图像文件总体上可能比其他情况更小。

在其他场景中可能会看到相同的效果 - 例如,存储和加载单个大图像文件可能比存储和加载多个小图像文件更有效,具体取决于文件系统。这完全不考虑在原始“总文件大小”方面获得的任何效率,并且是由于每个文件的开销(目录条目、 block 大小等)造成的。这有点像 Web 场景中的“每个请求”开销,但由于因素略有不同。

关于iphone - 为什么游戏开发者要将许多图像放入一张大图像中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156160/

相关文章:

iphone - 在 textFieldDidEndEditing 中隐藏 UITextField

ruby - 在 Ruby 中复制文件时创建 md5 校验和

performance - 您如何计算 eBPF 探针的性能影响?

iPhone:IBAction 导致 "Unrecognized Selector Sent to Instance"错误

iphone - 为 iPhone 上的 Core Data 程序创建唯一 ID

ios - 如何在源代码管理下获取 Images.xcassets?

ios - 如何在 SWIFT 3 中对 UITableView 执行动态创建部分和单元格

r - 将 R 输出导出到 TXT 文件时如何修复损坏的格式?

ios - 从sqlite随机获取数据而不重复

iphone - 具有不同属性的 NSFetchRequest