少しオフトピックから始めましょう
問題は、Androidにも3色だけのフォーマットがないことです。RGB_565のみ。これは、画像の品質を低下させ、ディザリング機能を有効にする必要があると彼らは言っています。
その問題の理由は、実際にはAndroid固有ではありません。それは、画像を描画する際のパフォーマンスに関するものです。pixeldataが132ビットメモリセルに正確に収まる場合、最高のパフォーマンスが得られます。
したがって、最も明白な優れたピクセル形式は、ARGB_8888
正確に32ビット(アルファの場合はカラー8の場合は24)を使用するフォーマットです。描画中は、画像データをループする以外に何もする必要はなく、読み取った各セルを直接描画できます。唯一の欠点は、そのような画像を処理するために必要なメモリです。画像がメモリ内にある場合と、グラフィックハードウェアがより多くのデータを転送する必要があるため、画像を表示している場合の両方です。
2番目に良いオプションは、複数のピクセルが1つのセルに収まるフォーマットを使用することです。32ビットで2ピクセルを使用すると、残りのピクセルあたり16ビットがあり、16ビットを使用する形式の1つは565形式です。5ビットの赤、6ビットの緑、5ビットの青。これを描画している間も、メモリーセルを個別に操作できます。必要なのは、1つのセルを部分的に分割することだけです。画像に必要なメモリサイズが小さいため、32ビットカラーを使用するよりも描画がさらに高速になる場合があります。アンドロイドメモリの初めにはるかに大きな問題だったので、彼らはこのフォーマットをデフォルトとして選択しました。
そして、フォーマットの最悪のカテゴリーは、ピクセルがそれらのセルに収まらないものです。3色だけを使用すると、24ビットになり、4つのケースのうち3つで2つのセルに分散する必要があります。たとえば、2番目のピクセルは、最初のセルの残りの8ビットと次のセルの最初の16ビットを使用します。24ビットカラーでの作業に必要な余分な作業は非常に大きいため、使用されません。また、画像を描画するときは、通常、ある時点でアルファがあります。そうでない場合は、単に32ビットを使用しますが、アルファビットは無視します。
したがって、16ビットアプローチは見苦しく、24ビットアプローチは意味がありません。また、Androidのメモリ制限は以前ほど厳しくなく、ハードウェアが高速化されたため、Androidはデフォルトを32ビットに切り替えました(詳細については、http://www.curious-creature.org/2010/12/を参照してください)。 08 / bitmap-quality-banding-and-dithering /)
あなたの本当の質問に戻る
APIを使用して、特定の画像ファイル(pngファイル)に透明度があるかどうかを、その中のすべてのピクセルをチェックせずにチェックする方法はありますか?
知らない。ただし、JPEG画像はアルファをサポートしておらず、PNG画像は通常アルファを備えています。ほとんどの場合、ファイル拡張子を悪用して正しく取得することができます。
ただし、これらすべてに煩わされることなく、ビットマップの効率的な表示ARGB_8888
に関するAndroidトレーニングドキュメントで詳しく説明されている優れた画像読み込みテクニックを使用して適用することをお勧めします。
人々がメモリの問題に遭遇する理由は、通常、現在表示されているよりもはるかに多くの画像がメモリにロードされているか、電話の小さな画面に表示できない巨大な画像を使用しているためです。そして私の意見では、画質を下げるためにコードを複雑にするよりも、優れたメモリ管理を追加する方が理にかなっています。