java - 使 BufferedImage 中的黑色像素变亮

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

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

最佳答案

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

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

关于java - 使 BufferedImage 中的黑色像素变亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661867/

相关文章:

java - 在 OpenCV 中将 `BufferedImage` 转换为 `Mat`

java - 将类传递给另一个方法

java - hibernate-validator 在版本 4 和 5 中抛出不同的异常

java - Maven 与 Findbugs

java - ImageIO.read 非法参数异常 - 光栅带/颜色空间组件?

java - 使用像素 int[] 创建 BufferedImage

windows - 如何使用 GDI 函数在 OpenGL 使用的 DC 上绘图?

graphics - 如何以整数形式反转RGB颜色?

c++ - DirectX 纹理未正确绘制

java - 难以理解java游戏开发的图像加载日期