Javaプログラミング/Javaプログラミング関連情報

画面キャプチャーを作ろう(4)

前回作成したプラグイン機能を使ってさまざまなフィルターを作ってみましょう。

執筆者:掌田 津耶乃




輝度を調整するには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


  • 1
  • 2
  • 3
  • 4
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます