Java BufferedImageクラスには、BufferedImageコンストラクターの引数として使用できるイメージタイプと呼ばれるクラス変数の長いリストがあります。
ただし、Java docsは、これらのイメージタイプが何に使用され、作成されるBufferedImageにどのように影響するかについて最小限の説明を行いました。
私の質問は:
イメージタイプは、作成されるBufferedImageにどのように影響しますか?さまざまな色(赤、緑、青)を格納するために使用されるビット数とその透明度を制御しますか?
作成したいだけの場合は、どの画像タイプを使用する必要がありますか
Java Docの説明を何度も読みましたが、どのように使用すればよいかわかりませんでした。たとえば、次のようになります。
TYPE_INT_BGR
WindowsまたはSolarisスタイルのBGRカラーモデルに対応する8ビットRGBカラーコンポーネントを備えた画像を表し、青、緑、および赤の色が整数ピクセルにパックされています。アルファはありません。画像にはDirectColorModelがあります。不透明でないアルファのデータがこのタイプの画像に保存されている場合、AlphaCompositeのドキュメントで説明されているように、カラーデータを事前に乗算されていない形式に調整し、アルファを破棄する必要があります。
特定の要件(たとえば、メモリの節約、計算の節約、または特定のネイティブピクセル形式)がない限り、チャネルあたり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つ選択する必要があります。