2015年5月21日木曜日

【Tips】JavaFXのImageクラスで画像を読み込む方法

JavaFXでFXMLを使った開発中につまづいたのでメモします。こんな感じのコードでつまづいた。

 gc.drawImage(new Image(getClass().getResouces("/test.png").getPath), 0, 0);

gcはGraphicContext、drawImageは画像, x座標, y座標の順に引数をとって、その座標に画像を描画します。画像には新しいImageのインスタンスを作りつつ入れます。


事の始まり


JavaFXのライブラリ(javafx.scene.image.Image)を使って、resourceフォルダに入れた画像をCanvasに表示しようとしたところ、試しに読み込んだ(と思っていた)画像が表示されない。Imageのコンストラクタは画像ファイルのパスを受け取るのに、パスの画像が表示されない。読み込みに入ると「そのパスにその画像はないよ(いわゆるぬるぽ)」で止まってしまう。

パスがおかしいのかと思ってSystem.out.println()で表示してみても、ちゃんとフルパスが表示されている。


問題の解決

結果的には、Imageクラスのコンストラクタが、入力したパスを勝手にresourceからの相対パスとしてみることが判明した。なので、

 new Image("/test.png");

とすると、"プロジェクトのフォルダ/src/main/resources/test.png"のファイルを読み込む。つまり、フルパスを入れるとresourcesフォルダのパスにフルパスがひっついて動かない。


その他

 あまり関係ないが、GraphicContextはdraw◯◯という名前のメソッドをほとんど持っていない。最初は戸惑ったが、線を描くときはstroke◯◯みたいなメソッドを使う。四角はquad()。このネーミングってProcessingみたいだけど、中はJavaFXとかなんだろうか。普通のJavaでSwingだとdrawLineとかになりそうだけど...調べるほどではないけど気にはなる。




0 件のコメント:

コメントを投稿