質問: ### 前提・実現したいこと 毎度お世話になっております。 タイトルの通りjavaで画像の読み込みをしたいと思います。現在javaでゲームプログラミングをしています。その際、ゲームで使用する画像の読み込みについて調べてみたら方法がいくつかあり、どれを使えばよいか迷っています。下記のどの方法を(または下記以外を)選択するべきかご教授願います。javaにおけるゲームプログラミングでより一般的な方法がベストです。 ### 知っている画像読み込み方法 ``` ImageIO クラスで read() する ImageIcon クラスで new ImageIcon() して getImage() する Image クラスで Toolkit.getDefaultToolkit().getImage() し、MediaTracker で読み込み完了まで待機させる。 ``` うろ覚えで申し訳ありません。
回答: 状況によると思います。 1. ImageIO BufferedImageを得られるので編集したいならこの方法が最も素直だと思います。コードベース相対でも読めますし絶対パスとしても読めます。手順が簡単で一番応用が利きそうです。 2. ImageIcon ラベルなどのアイコンとして使う小さなアイコンイメージを読むためならこれが最適です。背景画像を読み込んだり、加工する対象として読み込むのにこれをわざわざ使っているコードを見かけますが最適とは言いかねます。 3. MediaTracker インターネットなど転送速度が遅い回線の向こう側に画像リソースがあり、それを完全に読み込んでから処理を進めるのではなく、読み込みと並行して他の処理(画面の構築など)を進めたい場合に使います。これはアプレット上に大きなイメージや多数のイメージを表示する場合やJavaでブラウザーのようなものを作る場合に用いられることが多いと思います。しかし・・・アプレットは最早役目を終え、ブラウザーを自前実装するまでもなくJavaFXにブラウザービューが提供されていますし、現在のPC性能ではある程度の大きさの画像でもそれほど読み込みに時間がかかるわけでもないといったことを考えれば、それほど活用する場面はないかも知れません。 JavaでPC用のスタンドアロンのゲームを作るなら1.2.のいずれかを使い分けることになると思います。 余談:ちなみに、現在のJavaのGUI標準はswingからJavaFXに変わってしまい、JavaFXでのImageクラスがswingとは別のクラス(javafx.scene.image.Image)になったため、JavaFXに取り組む場合はまた別の手段になります。JavaFXのImageクラスはまだまだ発展途上という感じでswingに比べてかゆいところに手が届かないケースもあります。