2012-09-30 112 views
2

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

我可以猜出为什么,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(...); 

由于当前的答案,但我不明白如何将它们应用到我的问题。

回答

2

您必须改为最大值。亮度因子代表什么不明显,因此您可能需要在这里尝试一下&错误研究。一种方法可能是:

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

任何乘以0的值都是0.使用负值方法。

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

255-255/1.3在你的情况。

将其保存为整数。

0

选项:

  • 写一个扩展RescaleOp中提供您想要的行为(特别是定制RasterOp中,如果值= 0 & &比例因子> 1,新价值= 1 *比例系数为比例系数)
  • 串行使用两个RasterOps。第一个将具有1的比例因子和1的偏移量(使一切都稍微更亮)。第二个将是您已经定义的现有RasterOp。它比较混乱,可能比第一个更慢,但可能更容易实现。
相关问题