Androidで画像を読み込むときの注意
最近Androidでゲームアプリを作っていて、Rokonというフレームワークを使っている。ということで、画像を読み込むときの問題ってのはRokonにあるのかも知れないのだけど。
- http://code.google.com/p/rokon/ (Google Codeのページ)
- http://rokonandroid.com/ (Rokonのホームページ。チュートリアルとかある)
PNG画像を読み込むときに以下の様なエラーがlogcatに出力されていて、画像が読み込まれていない様子だった。
07-31 16:56:28.772: ERROR/Rokon(2060): Loading TextureAtlas 07-31 16:56:28.772: WARN/System.err(2060): java.lang.Exception: Loading TextureAtlas 07-31 16:56:28.772: WARN/System.err(2060): at com.stickycoding.rokon.Debug.error(Debug.java:71) 07-31 16:56:28.782: WARN/System.err(2060): at com.stickycoding.rokon.TextureAtlas.onLoadTexture(TextureAtlas.java:163) 07-31 16:56:28.782: WARN/System.err(2060): at com.stickycoding.rokon.GLHelper.checkTextureValid(GLHelper.java:206) 07-31 16:56:28.782: WARN/System.err(2060): at com.stickycoding.rokon.GLHelper.bindTexture(GLHelper.java:189) 07-31 16:56:28.782: WARN/System.err(2060): at com.stickycoding.rokon.GLHelper.drawNormal(GLHelper.java:366) 07-31 16:56:28.792: WARN/System.err(2060): at com.stickycoding.rokon.DrawableObject.onDrawNormal(DrawableObject.java:382) 07-31 16:56:28.792: WARN/System.err(2060): at com.stickycoding.rokon.DrawableObject.onDraw(DrawableObject.java:360) 07-31 16:56:28.792: WARN/System.err(2060): at com.stickycoding.rokon.Layer.onDraw(Layer.java:138) 07-31 16:56:28.792: WARN/System.err(2060): at com.stickycoding.rokon.Scene.onDraw(Scene.java:934) 07-31 16:56:28.792: WARN/System.err(2060): at com.stickycoding.rokon.RokonRenderer.onDrawFrame(RokonRenderer.java:40) 07-31 16:56:28.792: WARN/System.err(2060): at com.stickycoding.rokon.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1112) 07-31 16:56:28.792: WARN/System.err(2060): at com.stickycoding.rokon.GLSurfaceView$GLThread.run(GLSurfaceView.java:946) 07-31 16:56:28.802: VERBOSE/Rokon(2060): @@ bind 3 07-31 16:56:28.912: DEBUG/dalvikvm(2060): GC freed 1246 objects / 48464 bytes in 106ms 07-31 16:56:29.772: WARN/System.err(2060): java.lang.IllegalArgumentException: Unknown type 07-31 16:56:29.772: WARN/System.err(2060): at android.opengl.GLUtils.getType(GLUtils.java:71) 07-31 16:56:29.782: WARN/System.err(2060): at android.opengl.GLUtils.texSubImage2D(GLUtils.java:177) 07-31 16:56:29.782: WARN/System.err(2060): at com.stickycoding.rokon.TextureAtlas.onLoadTexture(TextureAtlas.java:184) 07-31 16:56:29.782: WARN/System.err(2060): at com.stickycoding.rokon.GLHelper.checkTextureValid(GLHelper.java:206) 07-31 16:56:29.792: WARN/System.err(2060): at com.stickycoding.rokon.GLHelper.bindTexture(GLHelper.java:189) 07-31 16:56:29.792: WARN/System.err(2060): at com.stickycoding.rokon.GLHelper.drawNormal(GLHelper.java:366) 07-31 16:56:29.792: WARN/System.err(2060): at com.stickycoding.rokon.DrawableObject.onDrawNormal(DrawableObject.java:382) 07-31 16:56:29.792: WARN/System.err(2060): at com.stickycoding.rokon.DrawableObject.onDraw(DrawableObject.java:360) 07-31 16:56:29.792: WARN/System.err(2060): at com.stickycoding.rokon.Layer.onDraw(Layer.java:138) 07-31 16:56:29.792: WARN/System.err(2060): at com.stickycoding.rokon.Scene.onDraw(Scene.java:934) 07-31 16:56:29.792: WARN/System.err(2060): at com.stickycoding.rokon.RokonRenderer.onDrawFrame(RokonRenderer.java:40) 07-31 16:56:29.802: WARN/System.err(2060): at com.stickycoding.rokon.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1112) 07-31 16:56:29.802: WARN/System.err(2060): at com.stickycoding.rokon.GLSurfaceView$GLThread.run(GLSurfaceView.java:946)
まったく意味が分からなかったのだけど、いろいろ調べてみたら画像ファイルが「インデックスカラー」で保存されているこうなるらしい。なにそれ。
とりあえず、問題の画像をGimpで開くとタイトルバーに↓こんなふうに出ているはず。
そこで、Gimpのメニューから「画像」>「モード」>「RGB」を選択して変換する。タイトルバーには以下のように表示されるはず。
はまるねこれは。