2000.6.28 KPC 情報技術科 関谷
前々回からは、テキストのJavaプログラムでの例題のファイル(サーバにコピーしたもの)を紹介した。index.htmlファイルで目次ページになっているので、Javaでの実行画面例とjavaソースリストが見れる。今後は、これを参照しながら、学習していく。
Java.awt.Graphicsをテキスト第6章を参考に学習する。このテキストでは、マウス操作でのインタラクティブな例題が多い。
ピクセル操作(直線、リサージュ図形、立体的な点描、スプレー描画)
ドロウ操作(直線、多角形、長方形、折線、楕円と楕円弧、フィル操作、フォント操作)
例題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はここをクリックする。
お絵かきツールなどでは、マウスをクリックすると、スプレー缶でペンキを塗るように、無数の点をランダムに散らばらせて霧状に描くことができる。これに挑戦する。
スプレーの太さ:描画範囲を変える->スクロールバーのスライダーによる。
ただし、イベントが発生してもrepaint()を呼ばない方が良いと思われる。(adjustmentValueChanged()メソッドでは、repaint();をコメントにする。)
スプレー缶から霧を発生させる:マウスのクリック位置やドラッグ位置を取得する
Javaのプログラム構造を考察すること。(クラスやイベント処理)
そして、今回の第6章のJavaプログラムの改造をする。あるいは、逆の順序でも良いが。
アプリケーションからアプレットプログラムへの変換は、少し,面倒ではあるが、慣れて欲しい。
(アプリケーションとアプレットとの共用の例は、上のfireballの例などを参照のこと。共用にしなければ、だいぶ、簡単になる。)
(参考)鍋田さんのWebページには、Appletに変更したスプレープログラムがある。
マルチメディアとは、複合媒体(文字、映像、音声など)であり、双方向の通信可能な媒体である。サウンドや静止画像、アニメーションに挑戦してみる。
サンプルのプログラムの動作を確認したら、ソースプログラムを改造して、タイトル(プログラム名や作成者名,年月日など)を表示したり、ファイル名を表示したりして、何をどうしているのかを説明するものを追加すること。
(6.28朝の補足追加)Rドライブ(ファイルサーバ)の\sekiya\図形処理\java2F_szフォルダに、F1.javaからF6t.javaまでのsekiyaが改造した例をコピーしているので、参考にして良い。
Javaアプレットでサウンドを再生することは、比較的容易である。javaスタンドアローンアプリケーションでは、多少複雑な設定となる。
残念ながら、サウンドボードとそのドライバ、スピーカが無いパソコンでは、プログラムを起動しても、実際に音を出すことはできない。
サウンドファイルが無いと実行時にエラーになる。サーバのRドライブなどから、コピーしておくこと。
サウンドファイルをファイルダイアログで選択する。
サウンドファイルをファイルダイアログで選択して、複数個読み込んで同時に演奏できる。
Javaアプレットでもアプリケーションでも、画像ファイルの読み込みと表示は、比較的容易である。gifとjpgファイルが扱える。
画像ファイルをファイルダイアログで選択して、読み込んでオリジナル・サイズで表示する。
画像ファイルをファイルダイアログで選択して読み込んで、オリジナル・サイズのほかに拡大・縮小をチョイスで指定して表示する。
(6.28午後の補足追加)このアプリケーションをアプレットに変更したものGraphicsF5t.html(,java,class)をファイルサーバにコピーしているので、参照のこと。ただし、IE5.0では、ファイルダイアログが起動しないので、予め、1つの画像ファイルを読み込むようにしている。(appletviewerでは、正常にダイアログから読める。)
画像ファイルをファイル名のチョイスで選択して、キャンバスに表示する。
このアプリケーションをアプレットに変更したものGraphicsF6t.java(,html,class)をファイルサーバにコピーしているので、参照のこと。
画像ファイルを表示しておき、それに落書きや修正ができる。
2つのスレッドの動作の確認。
5枚の1連の画像ファイルを読み込んでおき、マルチスレッドでアニメーションする。
フレームの背景に画像を表示し、スレッド処理で小さな画像をその境界でバウンドさせ、リサージュ曲線に沿って移動させる。
画像の表示領域が狭いときや画像サイズが大きすぎるときには、スクロールバーで画像をスクロールする。
いままでの画像は、デジタルカメラで撮ったものをコンピュータに取り込んでJavaマルチメディアプログラミングとしてイメージ操作してきた。配列を用いてImageのピクセル値を画像として生成してみよう。MemoryImageSourceクラスを使う。
水平左から右方向に黒から緑へ変化し、垂直上から下方向に黒から青へ変化し、斜め左上から右下方向に赤から黒へ変化するイメージを作成。
ジュリア集合を描き、IndexColorModelオブジェクトで作成したJavaカラーモデルでジュリア集合の画像を表示する。
画像を幾何的に反転させたり、画像の中の1部分の画像を抽出するためには、java.awt.image.PixelGrabberクラスを使う。
画像をファイルダイアログボックスから読み込み、いろいろな画像反転を確かめられるように、Choiceのプルダウンメニューで選択できるプログラムを作成。
ジュリア集合を描き、IndexColorModelオブジェクトで作成したJavaカラーモデルでジュリア集合の画像を表示する。
画像のピクセルを生成するインターフェイスとしてjava.awt.image.ImageProducerがある。そして、FilterdImageSourceクラスを使って、既存の画像にフィルターをかける。フィルターとしてRGBImageFilterクラスがある。
既存の画像に緑色のフィルターをかけて、フレームに表示するプログラムを作成。
画面の下のほうを徐々に白くする。
ColorModelクラスを用いて、透明度とRGB成分をスクロールバーで調整する。
テキスト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ページの形式として、左上に、テキスト名、プログラム名、氏名番号などのタイトル行、さらにパラメータの表示行などを追加すること。
前回と同様で、appletタグを持つhtmlファイルへのハイパーリンクとする。(インタラクティブなプログラムでのイメージの貼り付けは、望ましくない。)