<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>画像を表示する(3)</title><revhistory><revision><revnumber>5</revnumber><date>2012-03-27 04:48:14</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2012-01-10 03:02:43</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2012-01-10 03:01:33</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2012-01-10 02:48:11</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2012-01-10 02:45:30</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>画像を表示する(3)</title><para>先のプログラムを修正して、画像の一部を指定位置に表示するようにします。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E7%94%BB%E5%83%8F%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%283%29?action=AttachFile&amp;do=get&amp;target=setumei1b.png"/></imageobject><textobject><phrase>setumei1b.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>このような表示を行うためには、 図に示す座標やサイズを指定する必要があります。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E7%94%BB%E5%83%8F%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%283%29?action=AttachFile&amp;do=get&amp;target=setumei1c.png"/></imageobject><textobject><phrase>setumei1c.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>画像ファイルのサイズはこのようになっています。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E7%94%BB%E5%83%8F%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%283%29?action=AttachFile&amp;do=get&amp;target=setumei1a.png"/></imageobject><textobject><phrase>setumei1a.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>上の例のように表示する場合、座標などはこのようになります。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ax = 200;
ay = 100;
sx = 300;
sy = 200;
w = 100;
h = 100;]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--><section><title>API</title><para>引数の数の多いdrawImageメソッドを使います。 </para><itemizedlist><listitem override="none"><screen><![CDATA[public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)]]></screen></listitem><listitem><para>指定されたイメージの指定された領域の利用可能な部分を描きます。指定された領域の内部に収まるようにただちにスケーリングして描きます。透明ピクセルは、そこにすでに存在するどのようなピクセルにも影響しません。 </para></listitem><listitem><para>このメソッドは常にスケーリングされていないイメージを使って、スケーリングされた矩形を描いて、必要なスケーリングをただちに実行します。これはこの操作に対しては、キャッシュされたスケーリング済みのイメージを使用しません。ソース矩形の最初の座標をデスティネーション矩形の最初の座標に、ソースの 2 番目の座標をデスティネーションの 2 番目の座標にといった対応でマッピングして、ソースからデスティネーションへのイメージのスケーリングを実行します。サブイメージは、その割り当てを維持する必要性に応じ、スケーリングされ反転されます。 </para></listitem><listitem><para>パラメータ: </para><itemizedlist><listitem><para>img - 描画される指定イメージimg が null の場合には何も行わない </para></listitem><listitem><para>dx1 - 出力先の矩形の最初の隅の x 座標 </para></listitem><listitem><para>dy1 - 出力先の矩形の最初の隅の y 座標 </para></listitem><listitem><para>dx2 - 出力先の矩形の 2 番目の隅の x 座標 </para></listitem><listitem><para>dy2 - 出力先の矩形の 2 番目の隅の y 座標 </para></listitem><listitem><para>sx1 - ソース矩形の最初の隅の x 座標 </para></listitem><listitem><para>sy1 - ソース矩形の最初の隅の y 座標 </para></listitem><listitem><para>sx2 - ソース矩形の 2 番目の隅の x 座標 </para></listitem><listitem><para>sy2 - ソース矩形の 2 番目の隅の y 座標 </para></listitem><listitem><para>observer - イメージがさらにスケーリングされ、変換されることを通知するオブジェクト  </para></listitem></itemizedlist></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>演習</title><para>?で示した部分を記述しプログラムを完成させなさい。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[import]]></token><![CDATA[ ]]><methodname><![CDATA[javax.swing.*]]></methodname><![CDATA[;]]>
<token><![CDATA[import]]></token><![CDATA[ ]]><methodname><![CDATA[java.awt.*]]></methodname><![CDATA[;]]>

<token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[class]]></token><![CDATA[ ]]><methodname><![CDATA[Game2]]></methodname><![CDATA[ ]]><token><![CDATA[extends]]></token><![CDATA[ ]]><methodname><![CDATA[JPanel]]></methodname>
<![CDATA[{]]>
<![CDATA[        ]]><methodname><![CDATA[Image]]></methodname><![CDATA[ ]]><methodname><![CDATA[img]]></methodname><![CDATA[;]]>
<![CDATA[        ]]>
<![CDATA[        ]]><methodname><![CDATA[Game2]]></methodname><![CDATA[()]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[ImageIcon]]></methodname><![CDATA[ ]]><methodname><![CDATA[ii]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[ImageIcon]]></methodname><![CDATA[(]]><phrase><![CDATA["game0.png"]]></phrase><![CDATA[);]]>
<![CDATA[                ]]><methodname><![CDATA[img]]></methodname><![CDATA[ = ]]><methodname><![CDATA[ii]]></methodname><![CDATA[.]]><methodname><![CDATA[getImage]]></methodname><![CDATA[();]]>
<![CDATA[        }]]>
<![CDATA[        ]]>
<![CDATA[        ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[paintComponent]]></methodname><![CDATA[(]]><methodname><![CDATA[Graphics]]></methodname><![CDATA[ ]]><methodname><![CDATA[g]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[w]]></methodname><![CDATA[, ]]><methodname><![CDATA[h]]></methodname><![CDATA[, ]]><methodname><![CDATA[ax]]></methodname><![CDATA[, ]]><methodname><![CDATA[ay]]></methodname><![CDATA[, ]]><methodname><![CDATA[sx]]></methodname><![CDATA[, ]]><methodname><![CDATA[sy]]></methodname><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[w]]></methodname><![CDATA[ = 100;]]>
<![CDATA[                ]]><methodname><![CDATA[h]]></methodname><![CDATA[ = 100;]]>
<![CDATA[                ]]><methodname><![CDATA[ax]]></methodname><![CDATA[ = 200;]]>
<![CDATA[                ]]><methodname><![CDATA[ay]]></methodname><![CDATA[ = 100;]]>
<![CDATA[                ]]><methodname><![CDATA[sx]]></methodname><![CDATA[ = 300;]]>
<![CDATA[                ]]><methodname><![CDATA[sy]]></methodname><![CDATA[ = 200;]]>
<![CDATA[                ]]><methodname><![CDATA[g]]></methodname><![CDATA[.]]><methodname><![CDATA[drawImage]]></methodname><![CDATA[(]]><methodname><![CDATA[img]]></methodname><![CDATA[, ?, ?, ?, ?, ?, ?, ?, ?, ]]><token><![CDATA[this]]></token><![CDATA[);]]>
<![CDATA[        }]]>
<![CDATA[        ]]>
<![CDATA[        ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[static]]></token><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[main]]></methodname><![CDATA[(]]><methodname><![CDATA[String]]></methodname><![CDATA[[] ]]><methodname><![CDATA[args]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[JFrame]]></methodname><![CDATA[ ]]><methodname><![CDATA[f]]></methodname><![CDATA[;]]>
<![CDATA[                ]]>
<![CDATA[                ]]><methodname><![CDATA[f]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[JFrame]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[f]]></methodname><![CDATA[.]]><methodname><![CDATA[setVisible]]></methodname><![CDATA[(]]><symbol><![CDATA[true]]></symbol><![CDATA[);]]>
<![CDATA[                ]]><methodname><![CDATA[f]]></methodname><![CDATA[.]]><methodname><![CDATA[setTitle]]></methodname><![CDATA[(]]><phrase><![CDATA["15Game"]]></phrase><![CDATA[);]]>
<![CDATA[                ]]><methodname><![CDATA[f]]></methodname><![CDATA[.]]><methodname><![CDATA[setSize]]></methodname><![CDATA[(420, 450);]]>
<![CDATA[                ]]><methodname><![CDATA[f]]></methodname><![CDATA[.]]><methodname><![CDATA[setDefaultCloseOperation]]></methodname><![CDATA[(]]><methodname><![CDATA[JFrame]]></methodname><![CDATA[.]]><methodname><![CDATA[EXIT_ON_CLOSE]]></methodname><![CDATA[);]]>
<![CDATA[                ]]><methodname><![CDATA[f]]></methodname><![CDATA[.]]><methodname><![CDATA[add]]></methodname><![CDATA[( ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Game2]]></methodname><![CDATA[() );]]>
<![CDATA[        }]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist></section></section></article>