Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Graphics2Dによる描画

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/03/05 00:00

前回、BufferedImageを作成し、そのGraphicsインスタンスを使って描画を行なって送信する――という、Javaのサーバサイドにおけるグラフィック利用の基本について説明しました。今回は、描画の最も基本となる「Graphics2D」について説明を行います。

目次

はじめに

 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">

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

著者プロフィール

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

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

バックナンバー

連載:サーバサイドではじめるJavaグラフィック講座
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5