2009-06-20 5 views
6

.png画像をiPhone上の圧縮されたPVRTCテクスチャに変換する標準的なメカニズムや既知のライブラリがあります(OS Xの標準ツールを使用した開発ではありません)。.pngをPVRTC *に変換する

私のアプリケーションには数多くの.pngテクスチャがありますが、スワップが問題です。アプリケーションの起動時(またはアプリケーションの最初の負荷時)に利用可能なメモリが少ない場合は、デバイス上に.pngのPVRTCバリアントを作成したいと思います。

+0

私はバーニーの答えを今のところ正しいものにしました。誰かが実際に画像フォーマットを変換する方法について具体的な詳細を持っているなら、私は答えを切り替えます。 – bradhouse

答えて

2

PVRTCの画像を手動で作成する方法に関するネット上の情報は見当たりませんでした。私の知る限りでは、iPhoneに組み込まれているサポートはありません(そして、PVRTCファイル)。

ほとんどのアプリケーションでは、両方のバージョンのファイルを含めるか構築するのはほとんど意味がありません。最適な条件下では、PVRTCバージョンはPNGバージョンと実質的に区別できないはずであり、ビデオメモリに直接ストリーミングするために最適化されたファイルの「プリプロセス」バージョンです。

特定の制限されたメモリ状況だけでなく、すべてのユーザーのメモリの節約と品質のバランスを取るためにイメージを最適にパッケージ化する方法については、すべてのイメージを調べて決定するのが一般的です。

(これは冗長な知識である場合の謝罪を)考慮すべきいくつかのこと:前処理がブレンドされたエッジに沿って見苦しいアーティファクトを引き起こすことができるよう

  1. PVRTCファイルは、複雑なアルファブレンドされた画像に問題があることができます。
  2. Opaque PNGファイルのアルファチャンネルを元の画像で削除する必要があります(メモリとブレンディングのオーバーヘッドを節約します)。
  3. 制限された色の範囲の画像の場合、イメージをPNG32からPNG16またはPNG8に縮小して、ディスクにメモリを節約します。
  4. OpenGLベースのプログラムの場合は、565や4444などの代替のピクセル形式をサポートするTexture2Dの拡張バージョン(Cocos2Dなど)を使用することを検討してください。これにより、画像への影響を最小限に抑えてグラフィックスカードのオーバーヘッドを大幅に削減できます元の画像の色のバランスに対応するピクセルフォーマットを注意深く選択することによって、高品質である。
  5. さらに、OpenGLベースのプログラムの場合は、個々の画像(320x480)で背景を避けてください。その結果、それぞれ512x512のテクスチャがメモリに格納されます。画像をより小さな部分に分割するか、画像を512x512にして余分なスペースを他の画像で埋めて、1つのテクスチャだけを読み込む必要があります。
  6. すべての場合と同様に、最大のイメージに焦点を当てて、まずは最大の打撃を得る。

アプリケーションがシステムアプリケーション以外で実行される唯一のものであるため、実際のメモリオーバーヘッドは限られた量の「ディスク」スペースになります。すべての画像ファイルの2番目のコピーを作成すると、実際には手伝ってくれるのではなく、実際に作業しています。

バーニー

+0

返事をありがとう。私はすでにこれらの点に精通していました(私もCocos2Dを使用しています)。私はすでに1024x1024のテクスチャスプライトシートをいくつか使用しています。私は代替のピクセルフォーマットとPVRTCを試しました。通常の使用のために、私はUIの品質を私が許容したい以上に低下させます。しかし、実際にメモリが足りない状況(例えば、私のアプリが空き容量が10MB未満で起動している場所)では、劣化した品質モードで実行したかったのです。 – bradhouse

0

これはあなたに役立つことを前提にしています。画像を一度参照すると、UIImageに読み込まれます。好きなように、iPhoneはあなたのPNGをキャッシュし始めます。私の意見では、それらを圧縮することは、あなたがここで探しているものを達成するのにうまく役立たないでしょう。

+0

PVRTCがより適切な場合は、.pngをロードするつもりはありませんでした。まずアプリケーションが実行したいのは、利用可能なメモリを調べ、残りのアプリケーションの実行に使用する正しいフォーマットを選択することです。私はちょうど元のダウンロードの同じイメージの2つの変種を出荷したくありません。 – bradhouse

0

あなたはIOSにPVRする画像を圧縮したい場合は、OpenSceneGraphプラグインPVRを考慮することができる:

http://www.openscenegraph.org/projects/osg/browser/OpenSceneGraph/branches/OpenSceneGraph-3.0/src/osgPlugins/pvr/ReaderWriterPVR.cpp

+0

多分私は何かが欠けているかもしれませんが、私はそのファイル内のコンプレッサーを見ることができません。 –

+0

はい、申し訳ありませんが、別のリーダーと交換しました。ここにはコンプレッサーがありません。 –

関連する問題