輝度を調整するにはRescaleOpを使う
HilightPlugInは輝度を変更するフィルター。ダイアログから変更する値を選べます。 |
まずは、輝度を調整するプラグインからです。イメージの輝度を操作するには、「java.awt.image.RescaleOp」というクラスを利用します。これは輝度のスケーリング係数とオフセット値を使って新しい輝度を取得し、イメージを生成する働きを持つものです。新輝度の算出は、ざっと以下のような式になっていると考えればよいでしょう。
現在の輝度 × スケーリング係数 + オフセット値 = 新しい輝度
輝度を乗算除算したければスケーリング係数を設定してやればいいですし、全体的に輝度を加算減算したければスケーリング係数を1にしてオフセット値を設定すればよいわけです。この基本的な計算を念頭においておけば、RescaleOpの使い方はそれほど難しくはありません。
[RescaleOp] = new RescaleOp(係数,オフセット,[RenderingHints]);
[RescaleOp].filter([BufferedImage1],[BufferedImage2]);
RenderingHintsというのは描画のレンダリング時に必要な情報をまとめたクラスですが、ここでは特に使わないのでnullにしておきます。実際のフィルター処理はfilterメソッドを利用します。これは第1引数のイメージにフィルター処理をし第2引数のイメージに描画します。
この基本がわかったところで、簡単な輝度変更のフィルター「HilightPlugIn」を作成してみましょう。これはメニューを選ぶとスケーリング係数の値をポップアップから選ぶようになっています。ここで選択すると、それを利用して輝度を変更します。ここではJOptionPaneを使って、スケーリング係数をいくつかの候補から選んで入力できるようにしました。
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import jp.tuyano.FreeCapturePlugIn;
public class HilightPlugIn implements FreeCapturePlugIn{
public BufferedImage doPlugin(BufferedImage img,Frame frame) {
if (img == null) return null;
String[] list = {"0.25","0.5","0.75","1.25","1.5","2.0"};
String n = (String)JOptionPane.showInputDialog(frame,
"輝度の乗除率を選んでください。","設定",
JOptionPane.QUESTION_MESSAGE,null,list,list[0]);
RescaleOp op = new RescaleOp(Float.parseFloat(n),0,null);
BufferedImage img2 = new BufferedImage(img.getWidth(),
img.getHeight(),img.getType());
op.filter(img,img2);
return img2;
}
public String getName() {
return "輝度の乗除...";
}
}
※MANIFEST.MF
Manifest-Version: 1.0
Plugin-Class: HilightPlugIn