2

私はRescaleOp画像を明るくするために使用していますが、私の問題は、黒 (0,0,0) と白 (255,255,255) を使用すると、まったく同じに戻ることです。

理由は推測できますが、0(黒の RGB 値) x 1.3 (明るさ係数) = 0 であり、白のピクセルは 255 を超えることはできないため、同じままであり、白のピクセルが同じままであることに満足しています。

一方、画像を暗くすると、白いピクセルが暗くなり、255(白い RGB 値) * .8 (明るさ係数) =/= 255 となり、黒いピクセルは 255 よりも低くならないため、望ましい結果が得られます。 0なのでそのままです。

BufferedImageOp で白いピクセルが暗くなるのと同じように、黒いピクセルを明るくするにはどうすればよいですか?

これがリスケール操作です

        float scale = 1.3f;//This is the aformentioned "Brightness Factor"
        RescaleOp op = new RescaleOp(new float[] {scale,scale,scale, 1}, new float[4], null);
        BufferedImage brightImage = op.filter(...);

現在の回答に感謝しますが、それらを私の問題に適用する方法がわかりません。

4

3 に答える 3

2

代わりに最大値から移動する必要があります。輝度係数が何を表すかは明らかではないため、ここで試行錯誤の調査を行う必要があるでしょう. 1つの方法は次のとおりです。

int newValue = (int) (255 - (255 / 1.3));
于 2012-09-30T14:15:09.120 に答える
1

0 を掛けたものはすべて 0 になります。負のアプローチを使用します。

最大値 - (最大値/明るさ係数)。

あなたの場合は 255-255/1.3 です。

それを整数に格納します。

于 2012-09-30T14:18:53.243 に答える