web-dev-qa-db-ja.com

使用するBufferedImage画像タイプを決定する方法は?

Java BufferedImageクラスには、BufferedImageコンストラクターの引数として使用できるイメージタイプと呼ばれるクラス変数の長いリストがあります。

ただし、Java docsは、これらのイメージタイプが何に使用され、作成されるBufferedImageにどのように影響するかについて最小限の説明を行いました。

私の質問は:

  1. イメージタイプは、作成されるBufferedImageにどのように影響しますか?さまざまな色(赤、緑、青)を格納するために使用されるビット数とその透明度を制御しますか?

  2. 作成したいだけの場合は、どの画像タイプを使用する必要がありますか

    • 不透明な画像
    • 透明な画像
    • 半透明の画像

Java Docの説明を何度も読みましたが、どのように使用すればよいかわかりませんでした。たとえば、次のようになります。

TYPE_INT_BGR

WindowsまたはSolarisスタイルのBGRカラーモデルに対応する8ビットRGBカラーコンポーネントを備えた画像を表し、青、緑、および赤の色が整数ピクセルにパックされています。アルファはありません。画像にはDirectColorModelがあります。不透明でないアルファのデータがこのタイプの画像に保存されている場合、AlphaCompositeのドキュメントで説明されているように、カラーデータを事前に乗算されていない形式に調整し、アルファを破棄する必要があります。

10
user3437460

特定の要件(たとえば、メモリの節約、計算の節約、または特定のネイティブピクセル形式)がない限り、チャネルあたり8ビット、3チャネル+アルファを持つデフォルトのTYPE_INT_ARGBを使用してください。

チャネルあたり8ビットで作業しているときにアルファチャネルをスキップしても、すべてのピクセルがintにパックされるため、画像が占有するメモリの合計には影響しません。したがって、8ビットは破棄されます。

基本的にあなたは持っています:

  • TYPE_INT_ARGB、アルファチャネルでピクセルあたり4バイト
  • TYPE_INT_ARGB_PRE、ピクセルあたり4バイト、以前と同じですが、計算を節約するために、色はすでにピクセルのアルファで乗算されています
  • TYPE_INT_RGB、アルファチャネルなしでピクセルあたり4バイト
  • TYPE_USHORT_555_RGBおよびTYPE_USHORT_565_RGB、ピクセルあたり2バイト、はるかに少ない色、メモリの制約がない限り、使用する必要はありません

次に、チャネルが交換された同じ種類の形式がすべてあります(たとえば、BGRの代わりにRGB)。変換が少なくなるように、プラットフォームのネイティブを1つ選択する必要があります。

13
Jack