我怎样才能做到这一点?程序化解决方案(Objective-c)很棒,但即使是非程序性解决方案也很好。
我有pixelmator - >但这并没有给你选择。我似乎无法用预览做到这一点。
我尝试使用谷歌搜索,但到目前为止还没有找到解决方案。我能够用来做这个的唯一工具是TexturePacker,但它会创建一个精灵表。
答案 0 :(得分:4)
您可以使用libpng将PNG图像转换为三字节(8:8:8)RGB。然后,您可以下采样到RGB565的5:6:5 16位颜色值。如果r
,g
和b
是相应的8位颜色(存储在无符号字符类型中),则16位RGB565值为:
((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3)
你可以通过舍入而不是斩波来改善这一点,小心不要溢出值。当原始8位值中的绿色值全部相等时,您也可以强制绿色值等于蓝色和红色值。否则,转换后可能会使原本灰色的颜色无意中呈现颜色。
答案 1 :(得分:2)
使用Quartz创建颜色为RGB565的位图上下文,在此上下文中绘制PNG,将此位图上下文保存到文件中。
答案 2 :(得分:2)
PNG不支持RGB565打包。您始终可以将 posterize 应用于图像(以编程方式或使用ImageMagick或使用任何图像编辑器),这相当于丢弃每个通道中的较低有效位。保存到PNG时,每个通道仍然会保存8位(除非您使用调色板),但即使这样,由于PNG压缩,您的尺寸也会明显减小。
一个简单的例子:原文:
在使用XnView
应用32级(相当于RGB555)的简单海报之后
大小从89KB到47KB,质量损失很小。 对于具有渐变的合成图像,质量损失可能更加明显(条带化)。
答案 3 :(得分:2)
我从纹理打包器的创建者那里得到了这个答案:
you can do it from command line - see
http://www.texturepacker.com/uncategorized/batch-converting-images-to-pvr-or-pvr-ccz/
Just adjust the opt and set output to .png instead of pvr.ccz
Make sure that you do not overwrite your source images.
答案 4 :(得分:0)
根据维基百科,总是正确的,唯一的16位PNG是灰度PNG。 http://en.wikipedia.org/wiki/Portable_Network_Graphics
如果您只是正常地将32位(alpha)或24位(无alpha)PNG添加到项目中,然后在Cocos2D中设置纹理格式,那么一切都应该没问题。代码是:
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGB565];