/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- TransContrast
- Filter
package jp.ac.nime.computer.grpsimulator.ImgPr;
import java.awt.*;
import java.awt.image.*;
/**
* コントラスト変換
* 明るいところは、より明るく、そうでないところはより暗くなる。
* BufferedImageは、ARGBのINT型にパックされている構造に AYUVが入っていると想定している。
* 計算するバッファと出力するバッファは、同じ大きさ・Colorであることが必須である。
*
* @author Kikuchi
* @since 0.1
* @see BrightOp
* @version 1.0.0
*/
public class TransContrast implements BrightOp {
/**
* コントラスト変換
* paramsは、最初の一個だけが有効である。
* @param imgSrc ソース画像
* @param imgdst 結果画像
* @param params 初めの一個だけが有効, 変換値 -10 〜 +10
*/
public void Filter(BufferedImage imgSrc, BufferedImage imgDst, int[] params) {
if (params.length < 1) {
throw new IllegalArgumentException("need one param");
}
int nContrast = params[0]; // コントラスト取得
if (nContrast < -10 || nContrast > 10) {
throw new IllegalArgumentException("IllegalParam contrast param ... " + nContrast);
}
// contrast = 0の時は、
if (nContrast == 0) {
// そのままコピー
imgSrc.copyData(imgDst.getRaster());
return; // 正常終了
}
// contrast を -1 〜 +1 に補正する
double dbContrast = nContrast / 10.0;
for (int h = 0; h < imgSrc.getHeight(); h ++) {
for (int w = 0; w < imgSrc.getWidth(); w ++) {
// yを取り出す
int ayuv = imgSrc.getRGB(w, h); // ARGB つまり AYUV
int auv = ayuv & 0xff00ffff; // y以外
double y = ((ayuv & 0x00ff0000) >> 16);
// 計算
y = y + dbContrast * (y - 127.5);
// 補正して格納
int yy = (int)(y + 0.5);
yy = Math.max(0, Math.min(yy, 255));
ayuv = auv | (yy << 16);
imgDst.setRGB(w, h, ayuv);
}
}
}
}