2000年6月28日更新(新規作成)
  関谷トップページへ CGトップページへ   作者へのメッセージ

図形処理・計算処理実習No.10 Javaでのグラフィックス(5)中山第7章 Javaマルチメディア

2000.6.28 KPC 情報技術科  関谷

1. 前回のJavaグラフィックス(4)の復習とコメント

 前々回からは、テキストのJavaプログラムでの例題のファイル(サーバにコピーしたもの)を紹介した。index.htmlファイルで目次ページになっているので、Javaでの実行画面例とjavaソースリストが見れる。今後は、これを参照しながら、学習していく。
Java.awt.Graphicsをテキスト第6章を参考に学習する。このテキストでは、マウス操作でのインタラクティブな例題が多い。

ピクセル操作(直線、リサージュ図形、立体的な点描、スプレー描画)
ドロウ操作(直線、多角形、長方形、折線、楕円と楕円弧、フィル操作、フォント操作)

6.1.3 立体的な点描く

 例題E3.java:ピクセルで立体球を描く。平方根や階乗の数学的関数を用いて立体的な点描画のユーザ定義のfireball()メソッドを作成して、パラメータを変えてpaint()メソッドで呼び出している。ローカル変数a,b,cを変えると、光の方向などを変えることが可能。いろいろと試してみよう

 GraphicsE3p.java:fireball()メソッドのローカル変数から、クラスのstatic変数に変えて、main()の引数から代入すると、実行時点でこれらのパラメータを指定できる。
この例は、コマンドライン引数の受取り方を示している。(サン・マイクロシステムズ、Javaプログラミング講座、アスキー、1996、pp.214-215を参照した。)

 GraphicsE3pt.html:fireball()のApplet兼アプリケーションプログラムである。参照した本は、有賀妙子・竹岡尚三著、Java1.1プログラミング、ソフトバンク、1997,pp.161-164などである。
 コマンドライン引数とhtmlファイルでのパラメータ指定、テキストフィールドでの更新とボタンによる再描画などを組み合わせている。ソースプログラムGraphicsE3pt.javaはここをクリックする。

6.1.4 ピクセルでスプレー描画を作成く

 お絵かきツールなどでは、マウスをクリックすると、スプレー缶でペンキを塗るように、無数の点をランダムに散らばらせて霧状に描くことができる。これに挑戦する。
 スプレーの太さ:描画範囲を変える->スクロールバーのスライダーによる。 ただし、イベントが発生してもrepaint()を呼ばない方が良いと思われる。(adjustmentValueChanged()メソッドでは、repaint();をコメントにする。)
 スプレー缶から霧を発生させる:マウスのクリック位置やドラッグ位置を取得する

1.6 Webレポートへのコメント

 Javaのプログラム構造を考察すること。(クラスやイベント処理)
 そして、今回の第6章のJavaプログラムの改造をする。あるいは、逆の順序でも良いが。

 アプリケーションからアプレットプログラムへの変換は、少し,面倒ではあるが、慣れて欲しい。
(アプリケーションとアプレットとの共用の例は、上のfireballの例などを参照のこと。共用にしなければ、だいぶ、簡単になる。)  (参考)鍋田さんのWebページには、Appletに変更したスプレープログラムがある。

 

2.今日の学習-Javaでのグラフィックス(5) 第7章 マルチメディア

 マルチメディアとは、複合媒体(文字、映像、音声など)であり、双方向の通信可能な媒体である。サウンドや静止画像、アニメーションに挑戦してみる。
 サンプルのプログラムの動作を確認したら、ソースプログラムを改造して、タイトル(プログラム名や作成者名,年月日など)を表示したり、ファイル名を表示したりして、何をどうしているのかを説明するものを追加すること。
(6.28朝の補足追加)Rドライブ(ファイルサーバ)の\sekiya\図形処理\java2F_szフォルダに、F1.javaからF6t.javaまでのsekiyaが改造した例をコピーしているので、参考にして良い。

7.1 Javaサウンド操作

 Javaアプレットでサウンドを再生することは、比較的容易である。javaスタンドアローンアプリケーションでは、多少複雑な設定となる。
 残念ながら、サウンドボードとそのドライバ、スピーカが無いパソコンでは、プログラムを起動しても、実際に音を出すことはできない。

例1 GraphicsF1.java

 サウンドファイルが無いと実行時にエラーになる。サーバのRドライブなどから、コピーしておくこと。

 

例2 GraphicsF2.java

 サウンドファイルをファイルダイアログで選択する。

例3 GraphicsF3.java

 サウンドファイルをファイルダイアログで選択して、複数個読み込んで同時に演奏できる。

7.2 Javaイメージ操作

 Javaアプレットでもアプリケーションでも、画像ファイルの読み込みと表示は、比較的容易である。gifとjpgファイルが扱える。

例4 GraphicsF4.java

 画像ファイルをファイルダイアログで選択して、読み込んでオリジナル・サイズで表示する。

例5 GraphicsF5.java

 画像ファイルをファイルダイアログで選択して読み込んで、オリジナル・サイズのほかに拡大・縮小をチョイスで指定して表示する。
(6.28午後の補足追加)このアプリケーションをアプレットに変更したものGraphicsF5t.html(,java,class)をファイルサーバにコピーしているので、参照のこと。ただし、IE5.0では、ファイルダイアログが起動しないので、予め、1つの画像ファイルを読み込むようにしている。(appletviewerでは、正常にダイアログから読める。)

例6 GraphicsF6.java

 画像ファイルをファイル名のチョイスで選択して、キャンバスに表示する。
 このアプリケーションをアプレットに変更したものGraphicsF6t.java(,html,class)をファイルサーバにコピーしているので、参照のこと。

例7 GraphicsF7.java

 画像ファイルを表示しておき、それに落書きや修正ができる。

例8 GraphicsF8.java

 2つのスレッドの動作の確認。

例9 GraphicsF9.javaアニメーション

 5枚の1連の画像ファイルを読み込んでおき、マルチスレッドでアニメーションする。

例10 GraphicsF10.java画像の表示位置のコントロール

 フレームの背景に画像を表示し、スレッド処理で小さな画像をその境界でバウンドさせ、リサージュ曲線に沿って移動させる。

例11 GraphicsF11.java画像のスクロール

 画像の表示領域が狭いときや画像サイズが大きすぎるときには、スクロールバーで画像をスクロールする。

7.3 メモリイメージソース

 いままでの画像は、デジタルカメラで撮ったものをコンピュータに取り込んでJavaマルチメディアプログラミングとしてイメージ操作してきた。配列を用いてImageのピクセル値を画像として生成してみよう。MemoryImageSourceクラスを使う。

例12 GraphicsF12.javaメモリイメージソース

 水平左から右方向に黒から緑へ変化し、垂直上から下方向に黒から青へ変化し、斜め左上から右下方向に赤から黒へ変化するイメージを作成。

例13 GraphicsF13.javaジュリア集合

 ジュリア集合を描き、IndexColorModelオブジェクトで作成したJavaカラーモデルでジュリア集合の画像を表示する。

7.4 ピクセルグラバー

 画像を幾何的に反転させたり、画像の中の1部分の画像を抽出するためには、java.awt.image.PixelGrabberクラスを使う。

例14 GraphicsF14.javaピクセルグラバー

 画像をファイルダイアログボックスから読み込み、いろいろな画像反転を確かめられるように、Choiceのプルダウンメニューで選択できるプログラムを作成。

例13 GraphicsF13.javaジュリア集合

 ジュリア集合を描き、IndexColorModelオブジェクトで作成したJavaカラーモデルでジュリア集合の画像を表示する。

7.5 イメージフィルター

 画像のピクセルを生成するインターフェイスとしてjava.awt.image.ImageProducerがある。そして、FilterdImageSourceクラスを使って、既存の画像にフィルターをかける。フィルターとしてRGBImageFilterクラスがある。

例15 GraphicsF15.java画像のフィルター

 既存の画像に緑色のフィルターをかけて、フレームに表示するプログラムを作成。

例16 GraphicsF16.java画像のフィルター

 画面の下のほうを徐々に白くする。

例17 GraphicsF17.java画像のフィルター(ARGB成分をスクロールバーで調整)

 ColorModelクラスを用いて、透明度とRGB成分をスクロールバーで調整する。

3 実習課題とレポート

3.1 実習課題

テキスト7章の解説を読み、例題をコンパイルし、実行してみる。
それらの中で、皆さんの興味を持った例を詳しく解析し、改造しなさい。
 レポートには、それらの中から、appletに変更して、ハイパーリンクのこと。ただし、画像のファイルを読むプログラムは、appletの場合、テキストp.168の注意にあるように、getImage()の呼び方が違うので、それに合わせて変更のこと。
 javaソースと実行できるappletのほかに、考察をhtmlファイルには追加すること。

(注1)Appletプログラムの作り方については、前4回のプログラム例を参考にするとよい。init()メソッドで初期化するほかに、htmlファイルで、窓のサイズを指定している。テキストフィールドでインタラクティブに変えるようにすれば、変化のあるWebページとなる。

GraphicsF5t.javaでの変更内容を以下に示す。
1)先頭に追加 import java.applet.*;
2)class名-ファイル名も-の変更とその派生元のchg(Applet <- Frame)
3)main()をコメントにする/*  public static void main(String ar[]) {
4)ボタンの追加(メニューバーに代わる) from MenuBar
5)コンストラクタをinit()に変更・追加(例public void init() <- GraphicsF5())
6)init()にボタンを生成し追加、アクションシスナーを追加
7)setLayout(new BorderLayout());を追加   
8)削除 //    addWindowListener(new WinAdapter());
9)削除 // class WinAdapter extends WindowAdapter {
10)public void actionPerformed(ActionEvent ae) {でのイベント処理の変更(メニューバーを止めて、ボタンの処理に)
などである。

 なお、fileDialogがIE5.0で動作しなかったので、init()で1つのファイルを読み込むように変更している。

(注2)Webページの形式として、左上に、テキスト名、プログラム名、氏名番号などのタイトル行、さらにパラメータの表示行などを追加すること。

3.2 Webページでのレポート提出

 前回と同様で、appletタグを持つhtmlファイルへのハイパーリンクとする。(インタラクティブなプログラムでのイメージの貼り付けは、望ましくない。)