SHOEISHA iD

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

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

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

JSP/サーブレットでイメージを生成する

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


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

最近ではWeb開発が主流になりつつあり、初めてJavaで学んだのがJSP/サーブレットだったという人も多いことでしょう。この場合「グラフィック」分野がなおざりになりがちですが、今後Webにおいてもそれらの処理をサーバサイドで行う機会が増えてくると思われます。本連載では、サーバサイドのJavaビギナーを対象にグラフィック処理の再入門を行います。

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

はじめに

 その昔、プログラミングの入門と言えば、スタンドアロンなアプリケーションの作成から入るのが常道でした。が、時代は変わります。インターネット、特にWebの発達により、「初めてのプログラミングがWeb関係だった」という人はずいぶんと多くなりました。

 Javaの世界でも、これは顕著です。「初めてJavaに触れる人間が、最初に学ぶのがJSP/サーブレットだった」なんてケースも、今では半ば当たり前になりつつあるようです。が、サーバサイドの開発中心だと、どうしてもなおざりになってしまう分野というのがあります。それは「グラフィック」です。

 最近は、Webといえども「テキスト中心の世界」とは言えなくなってきています。グラフィック関連の処理をサーバサイドで行なわなければならない事態は、この先、必ず増えてくることでしょう。そこで、サーバサイドのJavaビギナーに向け、グラフィックの基本利用についてまとめていきましょう。

対象読者

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

グラフィック関連のパッケージとクラス

 まず、Javaに用意されているグラフィック関連のクラスについて説明しておきましょう。なお、ここではJ2EE 1.4で使われているJava 5をベースに説明を行います。

  • ビットマップイメージに関するクラス
  • java.awt.Image
    java.awt.image.BufferedImage
  • グラフィックコンテキスト・クラス
  • java.awt.Graphics
    java.awt.Graphics2D
  • イメージの読み書きに関連するクラス
  • javax.imageio.ImageIO
  • イメージ関連のパッケージ
  • java.awt.imageパッケージおよびその下のもの
    javax.imageioパッケージおよびその下のもの

 意外とたくさんのクラスやパッケージが用意されているのに驚いたかもしれません。多少はGUIを使った処理を書いたことがあるなら、ImageBufferedImageGraphicsあたりのクラスは知っているかもしれませんね。

 この他、イメージファイルに関するものとして、ImageIOクラスが多用されます。また、java.awt.imageパッケージはBufferedImageやイメージの処理に関連する各種のクラスを、javax.imageioパッケージはImageIOやイメージファイルに関連する各種クラスをそれぞれパッケージに持っています。この他、java.awtパッケージ内のColorFontなど、イメージ関連の処理で用いられるクラスはたくさんあります。

AWTとSwing

 このjava.awtというパッケージは「AWT」と呼ばれるJava標準のGUIフレームワークに関するものです。AWTは「Abstract Winddowing Toolkit」の略で、ウインドウやメニューなどのGUIを使ったプログラムを作成する際に必要となるものがまとめられています。

 Javaには、このAWTの他に「Swing」というGUIフレームワークもjavax.swingパッケージとして用意されていますが、グラフィック関係に絞っていえば、基本はAWTと同じでjava.awt内のクラスを利用します。

 一度にこれらすべてを理解するのは到底無理でしょうから、まずは最も基本となる「Image」「BufferedImage」「Graphics」の3つのクラスを使った、グラフィックとイメージの基本利用から理解していくのが良いでしょう。また、ここで取り上げるグラフィック関連のクラス類はAWTやSwingといったGUIのパッケージに用意されているものですが、これらのGUIと併用しなければならないというわけではありません。サーバサイドのように、GUIを一切使わないプログラムでも、グラフィック関連の機能だけを利用することは可能です。

一般的なAWTにおけるグラフィックの利用

 既にGraphicsクラスの基本ぐらいは分かっている、という人も多いでしょうが、一応、一般的なグラフィックの利用例として、AWTによるGUIを使った、ごく単純なアプレットのソースを上げておきます。赤から青へグラディエーションされたイメージを作成し表示するものです。

package jp.tuyano.codezine;

import java.applet.Applet;
import java.awt.*;

public class SampleApplet extends Applet {
    private static final long serialVersionUID = 1L;
    
    public void paint(Graphics g){
        for(int i = 0;i < 16;i++)
            for(int j = 0;j < 16;j++){
                Color c = new Color(i * 16,0,255 - j * 16);
                g.setColor(c);
                g.fillRect(i * 16, j * 16, 16, 16);
            }
    }
}
アプレットビューワでアプレットを表示したところ。青から赤へグラディエーション表示する簡単なサンプルだ。
アプレットビューワでアプレットを表示したところ。青から赤へグラディエーション表示する簡単なサンプルだ。

 ここで行なっているのは、「paint」というメソッドのオーバーライドです。GUI利用のプログラム(AWT、Swingを利用したもの全般)では、利用するコンポーネントやコンテナには必ずこのpaintメソッドまたはそれに相当するメソッドが用意されています。これは、コンポーネントの表示を更新するとき、必要に応じて呼び出されます。従って、ここに描画に関する処理を用意しておけば、必要があると自動的に実行され画面に表示されるわけです。

 この種のメソッドは、一般にjava.awt.Graphicsインスタンスを引数に持ちます(正確には、実はGraphicsではないのですが……これについては改めて)。Graphicsクラスは、グラフィックコンテキストの描画処理をカプセル化したものです。ここに用意されている描画用のメソッドを呼び出すことで、そのコンポーネントに図形やイメージを描画することができます。従って、AWTなどのGUIプログラムの場合、グラフィックの利用というのは「Graphicsクラスの使い方を覚える」ということであり、それ以外はあまり重要ではありません。

 また、基本は「画面への表示」ですから、イメージファイルへのアクセスや、データの送受といった操作はとりあえず不要です。いずれそうしたことを行う必要が生じることでしょうが、単にグラフィックを利用するだけなら、それらの知識はなくとも問題ないのです。

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

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

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

メールバックナンバー

次のページ
サーバサイドにおけるグラフィック利用の基本

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/978 2007/12/25 10:15

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング