【问题标题】:Brighten black pixels in a BufferedImage使 BufferedImage 中的黑色像素变亮
【发布时间】:2012-09-30 14:11:06
【问题描述】:

我正在使用RescaleOp 来增亮我的图像,我的问题是,如果我使用黑色(0,0,0)和白色(255,255,255),它们的效果完全相同。

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

另一方面,如果我使图像变暗,我会得到想要的结果,因为白色像素会变暗,255(白色 RGB 值)* .8(亮度系数)=/= 255,而黑色像素不能低于 0,因此它们保持不变。

如何使黑色像素变亮,就像使用 BufferedImageOp 使白色像素变暗一样?

这里是rescale操作

        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(...);

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

【问题讨论】:

    标签: java graphics bufferedimage


    【解决方案1】:

    您将不得不从最大值开始。亮度因子代表什么并不明显,因此您可能需要在这里进行一些试错研究。一种方法可能是:

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

    【讨论】:

      【解决方案2】:

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

      最大值 - (最大值/亮度因子)。

      在您的情况下为 255-255/1.3。

      将其存储在一个整数中。

      【讨论】:

        【解决方案3】:

        选项:

        • 编写扩展 RescaleOp 的自定义 RasterOp 以提供您想要的行为(特别是,如果值 = 0 && 比例因子 > 1,则新值 = 1 * 比例因子 = 比例因子)
        • 串行使用两个 RasterOps。第一个将具有 1 的比例因子和 1 的偏移量(使一切都稍微亮一点)。第二个将是您已经定义的现有 RasterOp。它比第一个更混乱,可能更慢,但实现起来可能更简单。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多