インスタンスRescaleOp
の明るさを変更するためにJavaクラスを使用しています。BufferedImage
アルファ チャネルは常に問題を引き起こします。以下の参照を参照してください -- @trashgodの印象的な Java2D の洞察に感謝します。
、アルファチャンネルRescaleOp
のインスタンスの明確な状態からのドキュメントは、単一要素コンストラクターでスケーリングされていません-私は、またはのいずれかとして解釈します。BufferedImage
float
float[1]
JDK6 からの引用: (強調を追加)
BufferedImages の場合、再スケーリングは色とアルファ コンポーネントに作用します。スケーリング定数のセットの数は 1 つである場合があり、その場合、同じ定数がすべての色 (ただし alpha は除く) コンポーネントに適用されます。それ以外の場合、スケーリング定数のセットの数は、ソース カラー コンポーネントの数と等しくなる可能性があります。この場合、アルファ コンポーネント(存在する場合) の再スケーリングは実行されません。どちらの場合にも当てはまらない場合、スケーリング定数のセットの数は、ソース カラー コンポーネントとアルファ コンポーネントの数に等しくなければなりません。この場合、すべてのカラー コンポーネントとアルファ コンポーネントが再スケーリングされます。
BufferedImage
typeの a の場合、BufferedImage.TYPE_INT_ARGB
4 つのチャネル (RGBA) があり、アルファが最後のチャネルです。(なぜ彼らはそれを呼び出さなかったBufferedImage.TYPE_INT_RGBA
のですか?) 私はRescaleOp
成功せずにこれらの変換を試みました: (仮定float scaleFactor = 1.25f
とfloat offset = 0.0f
)
new RescaleOp(scaleFactor, offset, (RenderingHints) null)
new RescaleOp(new float[] { scaleFactor },
new float[] { offset },
(RenderingHints) null)
new RescaleOp(new float[] { scaleFactor, scaleFactor, scaleFactor },
new float[] { offset, offset, offset },
(RenderingHints) null)
これだけが機能します:(仮定float alphaScaleFactor = 1.0f
)
new RescaleOp(new float[] { scaleFactor, scaleFactor, scaleFactor, alphaScaleFactor },
new float[] { offset, offset, offset, offset },
(RenderingHints) null)
- 公式のJDKドキュメントを誤解していますか?
- または、これは将来のJDKで修正できる/修正する必要があるバグですか?
- (実行時に) アルファ チャネル インデックスを見つける方法はありますか?
- 役立つ可能性のある方法:
ColorModel BufferedImage.getColorModel()
int ColorModel.getNumColorComponents()
boolean ColorModel.hasAlpha()
int ColorModel.getNumComponents()
(オプションのアルファチャンネルを含む場合があります)ColorSpace ColorModel.getColorSpace()
- 役立つ可能性のある方法:
お知らせ下さい。