【问题标题】:image size for UIImages, 1024 x 1024?UIImages 的图像大小,1024 x 1024?
【发布时间】:2012-08-15 10:21:38
【问题描述】:

Apples 文档状态:

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

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

感谢阅读。

【问题讨论】:

  • 请注意,对于 iPad 3 图形,由于屏幕的 2048x1536 物理像素大小,这不再适用。
  • 尽管 iPad 3 的屏幕尺寸很大,但在图块上进行图像处理仍然是一个非常好的策略。我在一个可以在 Mac 上执行此操作的系统上工作,我们有很多 VRAM 并且对纹理大小有非常高的限制。但无论如何我们都会平铺一些东西。它也与图像是否为正方形无关。只是大小。那你想做什么?如果我们不知道您想要完成什么,我们很难给出建议。

标签: ios xcode image image-processing uiimage


【解决方案1】:

在 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 字节)。如果你不小心的话,这可能会很快加起来。

【讨论】:

  • 您从哪里获得这些信息?我想在 UIImageView 中放置 640 像素 x 1136 像素(320 点 x 568 点,比例 = 2) UIImage 用作 4 英寸视网膜 iPhone 屏幕的全屏背景,但 1136 像素尺寸是仅比记录的 1024 像素限制大一点。如果真正的限制是 2048 像素,我就不必将 UIImage 和 UIImageView 一分为二。
  • @user2135004 - 我测试了各种尺寸,对于旧设备,硬截止在任一维度上似乎都是 2048 像素(新设备是 4096)。较小的视图可以正常工作,但是如果没有某种平铺层的支持,像素大小大于此的视图会变黑。这直接对应于最大纹理大小,您可以通过 OpenGL ES 查询。
  • 您可以在 OpenGL 运行时使用 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize) 之类的方式查询设备的最大纹理大小。此外,从 iOS 10 开始,UIImage documentation 似乎不再提及任何大小限制。
猜你喜欢
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 2021-03-24
  • 2013-12-28
  • 2014-08-31
  • 2014-08-23
相关资源
最近更新 更多