2015-09-05 7 views
5

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

しかし、Javaのドキュメントでは、これらのイメージタイプが使用されていることと、作成されるBufferedImageにどのような影響を与えるかを説明していません。

私の質問は:

  1. どのように画像の種類を作成するのBufferedImageに影響を与えるのでしょうか?さまざまな色(赤、緑、青)と透明度を保存するために使用するビット数を制御しますか?私たちは、不透明な画像

    • 透明画像
    • 半透明の画像を作成したい場合は、私たちが使用する画像タイプ

私はJava Docの説明を読んだ何度も使用しなければならないのは分かりませんでした。例えば、これ:

TYPE_INT_BGR

は、色青、緑と、WindowsスタイルまたはSolarisスタイルのBGRカラーモデルに対応し、8ビットRGB色成分によるイメージを表し赤は整数ピクセルにパックされます。アルファはありません。イメージにはDirectColorModelがあります。不透明でないアルファを持つデータがこのタイプの画像に格納されている場合、アルファコンポジットのドキュメントに記載されているように、カラーデータをプリミティブではないフォームに調整し、アルファを破棄する必要があります。あなたが(例えば、メモリを節約するか、計算を保存したり、特定のネイティブピクセル形式)特定の要件がない限り

+0

半透明のイメージとは何ですか?透明なイメージとはどのように違いますか? –

+0

@AndyTurner半透明が全体画像の不透明度を調整している間に、画像の一部を透明にすることについてどこか読んでいたことを思い出します。たとえば、gifファイルでは透過性は許可されますが、透過性は許可されず、pngファイルでは両方がサポートされます。これは、異なる画像タイプを使用する必要がある場合の例です。いいえ? – user3437460

答えて

6

だけでチャンネルあたり8ビット、3チャンネル+アルファを持つデフォルトTYPE_INT_ARGBで行きます。

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

基本的にあなたが持っている:前と同じアルファチャンネル

  • TYPE_INT_ARGB_PREとピクセルあたり

    • TYPE_INT_ARGB、4バイト、ピクセルあたり4つのバイトが、色がすでに計算を節約するためにピクセルのアルファで乗算されています
    • TYPE_INT_RGB
    • 、アルファチャンネル無しピクセル当たり4バイトピクセル当たり
    • TYPE_USHORT_555_RGBTYPE_USHORT_565_RGB、2バイト、はるかに少ない色は、それがUNL使用する必要はありませんあなたにはメモリの制約があります。

    スワップされたチャンネルを持つすべての種類のフォーマットがあります。 RGBの代わりにBGR)。プラットフォームのネイティブを選択して、変換を少なくする必要があります。

  • +0

    ご返信ありがとうございます。だから私はあなたが言ったようないくつかの他の特別なニーズを持っていない限り、不透明、透明&半透明の画像には 'TYPE_InT_ARGB'を使うことができますか? – user3437460

    +0

    はい、半透明の画像自体は半透明ではありません(すべてのピクセルにアルファがある場合を除く)。デスティネーションフレームバッファ上でアルファブレンディングを使用してイメージを描画することにより、半透明を得ることができます。 – Jack

    +0

    そして、画像タイプはアルファチャンネルをサポートしているので、透明性をサポートできるようになります。これが私の最後の質問です! :D – user3437460

    関連する問題