サーバサイドではじめるJavaグラフィック講座 2
掌田 津耶乃 [著] 2007/03/05 00:00

1 2 3 4 →

はじめに

 AWT(Abstract Window Toolkit)のGraphicsクラスについて、前回、ごく簡単な使い方を説明しました。Graphicsの使い方は非常に簡単です。これは、裏を返せば「複雑なことはできない」ということでもあります。そこで、より高度な描画を行なえるようにGraphicsを拡張して作られたのが「Graphics2D」なのです。

 より本格的なグラフィック処理を行いたいのであれば、このGraphics2Dについて理解しておく必要があります。そこで今回は、このGraphics2Dを使った描画の基本について一通り説明を行いましょう。

対象読者

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

Graphics2D利用サーブレットの準備

 今回は、特にサーバサイドでの使い方ということに限らず、Javaにおけるグラフィック利用全般に関する話になります。

 Graphics2Dの描画は、Graphicsとは少々異なります。Graphicsでは、図形を描画するメソッドを使い、描く図形の位置や大きさなどの情報を引数で指定していました。が、Graphics2Dでは描画メソッドで図形を指定しません。どうするのかというと「図形の形状を表すオブジェクトを作成し、これを元に描画をする」という方法をとります。

 実際に簡単な例を挙げて説明しましょう。今回はいろいろとサンプルを作ることになるので、まず雛形となるサーブレットを用意しておくことにします。SampleGraphics2Dクラスのpaintメソッドに描画の処理を書けば、それがそのまま表示されるようにしておきます。

SampleGraphics2D.java
package jp.tuyano.codezine;

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.*;
import javax.imageio.stream.ImageOutputStream;
import javax.servlet.*;
import javax.servlet.http.*;

public class SampleGraphics2D extends HttpServlet
        implements Servlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        
        this.doAction(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        
        this.doAction(request, response);
    }

    public void doAction(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        
        // イメージの作成
        BufferedImage im = new BufferedImage(256,256,
                BufferedImage.TYPE_INT_RGB);
        Graphics2D g = im.createGraphics();
        paint(g);
        g.dispose();
        
        // イメージの出力
        ServletOutputStream sos = null;
        try {
            response.setContentType("image/jpeg");
            sos = response.getOutputStream();
            ImageOutputStream ios =
                    ImageIO.createImageOutputStream(sos);
            ImageWriter iw = (ImageWriter)ImageIO.
                    getImageWritersByFormatName("jpeg").next();
            iw.setOutput(ios);
            iw.write(im);
        } catch(IOException ex) {
        } finally {
            try {
                sos.close();
            } catch(IOException ex2) {}
        }
    }
    
    public void paint(Graphics2D g){
        // ここに描画処理を用意する
    }

}
web.xmlへの追加
<servlet>
    <description></description>
    <display-name>SampleGraphics2D</display-name>
    <servlet-name>SampleGraphics2D</servlet-name>
    <servlet-class>
        jp.tuyano.codezine.SampleGraphics2D
    </servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>SampleGraphics2D</servlet-name>
    <url-pattern>/graphics2d</url-pattern>
</servlet-mapping>
HTML内でのイメージの表示
<img src="./graphics2d">

プロフィール
掌田 津耶乃 ショウダ ツヤノ

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆活動をする傍ら、ログハウスの普及活動にいそしんでいる。(掌田津耶乃のWebサイトはこちら

※現在、新しいQ&A?サイト「FinQ」を開発、ベータ公開中。また新しい入門記事の投稿サイト「libro」を開発、ベータ公開中。皆さん、ぜひご参加ください!


注目の求人情報
システムエンジニア/証券向け開発・運用管理
株式・投資信託等、インターネットトレーディングシステムやC/S型業務システムの企画・設計・開発・運用...
システムエンジニア/少数精鋭のSIer
GPS・地図情報、セキュリティ、ICカード・RFIDタグ、携帯電話、ネットワーク、等に関連したシステム(ソ...
コンサルタント/ITソリューション
ERPコンサルティングサービス (ERPアプリケーション導入に伴うコンサルティングおよび開発支援) 〇...

(最新日付順)
名前(ゲストの方もコメントをどうぞ):*
アイコン:
なし

内容(テキストのみ1200文字まで):*

投稿規定に同意して

スポンサーサイト

この記事のトラックバックURL: