• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プログラム内描画図形をdrawImageで出力)

プログラム内描画図形をdrawImageで出力

このQ&Aのポイント
  • プログラム初期時に複数の図形を描画し、特定の条件で判定された図形を数秒間隔で描画する方法について解説します。
  • 図形ファイルの読み込みと描画を行うために、drawImageメソッドを使用しています。
  • また、ComponentクラスのcreateImageメソッドを使用することも考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

createImage()を使うのもありますが、 これは、使うタイミングが難しいのです。 コンポーネントが表示可能でないときには使用できない(nullを返す)という制約があり、 上位のペイン(フレームとか)にadd()された後でないと使えません。 つまり、コンストラクタの中で使用することができません。 場合によってはpaint()の中で 「paint()の最初の呼び出しの時にcreateImage()を使う」 なんてこともしますが、どうもすっきりといきません。 appletだと、init()の中で行うのがぴったりするのですが…。 個人的には、オフスクリーンでイメージを保持するときは、 BufferedImageの使用を奨めます。 これの方が、一般的な意味での"画像イメージデータ"に 近いと思います。 BufferedImageを作り出せば、自由に描画ができます。円でも楕円でも。 (createGraphics()かgetGraphics()でGraphicsを取り出し、 描くことができる) BufferedImageを生成するとき、引数にあるint imageTypeというので迷うと思いますが、 これはあまり考えずに、アルファ値(透過)がある場合は TYPE_INT_ARGBを、 アルファ値がない場合はTYPE_INT_RGBを使えばいいでしょう。 ついでながら、「Imageを保存する」のと、 「その都度描画する」のでは、どっちが速いのか私は確信を持てません。 実際に測ってみてください。

Vargas
質問者

お礼

初めに、お礼が遅くなり申し訳ありません。 確かに、色々やってみて、createImageはフレームにaddしなければダメですね。BufferedImageでやってみます。 おっしゃる通り、Imageを保持してからそれを毎回描画する事とその都度図形を描画するのではどちらが処理効率がいいか一概には言えませんね。そのあたりもためしてみたいと思います。どうもありがとうございました。

関連するQ&A

専門家に質問してみよう