5

苹果文档状态:

您应该避免创建尺寸大于 1024 x 1024 的 UIImage 对象。除了这样的图像会消耗大量内存之外,在 OpenGL ES 中将图像用作纹理或将图像绘制到视图或图层时,您可能会遇到问题。如果您正在执行基于代码的操作,例如通过将图像绘制到支持位图的图形上下文来调整大于 1024 x 1024 像素的图像大小,则此大小限制不适用。实际上,您可能需要以这种方式调整图像的大小(或将其分成几个较小的图像),以便将其绘制到您的视图之一。

我认为这意味着如果我们使用非方形图像,我们应该将它们分成更小的图像?是否有任何具体的文档或解释,或者是否有人有任何经验提示?

谢谢阅读。

4

1 回答 1

7

在 A5 之前的 iOS 设备上,最大的 OpenGL ES 纹理大小为 2048x2048(Apple 的文档在这方面说它是 1024x1024 是不正确的)。这意味着您不能拥有大于任一维度的图像。较新的 iOS 设备(iPhone 4S、iPad 2、iPad 3)的最大纹理尺寸为 4096x4096。

这并不意味着您必须拥有方形图像,只是图像的宽度或高度不得超过 2048(同样,在较新的设备上为 4096)。如果您尝试这样做,我相信您的图像只会呈现为黑色。

这曾经是所有不受 CATiledLayer 支持的 UIView 的限制,但我相信它们现在会自动平铺足够大的视图。如果您需要处理大于 2048x2048 的图像,则需要将其托管在 CATiledLayer 等中。

不过,内存警告值得关注。图像以未压缩的形式存储在内存中,无论其来源如何,因此您看到的是每张 2048x2048 图像 16,777,216 字节(RGBA 每像素 4 字节)。如果你不小心的话,这可以很快加起来。

于 2012-08-20T17:06:03.267 回答