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

画面キャプチャーを作ろう(4)(2ページ目)

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

執筆者:掌田 津耶乃

階調の操作にはLookupOpを使う


LookupPlugInは輝度の階調を変更するフィルター。ダイアログから階調値を選ぶとその階調にイメージを変換します。
RescaleOpは輝度を一定の計算式にしたがって自動的に変換するものでしたが、0~255までの輝度の値を各階調ごとに細かく制御することもできます。これには「java.awt.image.LookupOp」を利用します。

 このLookupOpは、ルックアップテーブルを使って会長の各値を別の値に置き換えます。ルックアップテーブルはjava.awt.image.ByteLookupTableというクラスを利用します。これはbyte配列を使って作成することができます。0~255の各階調をどういう値に変更するかをbyte配列として用意するわけです。


[ByteLookupTabl] = new ByteLookupTable(オフセット値,byte配列);
[LookupOp] = new LookupOp([ByteLookupTabl],[RenderingHints]);
[LookupOp].filter([BufferedImage1],[BufferedImage2]);

LookupOpを使ったフィルター処理の流れを整理するとこんな感じになるでしょう。byte配列からByteLookupTableを作成し、それを元にLookupOpを作成する。後は、filterメソッドで第1引数のイメージをフィルター処理したものを第2引数のイメージに描画するだけです。

このLookupOpを使うと、例えば階調を反転したイメージや、フルカラーのイメージを256階調などに落としたもの、特定の階調だけ輝度を変更処理したイメージなどを作成できるようになります。例として、階調数を変更する「LookupPlugIn」を作成してみましょう。これは、ダイアログで選んだ階調に落とすものです。(ただし「2」はRGB各色ごとに2階調で総階調数が2ではありません)

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import jp.tuyano.FreeCapturePlugIn;

public class LookupPlugIn implements FreeCapturePlugIn{

  public BufferedImage doPlugin(BufferedImage img,Frame frame) {
    if (img == null) return null;
    String[] list = {"2","4","8","16","32","64"};
    String res = (String)JOptionPane.showInputDialog(frame,
        "階調を選んでください。","設定",
        JOptionPane.QUESTION_MESSAGE,null,list,list[0]);
    int n = 256 / Integer.parseInt(res);
    byte[] table = new byte[256];
    for(int i = 0;i < 256;i++){
      int val = (int)((i + (n / 2)) / n);
      table[i] = (byte)(val * n > 255 ? 255 : val * n);
    }
    ByteLookupTable blt = new ByteLookupTable(0,table);
    LookupOp lt = new LookupOp(blt,null);
    BufferedImage img2 = new BufferedImage(img.getWidth(),
        img.getHeight(),img.getType());
    lt.filter(img,img2);
    return img2;
  }

  public String getName() {
    return "階調変更...";
  }

}

※MANIFEST.MF
Manifest-Version: 1.0
Plugin-Class: LookupPlugIn

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

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

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