どうすればこれを達成できますか?プログラムによる解決策(Objective-c)は素晴らしいですが、非プログラム的な解決策でも良いです。
私はpixelmatorを持っています->しかし、それはあなたにオプションを与えません。プレビューでもできないようです。
グーグルを試しましたが、今のところ解決策を見つけることができませんでした。これを行うために使用できる唯一のツールはTexturePackerですが、これによりスプライトシートが作成されます。
どうすればこれを達成できますか?プログラムによる解決策(Objective-c)は素晴らしいですが、非プログラム的な解決策でも良いです。
私はpixelmatorを持っています->しかし、それはあなたにオプションを与えません。プレビューでもできないようです。
グーグルを試しましたが、今のところ解決策を見つけることができませんでした。これを行うために使用できる唯一のツールはTexturePackerですが、これによりスプライトシートが作成されます。
libpngを使用して、PNG イメージを 3 バイト (8:8:8) RGB に変換できます。次に、RGB565 の 5:6:5 16 ビット カラー値にダウンサンプリングできます。r
、g
、およびがそれぞれ 8 ビット カラー (unsigned char 型で格納) の場合b
、16 ビット RGB565 値は次のようになります。
((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3)
切り刻む代わりに丸めることで、値がオーバーフローしないように注意して、これを少し改善できます。元の 8 ビット値がすべて等しい場合、緑の値を青と赤の値と等しくすることもできます。そうしないと、元は灰色だった色が、変換後に誤って色を帯びてしまう可能性があります。
PNGはRGB565パッキングをサポートしていません。いつでも画像にポスタライズを適用できます(プログラムで、ImageMagickで、または任意の画像エディタで)。これは、各チャネルの下位ビットを破棄することになります。PNGに保存する場合、(パレットを使用しない限り)チャネルあたり8ビットを節約できますが、それでもPNG圧縮により、サイズが大幅に縮小されます。
簡単な例:オリジナル:
XnViewで適用された32レベル(RGB555に相当)の単純なポスタライズ後
サイズは89KBから47KBになりますが、品質の低下はわずかです。グラデーションのある合成画像の場合、品質の低下がはるかに顕著になる可能性があります(バンディング)。
Quartz を使用してカラー RGB565 のビットマップ コンテキストを作成し、このコンテキストで PNG をペイントし、このビットマップ コンテキストをファイルに保存します。
常に正しいウィキペディアによると、唯一の 16 ビット PNG はグレースケール PNG です。 http://en.wikipedia.org/wiki/Portable_Network_Graphics
通常どおり 32 ビット (アルファ) または 24 ビット (アルファなし) の PNG をプロジェクトに追加し、Cocos2D でテクスチャ形式を設定すれば、すべて問題ありません。そのためのコードは次のとおりです。
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGB565];