SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

サーバサイドではじめるJavaグラフィック講座

Javaにおけるイメージのフィルタ処理

サーバサイドではじめるJavaグラフィック講座 4

  • このエントリーをはてなブックマークに追加

今回は、イメージのフィルタ処理について考えてみます。単純に色合いを変更するようなものから、ぼかしやシャープネスなどのフィルタ処理を作成する方法まで説明を行いましょう。今回も、特にサーバサイドに限定したものではなく、Java全般で共通する内容になります。

  • このエントリーをはてなブックマークに追加

はじめに

 イメージの加工については、単純に描画を組み合わせる方法の他に、イメージ全体の色値を特定の方法に従って変換する、いわゆるフィルタ処理があります。フィルタ処理は、そのための機能を提供するクラスがいくつか用意されています。それらの使い方を理解することで、ごく基本的なフィルタ処理を実装できます。今回は、フィルタ処理全般について説明を行うことにします。

過去の記事

対象読者

  • Javaの基本およびJavaによるWeb開発の基礎(JSP/サーブレット程度)をマスターしている人。
  • グラフィック関連のプログラミング経験があまりない人。
  • Javaのグラフィック処理を学び直したい人。

イメージをセピア色にする

 イメージの加工と言うと、形状の加工の他に、イメージの状態に関する加工というものも行うことがあるでしょう。例えば、色調や輝度を変更するような処理です。グラフィックソフトなどでは、フィルタ処理として用意されている機能です。

 複雑なフィルタ処理となると話は別ですが、単に「イメージに赤みをつける」というように全体の色合いを変えるだけなら、実は特別な機能など使わず、簡単に行うことができます。単に、setColorで色を設定し、イメージの上から塗りつぶすだけでよいのです。といっても、単純に塗りつぶしたのではイメージが上描きされて消えてしまいます。色を設定する際、アルファチャンネルを利用して透明度を設定して描画すれば良いのです。

 前回、用意したサンプルWebアプリケーション(test.jsp、SampleGraphicsFromImageFileクラスを使ったもの。詳細は前回の記事を参照)を今回もまた利用することにしましょう。SampleGraphicsFromImageFileクラスの描画用メソッドgetModifiedImageを修正して、読み込んだイメージをセピア色にするサンプルを考えてみます。

イメージをセピア色にする
public BufferedImage getModifiedImage(BufferedImage im){
    int w1 = im.getWidth(),h1 = im.getHeight();
    BufferedImage im2 =
        new BufferedImage(w1,h1,BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = im2.createGraphics();
    Rectangle2D rect = new Rectangle2D.Double(0,0,w1,h1);
    g2.setColor(Color.WHITE);
    g2.fill(rect);
    
    g2.drawImage(im,0,0,null);
    g2.setColor(new Color(200,75,0,50));
    g2.fill(rect);
    
    g2.dispose();
    return im2;
}
イメージにセピア色の色調を付け加える
イメージにセピア色の色調を付け加える

 これは、イメージに赤と緑の色合いを加えてセピア色っぽい色付けをしてみた例です。ここでは、次のような形で色付けを行っています。

g2.setColor(new Color(200,50,0,50));
g2.fill(rect);

 Colorインスタンスの作成では、4つの引数を指定し、第4引数でアルファチャンネルの指定を行います。「アルファチャンネル」というのは、色を指定するのにRGB以外に用意されている要素です。通常、コンピュータでは色はRGBの組み合わせで表現されますが、それ以外に、直接色として扱われないプラスアルファの値として用意されているのがアルファチャンネルです。多くの場合、これの値を「透明度」を指定するのに用いられます。

 こうしてアルファチャンネルで透明度を指定してイメージ全体を塗りつぶせば、その色合いを重ね合わせることができるわけです。単純に、イメージにちょっとした色を重ねるだけならこれで十分使えるでしょう。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
リスケール・フィルタを使う

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
サーバサイドではじめるJavaグラフィック講座連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1145 2007/04/06 08:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング