增亮BufferedImage中的黑色像素

时间:2012-09-30 14:11:07

标签: java graphics bufferedimage

我正在使用RescaleOp来照亮我的形象,我的问题是,如果我使用黑色(0,0,0)和白色(255,255,255),它们会完全相同。

我可以猜到为什么,0(黑色RGB值)x 1.3(亮度因子)= 0,白色像素不能高于255因此它们保持不变,我对剩余的白色像素感到满意相同。

另一方面,如果我使图像变暗,我会得到所需的结果,因为白色像素变暗,255(白色RGB值)* .8(亮度系数)= / = 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(...);

感谢您当前的答案,但我不知道如何将它们应用于我的问题。

3 个答案:

答案 0 :(得分:2)

您必须改为最大值。亮度因子代表什么并不明显,所以你可能不得不做一些试验和放大。错误研究在这里。一种方法可能是:

int newValue = (int) (255 - (255 / 1.3));

答案 1 :(得分:1)

任何乘以0的都是0.使用否定方法。

Maxvalue - (最大值/亮度系数)。

在你的情况下

255-255 / 1.3。

将其存储在整数中。

答案 2 :(得分:0)

选项:

  • 编写一个自定义RasterOp,扩展RescaleOp以提供您想要的行为(特别是,如果value = 0&& scale factor> 1,new value = 1 * scale factor = scale factor)
  • 串行使用两个RasterOps。第一个将具有1的比例因子和1的偏移(使一切稍微更亮)。第二个是你已经定义的现有RasterOp。它比第一个更麻烦,可能更慢,但可能更容易实现。