2012-09-30 46 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。它比較混亂,可能比第一個更慢,但可能更容易實現。
相關問題