root/graph/JavaPopWeb/src/jp/ac/nime/computer/grpsimulator/ImgPr/TransContrast.java

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. TransContrast
  2. 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);
                        }
                }
        }
}

/* [<][>][^][v][top][bottom][index][help] */