2012-09-30 4 views
2

내 이미지를 밝게하기 위해 RescaleOp을 사용하고 있습니다. 내 문제는 검정색 (0,0,0)과 흰색 (255,255,255)을 사용하면 정확히 똑같이 나타납니다.BufferedImage에서 검은 픽셀 밝게

왜 0 (검정색 RGB 값) x 1.3 (밝기 계수) = 0인지, 그리고 흰색 픽셀은 255보다 높을 수 없으므로 동일하게 유지 될 수 있으며 흰색 픽셀에 만족합니다. 동일하게 남는다.

다른 한편, 이미지를 어둡게하면 흰색 픽셀이 어두워지고 255 (흰색 RGB 값) * .8 (밝기 계수) =/255이므로 원하는 결과를 얻습니다. 검정 픽셀은 ' t는 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입니다. 이것은 처음보다 훨씬 더 복잡하고 느리고 구현하기가 더 간단 할 수 있습니다.
관련 문제