如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用它?

Posted

技术标签:

【中文标题】如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用它?【英文标题】:How do I convert a PNG with alpha to RGBA4444 for using it in SpriteKit SKTexture? 【发布时间】:2016-12-12 10:20:50 【问题描述】:

我有一堆透明 PNG,我想在带有 SKTextures 的 SKSpriteNode 动画中使用它们。我需要通过将纹理质量从RGBA8888 降低到RGBA4444 来调整SKTextures 的内存使用情况。

如何使用RGBA4444 纹理格式初始化SKTexture

编辑: ios Swift Game Development Cookbook:Simple Solutions for Game Development 建议 SKTexture 将支持 PVRTC 文件,如下所示:

但是,我无法让 SKSpriteNode 显示以这种方式生成的纹理。

【问题讨论】:

见***.com/questions/39106245/… 【参考方案1】:

我刚刚尝试过,在 Xcode 8 中,here 中描述的 Output Texture Atlas 选项在 Build Settings 中不再可用。

我怀疑(但我可能是错的)控件现在已移到 Compression 内,如下图所示。

【讨论】:

我想让SKTexture 压缩纹理数据在内存中的唯一选择是使用纹理图集?我没有找到任何指向纹理压缩的 SKTexture 初始化选项。 @MarkusRautopuro:可能是的。但是,您也应该使用 Sprite Atlas 来实现更快的 CPU-GPU 通信。 问题是我有很大的PNG文件,而且很多。唯一的选择是以编程方式创建精灵图集。但是,我没有找到将压缩设置为SKTextureAtlas 的方法。【参考方案2】:

我通过使用TexturePacker 生成纹理图集 (.atlasc) 文件来规避此问题。使用 TexturePacker,您可以设置调整压缩,然后访问项目中的纹理图集,如下所示:

let atlas = SKTextureAtlas(named: "Atlas") // Atlas.atlasc in your project
let texture = atlas.textureNamed("original_texture_001.png")

【讨论】:

MoDJ 在这个答案***.com/a/39928198/2155985 中指出,Sprite Kit 中的所有纹理都将作为 RGBA8888 加载到内存中。我也需要确认一下。

以上是关于如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用它?的主要内容,如果未能解决你的问题,请参考以下文章

使用 alpha 混合将 ARBG 转换为 RGB

imagemagick 将 RGB PNG 转换为 CMYK PDF

Python如何将RGB图像转换为Pytho灰度图像?

将 RGBA 转换为 HEX

从两个文件 (RGB+Alpha) 创建 DDS(DXT5)。命令行工具需要

将 RGBA 颜色转换为 RGB