2013-01-05 10 views
7

Mam załadowane wszystkie moje obrazy z powodzeniem w przeszłości i używam OpenGL ES 2.0, więc obrazy nie muszą być potęgami dwóch (mam kilka załadowanych pomyślnie, że nie są).LibGDX nie może załadować określonego obrazu

Kod na pytanie brzmi:

Line 96: splashSheet = new Texture(Gdx.files.internal("test.png")); 

To jest mój komunikat o błędzie:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: test.png 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111) 
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: test.png 
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140) 
    at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64) 
    at com.badlogic.gdx.graphics.Texture.load(Texture.java:175) 
    at com.badlogic.gdx.graphics.Texture.create(Texture.java:159) 
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:133) 
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:122) 
    at com.panini.game.GameScreen.show(GameScreen.java:96) 
    at com.badlogic.gdx.Game.setScreen(Game.java:59) 
    at com.panini.game.Splash.render(Splash.java:29) 
    at com.badlogic.gdx.Game.render(Game.java:46) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:190) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108) 
Caused by: java.io.IOException: couldn't load pixmap 
    at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.<init>(Gdx2DPixmap.java:57) 
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:138) 
    ... 11 more 

Oto, co sprawia, że ​​to ciekawy problem. Mogę załadować plik this, ale nie mogę załadować pliku this. Ten pierwszy to po prostu przycięty zrzut ekranu tego, którego chcę użyć. Drugi obraz, który podałem (który nie działa) jest oryginalny. Nazywa się splashSprites.png, ale próbowałem zmienić nazwę na test.png i poprawnie go odnosiłem, ale nadal nie działa, więc wiem, że to zdecydowanie nie jest kwestia nazewnictwa ani nic. Jeśli umieściłem oba pliki w katalogu aktywów lub katalogu bin, odpowiednio test1.png i test2.png, kod zadziała, gdy poproszę o załadowanie test1.png, ale nie, jeśli poprosię o załadowanie test2.png, więc to nie jest tak, że ja ' m również umieszcza pliki w niewłaściwym miejscu. Ci dwaj byli chyba najbardziej prawdopodobnymi kandydatami, ale ich wykluczyłem.

Próbowałem innych rzeczy, takich jak ponowne wyeksportowanie pierwszego obrazu i takie, ale nigdy nie działało (co było pracy było biorąc zrzut ekranu, dlatego jestem tutaj). Domyślam się, że może to mieć coś wspólnego z alfą na jednym z obrazów (ponieważ to jest naprawdę jedyna rzecz z dwóch - jedna ma alfa, a druga nie), ale jest to mało prawdopodobne, ponieważ mogłem załadować inne tekstury, które miały alfa. Naprawdę jestem zakłopotany.

Z góry dziękuję.

Odpowiedz

7

Znalazłem odpowiedź. Wygląda na to, że LibGDX nie obsługuje 16-bitowych plików PNG (czy to prawda?), Ponieważ po przekonwertowaniu mojego arkusza kalkulacyjnego na 8-bitową głębię za pomocą Podglądu w systemie OS X, problem zniknął.

Dzięki P.T. aby uzyskać poradę dotyczącą uaktualnienia LibGDX, ponieważ w ten sposób otrzymałem następujący komunikat o błędzie:

Caused by: java.io.IOException: couldn't load pixmap 8bit only 
+0

my 2 pens: with imagemagick używa "png8: name.png" jako pliku wyjściowego do wymuszenia formatu 8-bitowego – njzk2

4

Uruchom na obrazie pngcrush, aby uzyskać bardziej popularny format PNG.

Czy ten zrzut ekranu został wygenerowany za pomocą kodu zrzutu forum libGDX? Używałem tego również i miałem problemy z wynikającym z tego, że PNG są ogromne i uważam, że miałem problemy z ich ładowaniem/edycją. W każdym razie pngcrush naprawił problem dla mnie.

Narzędzie pngcheck może być w stanie wyizolować to, co różni się między dwoma posiadanymi obrazami.

Poking u źródła libgdx, widzę tę ostatnią (11 dni temu) zmiana libgdx obrazu ładowarka: https://github.com/libgdx/libgdx/commit/4fac29aef94e3afafdd47d71e60faf256fa171b0 (wygląda na to IOException powinien zawierać więcej informacji na temat tego, co tak naprawdę poszło nie tak), więc może spróbować uruchomić przeciwko nightclies libGDX?

+0

Dzięki. Próbowałem pngcrush, ale to nie zadziałało. Preview jednak (domyślnie eksportuje jako 16-bitowy, więc musisz to zmienić ręcznie), ale myślę, że ImageMagick również to potrafi. Jego narzędzie identyfikacji pozwoliło mi również sprawdzić, czy obraz ma 8 lub 16 bitów. –

Powiązane problemy