objective-c - 如何将 32 位 PNG 转换为 RGB565?

我怎样才能做到这一点?程序化解决方案 (Objective-c) 很棒,但即使是非程序化解决方案也很好。

我有 pixelmator -> 但这并没有给你选项。我似乎也无法使用预览来做到这一点。

我试过谷歌搜索,但到目前为止还没有找到解决方案。我能够用来执行此操作的唯一工具是 TexturePacker,但它会创建一个 Sprite 表。

最佳答案

您可以使用 libpng将 PNG 图像转换为三字节 (8:8:8) RGB。然后您可以下采样到 RGB565 的 5:6:5 16 位颜色值。如果rgb分别为8位颜色(以unsigned char类型存储),则16位RGB565值为:

((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3)

您可以通过四舍五入而不是切碎来改进这一点,注意不要溢出值。当原始 8 位值都相等时,您还可以强制绿色值等于蓝色和红色值。否则,最初为灰色的颜色可能会在转换后无意中呈现出颜色。

https://stackoverflow.com/questions/10118374/

相关文章:

jsf - 命令按钮操作不起作用

c++builder - 如何使用 C++ Builder 打开带有按钮的新表单?

r - 在 R 中,如何在运行具有大量变量的多元回归后仅提取重要变量

django - 来自模型的初始表单数据 - Django

macos - 在 Mac OS X 中使用命令行杀死 "loginwindow"进程

php - 解析 SOAP 负载的 XML 错误 : Reserved XML Name

math - alpha 混合如何在数学上逐个像素地工作?

sql - 如何根据 Oracle SQL 中的日期进行过滤

php - 检查多个字符串是否为空

mysql - SQL select count for more than one like