代码之家  ›  专栏  ›  技术社区  ›  Bradley Dwyer

在iPhone上将.png转换为pvrtc*

  •  6
  • Bradley Dwyer  · 技术社区  · 17 年前

    有没有一个标准的机制或已知的库可以在iPhone上将.png图像转换为压缩的pvrtc纹理(而不是在使用OS X上的标准工具进行开发的过程中)。

    我的应用程序中有许多.png纹理,但是交换是一个问题。我想在设备上创建.pngs的pvrtc变体,如果在应用程序启动时可用内存不足(或者可能在应用程序的第一次加载时)。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Barney Mattox    17 年前

    我还没有在网上看到任何关于如何手动构建pvrtc图像的信息,据我所知,iPhone内置的支持是不存在的(而且不需要读取pvrtc文件)。

    对于大多数应用程序,包含或构造两个版本的文件几乎没有意义。在最佳条件下,pvrtc版本应该与png版本几乎不可区分,实际上只是为直接流到视频内存而优化的文件的“预处理”版本。

    一般来说,最好浏览所有图像,并决定如何最好地打包图像,以平衡所有用户的内存节约和质量,而不仅仅是在特定的受限内存情况下。

    需要考虑的一些事情(如果这是多余的知识,请道歉):

    1. pvrtc文件可能与复杂的alpha混合图像存在问题,因为预处理可能会导致沿混合边缘出现难看的瑕疵。
    2. 不透明的PNG文件应该在原始图像中删除其alpha通道(节省内存并混合开销)。
    3. 对于颜色范围有限的图像,请将图像从png32减少到png16或png8以将内存保存在磁盘上。
    4. 如果这是基于OpenGL的程序,请考虑使用支持565和4444等可选像素格式的增强版纹理2d(如Cocos2d)。通过仔细选择与原始图像中颜色平衡相对应的像素格式,这可以大大降低图形卡的开销,对图像质量的影响最小。
    5. 此外,对于基于OpenGL的程序,避免对背景使用单独的图像(320x480),因为这将导致每个图像在内存中具有512x512纹理。将图像分割成更小的部分,或者制作图像512x512,并用其他图像填充额外的空间,以便只需要加载一个纹理。
    6. 像所有的事情一样,首先关注最大的图像,以获得最大的回报。

    同样值得注意的是,由于您的应用程序将是唯一运行的东西(而不是系统应用程序),所以真正的内存开销将是有限的“磁盘”空间。制作所有图像文件的第二个副本实际上是对您不利的,而不是对您有所帮助。

    巴尼

        2
  •  0
  •   Alex Taylor    17 年前

    我会小心的假设这会帮助你。一旦你引用了这些图片一次,即将它们加载到uiimage中,不管你喜欢与否,iPhone都会开始缓存你的PNG。在我看来,压缩它们并不能很好地帮助你实现你在这里想要的目标。

        3
  •  0
  •   François Lagunas    14 年前